As part of our platform consolidation, this content will be moving to Unity.com by March 31st, 2025.

Preview the new location and updated resources here.

分布式版本控制指南


阅读 Plastic 手册中的集中式和分布式一章,了解分布式开发的基础知识。

使用本最新指南了解包复制与直接复制、跨不同服务器的身份验证、如何使用命令行和 GUI 进行复制,以及分支资源管理器如何帮助进行分布式存储库的可视化。


复制模式

有两种可用的复制模式:

  • 直接服务器到服务器复制 - Plastic SCM 客户端将告诉目标服务器从源服务器复制分支。服务器将通过 Internet 或 Intranet 连接进行通信以复制数据。
  • 基于包的复制 - Plastic SCM 客户端与源服务器连接并创建复制包。该包将亲自交付(例如通过 U 盘),然后由目标服务器导入。

下图描绘了两种可用的复制模式。

复制模式

基于包 的复制引入了保持服务器同步的能力(这些服务器由于安全限制而不允许直接连接)。


从命令行进行复制

上面描述的所有复制场景和可能性都可以使用以下 Plastic SCM 命令进行管理:pushpull

cm pull srcbranch destinationrepos

其中 srcbranch 是标识要复制的分支及其存储库的分支规格,而 destinationrepos 是要复制 分支的存储库。


直接服务器复制

假设您想将位于服务器 london:8084 的存储库 codemain 分支复制到位于 bangalore:7070 的存储库 code_clone。命令如下:

cm pull main@code@london:8084 rep:code_clone@bangalore:7070

如果您不仅要复制 main 分支,还要复制整个存储库,可以使用 clone 命令:

cm clone code@london:8084 code_clone@bangalore:7070

复制包

要使用 复制分支,第一步是创建一个复制包,然后将包导入到另一个服务器中。

假设需要为服务器 box:8084 的存储库 code 中的 main 分支创建一个复制包。

cm push br:/main@code@box:8084 --package=box.pk

以上命令将生成一个名为 box.pk 的包,其中包含 main 分支的所有内容。

稍后,该包将被导入到存储库服务器 berlin:7070

cm pull rep:code@berlin:7070 --package=box.pk

身份验证

在复制期间,不同的服务器需要相互通信。这意味着运行不同身份验证模式的服务器将需要交换数据。

为此,复制系统能够设置不同的身份验证选项。


设置身份验证模式

下图显示了具有一个客户端和两个服务器的典型场景。所有涉及的 Plastic SCM 组件都配置为在 LDAP 下工作,并且它们共享相同的 LDAP 凭据,因此不需要转换。

请注意,身份验证发生在两个级别:

  1. 客户端需要经过身份验证才能连接到目标服务器。图中,目标服务器为 berlin
  2. 然后,berlin 需要连接到服务器 london 以检索有关要复制的分支(示例中为 main)的信息。

如果两个服务器未使用相同的身份验证机制或未针对相同的 LDAP 权限进行身份验证,则步骤 2 将失败。

分布式系统身份验证图

下图显示的场景中,服务器 london 配置为使用用户/密码身份验证。在这种情况下,图上方指定的命令将失败,因为服务器之间的身份验证在步骤 2 中不起作用。

指定凭据以便在服务器之间进行复制

为了解决此问题,复制系统能够指定要在服务器之间使用的身份验证凭据。在本示例中,客户端可以向服务器 berlin 指定用户和密码以便与服务器 london 通信。

下图显示了在源服务器上使用用户/密码时指定身份验证凭据的两种不同方式。

指定身份验证凭据的两种不同方式

第一个选项实际上是在命令行中指定模式加上用户和密码(表示为 UP)。

第二个选项使用身份验证文件,这在要重复使用身份验证凭据时很有用。如图所示,身份验证文件是一个简单的文本文件,包含两行:

  • 身份验证工作模式 - UPWorkingMode、LDAPWorkingMode、NameWorkingMode、ADWorkingMode 或 NameIDWorkingMode
  • 身份验证模式的具体身份验证数据 - 第二行中指定的数据与配置文件 client.conf 的 SecurityConfig 部分中的数据完全相同。

