uVersion
简体中文
下载 →

Wiki

分发

按路径模式将文件(插件、共享内容)从源仓库复制到目标仓库。发布、重映射、跳过锁定。

简介

分发会将文件(一个插件、一个共享内容包)从仓库复制到目标仓库, 并限定于一组路径模式。它会在目标中创建新的修订,因此常规的增量同步会将内容传播给客户端。 这是在多个项目之间共享同一个插件而无需手动复制粘贴的方式。

访问与角色

与其他选项卡不同的访问模型 分发不会像其他选项卡那样受控。它需要 manage_rules 能力,该能力由 adminlead 在整个服务器范围内持有。不持有任何能力的 project_admin 无法访问。而 lead 则可以将任意仓库链接到任意其他仓库。

创建链接

1. 打开 Distribution 选项卡

Distribution 选项卡位于 SERVER 行:一个链接连接两个仓库,因此它不依赖于在 PROJECT 行中所选的仓库。点击右上角的 + New LinkNew Distribution Link 窗口即会打开。

2. 选择源、目标和路径

Source Repository 是文件来源的仓库,Target Repository 则是目标仓库:所选源会 从目标列表中消失,链接不能回到自身。Path Patterns 接受每行一个模式(例如 Plugins/MyPlugin/Content/SharedAssets/),并且至少需要一个:没有模式,就不会复制 任何内容。

New Distribution Link 窗口:Source Repository 与 Target Repository 菜单、填有两个模式的 Path Patterns(one per line)区域,以及 Cancel 和 Create Link 按钮。

3. 用 Create Link 确认

链接会立即出现在列表中。同一两个仓库之间已存在的链接会被拒绝(冲突):请编辑已有的那一个,而不是再创建 第二个。

路径模式

只要一个模式出现在路径的任何位置,它就与该路径匹配(「包含」式搜索)。 因此 Plugins/uVersion 模式会匹配 DefaultProject/Plugins/uVersion/Source/Foo.cpp, 无论项目前缀如何。末尾的斜杠没有任何影响。

发布

1. 找到链接及其操作

每个链接占据列表中的一行:source → cible、以胶囊形式显示的模式、创建者以及上次发布的日期。 操作集中在该行右侧:Show pending files(文件图标)、Publish history(时钟)、 Publish、启用或停用链接的开关,以及删除。

2. 检查将要发出的内容

Show pending files 会在该行下方展开存在差异的文件列表,并附上其源修订,标题中显示总数 (Pending Files (N))。每个文件都带有其状态:newmodifiedlocked。 如果一切都是最新的,面板会这样说明。

在某个链接行下方展开的 Pending Files 面板:标记为 new、modified 或 locked 的路径及其源修订,以及列表上方由上次发布留下的绿色横幅。

3. 发布

Publish 按钮执行复制。一条绿色横幅会汇总 「Published: X source files found, Y updated, Z skipped (locked), W unchanged」。只要链接处于停用状态,该按钮 便被禁用,而发布一个停用的链接会返回一个明确的错误。

目标中被锁定的文件会被跳过,而不会被覆盖。内容相同(哈希相同) 的文件会计为未变并被跳过。发布是原子的(单个事务)。

Publish history(时钟)随后给出最近 50 次发布:更新和跳过了多少文件、由谁、以及何时。

重映射与修订

路径会针对目标被改写:uVersion 会去掉匹配模式之前的部分,然后加上在目标上检测到的前缀。 示例:源 DefaultProject/Plugins/uVersion/foo.cpp,模式 Plugins/uVersion,目标前缀 CineDroneStudio/CineDroneStudio/Plugins/uVersion/foo.cpp。目标前缀是从目标中一个 现有文件推断出来的(可处理带或不带项目子文件夹的仓库)。

修订编号 分发的修订使用一个高于目标当前修订的全局计数器,以便增量同步能够获取它们。因此某个文件的历史可能会「跳跃」 (例如 rev 1 然后 rev 200):这只是表面现象。数据块是共享的(没有数据重复,只是引用计数递增)。

常见陷阱

「Publish」呈灰色

该链接已停用。请先启用它。发布一个已停用的链接会返回一个明确的错误。

某个文件在目标中未更新

要么它在目标一侧被锁定(此时会被跳过并计为「locked」),要么其内容已经相同(计为「unchanged」)。请查看发布汇总 和 pending files 列表。

project_admin 看不到该选项卡

这是有意为之:分发需要 manage_rules(admin 或 lead)。project_admin 无权访问,即便是在自己的仓库上 也一样。