现在假设必须以相反的方向(从 berlinlondon)进行复制,如下图所示。需要指定连接到 LDAP 服务器(在本例中是通过 LDAP 访问的 Active Directory)的参数。通常,在 LDAP 下将使用身份验证文件来简化该过程。

UP 服务器与 LDAP 服务器进行通信
注意:如果通过复制包执行复制,则客户端需要能够连接到源服务器或目标服务器,具体取决于它是执行导出操作还是导入操作。

转换用户和组

在具有不同安全模式的服务器之间执行复制时,身份验证并不是唯一的问题。必须在不同的安全模式之间转换用户和组标识。

下图中的示例尝试从用户/密码身份验证模式复制到基于 LDAP 的身份验证模式。UP 节点上的用户列表存储的是纯文本名称,而 LDAP 服务器上的用户列表存储的是 SID。如果所复制的某个修订的所有者需要从 repA 复制到 repB,则会从 repA 的用户列表中取出一个用户或组,然后引入到 repB 的列表中。如果将 repA 中的名称直接插入到 repB 的列表中,稍后当 berlin 的服务器尝试解析 LDAP 标识符时会出现问题,因为它会找到无效的标识符:用户/密码模式下的用户标识符将与 LDAP 目录的用户标识符不匹配,并且复制的存储库中的用户名将是错误的。

所以为了解决这个问题,就需要转换。

复制时的用户和组转换

Plastic 复制系统支持三种不同的转换模式

  • 复制模式 - 这是默认行为。复制时在存储库之间只复制安全 ID。仅当托管不同存储库的服务器以相同身份验证模式工作时,这才有效。
  • 名称模式 - 基于名称完成安全标识符之间的转换。在上图的示例中,假设用户 daniel 必须按名称从 repA 转换为 repB。在 repB 中,Plastic SCM 服务器将尝试查找名为 daniel 的用户,并在需要时将其 LDAP SID 引入表中。
  • 转换表 - 这也执行基于名称的转换,但由表驱动。用户指定的表告诉目标服务器如何匹配名称。该表指明必须如何将源用户或组名称转换为目标名称。下图说明了如何构建转换表,以及该表如何在不同的身份验证模式之间进行转换。
转换表说明
注意:转换表只是一个纯文本文件,每行有两个名称,用分号 (";") 分隔。第一个名称表示要转换的用户或组(源),第二个名称表示目标。

从图形界面进行复制

可从命令行界面 (CLI) 和 Plastic 图形用户界面 (GUI) 工具完成复制。所有可能的操作都位于分支 选项下的子菜单中,因为复制主要与分支相关。本主题将介绍如何从 GUI 执行最常见的复制操作。


复制操作

在 GUI 中,复制和分布式协作功能已整合为以下操作:

  1. 分支操作:
    1. 推送所选分支
    2. 拉取所选分支
    3. 拉取远程分支
  2. 包操作:
    1. 从当前分支创建复制包
    2. 从分支创建复制包
    3. 导入复制包

下图描绘了不同的可用操作。在命令行中,所有操作都是从单个命令发出的,但 GUI 会区分推送(将更改从您的服务器移动到目标)和拉取(将更改从远程存储库获取到您的存储库)操作。

GUI 复制操作

复制菜单

如前文所述,所有复制操作都可以从分支菜单中访问到(查看下图)。

推送此分支拉取此分支从此分支创建复制包选项与分支视图中当前选择的分支相关。

拉取远程分支创建复制包导入复制包等其他选项是通用复制操作,它们不受当前分支的限制,而是位于分支菜单下以将所有复制选项聚合在一起。

GUI 分支菜单中的复制选项

将更改推送到远程存储库

每当您想将更改推送到远程存储库时,请在分支菜单上选择推送此分支推送您的更改意味着将在所选分支上所做的更改发送到远程存储库。

推送更改
  • 服务器 - 如果您以前从未从目标存储库进行过复制,则必须键入服务器目标名称或服务器目标 IP(加上端口号)。
  • 浏览服务器 - 列出存储库上以前的复制以及配置的配置文件上可用的服务器列表(查看高级选项)。
    当您拉取一个分支时,会在您的存储库中创建一条记录,以便了解该分支的来源(服务器和存储库)。该服务器将在以后的推拉操作中用作可能的服务器。
  • 复制目标中的存储库 - 如果目标存储库中已存在该分支,则将同步 更改。如果目标中存在冲突的变更集,则会显示一条警告消息。然后,一旦合并冲突得到解决,开发者将需要通过首先将分支拉取到本地服务器然后推送分支来协调更改。
    如果目标存储库中不存在该分支,则将创建一个新分支(由源存储库上使用的相同 GUID 标识)。
  • 浏览存储库 - 浏览目标服务器上的存储库。如果您无权访问服务器,则必须在高级选项中选择或创建配置文件。

将分支与远程更改同步

一旦您将分支推送到其他存储库,就可以远程修改该分支。在某个时间点,您会希望远程检索对您的分支所做的更改。为此,您必须使用复制分支菜单中的拉取此分支操作。

下图中描绘的对话框与用于推送更改的对话框非常相似,但这次,您的服务器位于右侧,作为操作的目标

从远程分支拉取更改

从远程分支拉取更改时,如果两个位置上存在冲突的变更集,则可能会创建子分支


导入远程分支

复制过程中的另一个常见场景是将远程存储库中的分支导入您的分支,以便开始进行更改或从其创建子分支。

为了执行导入,请使用拉取远程分支选项。随即将显示下图所示的对话框。请注意,此时可以选择源服务器、存储库、分支以及服务器上的目标存储库。

拉取远程分支

管理远程身份验证

正如身份验证一章所述,不同的 Plastic SCM 服务器可以使用不同的身份验证模式。默认情况下,当您尝试连接到远程服务器时,您将使用当前的配置文件(这是用于连接到服务器的配置)。但是,有时默认配置文件在远程服务器上无效。

为了将 Plastic SCM 配置为能够与使用不同身份验证模式的远程服务器连接,请使用复制对话框中的高级选项按钮。此时将弹出一个对话框,如下图所示。

“高级选项”对话框 - I3 视觉主题

该对话框显示当前选择的配置文件(屏幕截图上的默认配置文件)以及转换模式(有关更多信息,请参阅身份验证一章)和可选的转换表。

您可以从以前的复制操作中创建不同的身份验证配置文件,并可以通过单击位于远程服务器配置的配置文件编辑框右侧的浏览按钮列出这些配置文件或创建新的配置文件。

此时将显示如下图所示的对话框,允许您选择、编辑、创建或删除配置文件。

配置文件选择对话框 - I3 视觉主题
注意:每次更改服务器时,“复制”对话框 都会尝试自动选择配置文件。它将根据提供的服务器信息寻找最合适的配置文件。

运行复制过程

到目前为止,所有步骤都集中在设置复制过程上。正确配置操作后,按复制按钮,然后您将实际进入复制进度对话框,如下图所示。

复制操作分为三个主要状态:

  • 提取元数据 - 发生在源服务器上。
  • 推送元数据 - 发生在目标服务器上。
  • 传输修订数据 - 当数据从源传输到目标时涉及这两个服务器。

在任何时间点,都可以单击取消按钮取消操作。

复制操作完成后,将显示摘要,其中包含有关创建的对象数量的详细信息。

复制操作进度 - I3 视觉主题

创建包

您可以从存储库上的分支创建复制包,或从可以连接到的任何服务器上的任何分支创建复制包。为了从分支视图中的所选分支创建包,请单击从此分支创建复制包

如果要从任何远程分支创建包,请单击复制菜单上的创建复制包

从 GUI 创建复制包

上图显示了创建包的对话框。此过程将从所选分支生成一个复制包,其中包含来自该分支的所有数据和元数据。当没有可用的直接连接时,可使用这种方法在服务器之间进行复制。


导入复制包

从复制菜单中选择导入复制包,然后选择要导入的包文件。随即将显示下图所示的对话框。

导入复制包

分布式分支资源管理器

分支资源管理器是 Plastic SCM GUI 中的核心功能之一,并且在最近的版本中得到了极大的改进,能够处理分布式场景。这就是它现在得到分布式分支资源管理器之名的原因。它的简称是 DBrEx。


DBrEx 的工作原理

考虑两个复制的 Plastic SCM 服务器,一个在中央服务器上运行,另一个在笔记本电脑上,如下所示。

在笔记本电脑上运行的服务器首先从中央服务器复制 main 分支。后来创建了 task002,并且开发者对其进行了处理。在某个时间点,场景如下:

包含两个服务器的分布式场景

DBrEx 能够通过从不同来源收集数据,然后在单个图表上呈现变更集和分支来呈现分布式图表,如下图所示。

DBrEx 草稿

DBrEx 将结合不同的来源并使用从不同来源收集的信息创建交互式图表。


在 DBrEx 上呈现多个存储库源

有多个选项可以将多个复制的存储库合并到同一个 DBrEx 图表中。第一个用于创建组合呈现,包括来自所选复制源的所有变更集和分支。下图显示了如何开始配置该图表。

复制源选项卡显示用于从 DBrEx 上呈现的存储库中提取更改的存储库(或者将更改推送到活动存储库的存储库)。

在 DBrEx 上组合远程存储库的选项

单击一个或多个复制源(单击显示远程数据复选框)后,分布式图表将如下图所示呈现。该图表被扩展并包含来自远程存储库的信息。

这样,分布式分支资源管理器带来了一种新方法以了解项目和分支如何在不同复本之间演化。

也可以从 DBrEx 运行复制操作,因此现在拉取远程分支就像选择 DBrEx 中呈现的远程分支并单击拉取此分支一样简单。远程分支和变更集也可用于“差异比较”,这极大地增强了对于分布式更改的处理。

在分支资源管理器上呈现的远程变更集

对远程分支和变更集进行差异比较

可以右键单击 DBrEx 上的远程分支或变更集来探索和了解远程修改的内容。通过这种方式,开发者或集成商可以在完成操作之前更好地了解将从远程源拉取哪些更改。下图显示了对远程变更集启用的选项。

远程变更集的菜单选项(差异比较)

为单个分支启用 DBrEx

有时没有必要呈现整个分布式图表,因为 SCM 管理员或开发者只需要关注特定的分支。

单个分支已扩展显示远程信息

上图显示了分支资源管理器/显示以下来源的当前分支中的远程变更集菜单选项;该选项允许选择远程来源以限定具有远程数据的分支,从而了解需要拉取的内容、查看资源管理器差异以及触发复制命令。


同步

Plastic SCM 旨在帮助团队拥抱分布式开发。为此,我们增强了 DBrEx,但为了处理数百个分布式变更集,我们创建了一个新视角:分布式视图。

同步视图使您能够轻松地同步任何一对存储库,浏览和比较要推送或拉取的待定更改。

要获取有关如何使用“同步”的所有信息,请参阅 GUI 指南中的同步视图一节。


更新

2019 年 3 月 22 日
2019 年 3 月 20 日
  • 我们更新了命令行用法示例以使用新命令 pushpull
2019 年 2 月 15 日
  • 我们添加了一个注意事项来说明您将通过阅读本指南学到的知识。在此注意事项中,您还将发现一个链接,用于访问 Plastic 手册中关于集中式和分布式模式基础知识的章节。
2017 年 5 月 12 日
  • 我们更新了一些屏幕截图,因为我们更改了与存储库相关的复制对话框,将其中的服务器文本框替换为包含最近使用的服务器列表的组合框。