阅读 Plastic 手册中的集中式和分布式一章,了解分布式开发的基础知识。
使用本最新指南了解包复制与直接复制、跨不同服务器的身份验证、如何使用命令行和 GUI 进行复制,以及分支资源管理器如何帮助进行分布式存储库的可视化。
有两种可用的复制模式:
下图描绘了两种可用的复制模式。
基于包 的复制引入了保持服务器同步的能力(这些服务器由于安全限制而不允许直接连接)。
上面描述的所有复制场景和可能性都可以使用以下 Plastic SCM 命令进行管理:push 和 pull。
cm pull srcbranch destinationrepos其中 srcbranch 是标识要复制的分支及其存储库的分支规格,而 destinationrepos 是要复制 分支的存储库。
假设您想将位于服务器 london:8084 的存储库 code 的 main 分支复制到位于 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 凭据,因此不需要转换。
请注意,身份验证发生在两个级别:
如果两个服务器未使用相同的身份验证机制或未针对相同的 LDAP 权限进行身份验证,则步骤 2 将失败。
下图显示的场景中,服务器 london 配置为使用用户/密码身份验证。在这种情况下,图上方指定的命令将失败,因为服务器之间的身份验证在步骤 2 中不起作用。
为了解决此问题,复制系统能够指定要在服务器之间使用的身份验证凭据。在本示例中,客户端可以向服务器 berlin 指定用户和密码以便与服务器 london 通信。
下图显示了在源服务器上使用用户/密码时指定身份验证凭据的两种不同方式。
第一个选项实际上是在命令行中指定模式加上用户和密码(表示为 UP)。
第二个选项使用身份验证文件,这在要重复使用身份验证凭据时很有用。如图所示,身份验证文件是一个简单的文本文件,包含两行:
client.conf
的 SecurityConfig 部分中的数据完全相同。现在假设必须以相反的方向(从 berlin 到 london)进行复制,如下图所示。需要指定连接到 LDAP 服务器(在本例中是通过 LDAP 访问的 Active Directory)的参数。通常,在 LDAP 下将使用身份验证文件来简化该过程。
在具有不同安全模式的服务器之间执行复制时,身份验证并不是唯一的问题。必须在不同的安全模式之间转换用户和组标识。
下图中的示例尝试从用户/密码身份验证模式复制到基于 LDAP 的身份验证模式。UP 节点上的用户列表存储的是纯文本名称,而 LDAP 服务器上的用户列表存储的是 SID。如果所复制的某个修订的所有者需要从 repA 复制到 repB,则会从 repA 的用户列表中取出一个用户或组,然后引入到 repB 的列表中。如果将 repA 中的名称直接插入到 repB 的列表中,稍后当 berlin 的服务器尝试解析 LDAP 标识符时会出现问题,因为它会找到无效的标识符:用户/密码模式下的用户标识符将与 LDAP 目录的用户标识符不匹配,并且复制的存储库中的用户名将是错误的。
所以为了解决这个问题,就需要转换。
Plastic 复制系统支持三种不同的转换模式:
可从命令行界面 (CLI) 和 Plastic 图形用户界面 (GUI) 工具完成复制。所有可能的操作都位于分支 选项下的子菜单中,因为复制主要与分支相关。本主题将介绍如何从 GUI 执行最常见的复制操作。
在 GUI 中,复制和分布式协作功能已整合为以下操作:
下图描绘了不同的可用操作。在命令行中,所有操作都是从单个命令发出的,但 GUI 会区分推送(将更改从您的服务器移动到目标)和拉取(将更改从远程存储库获取到您的存储库)操作。
每当您想将更改推送到远程存储库时,请在分支菜单上选择推送此分支。推送您的更改意味着将在所选分支上所做的更改发送到远程存储库。
一旦您将分支推送到其他存储库,就可以远程修改该分支。在某个时间点,您会希望远程检索对您的分支所做的更改。为此,您必须使用复制分支菜单中的拉取此分支操作。
下图中描绘的对话框与用于推送更改的对话框非常相似,但这次,您的服务器位于右侧,作为操作的目标。
从远程分支拉取更改时,如果两个位置上存在冲突的变更集,则可能会创建子分支。
复制过程中的另一个常见场景是将远程存储库中的分支导入您的分支,以便开始进行更改或从其创建子分支。
为了执行导入,请使用拉取远程分支选项。随即将显示下图所示的对话框。请注意,此时可以选择源服务器、存储库、分支以及服务器上的目标存储库。
正如身份验证一章所述,不同的 Plastic SCM 服务器可以使用不同的身份验证模式。默认情况下,当您尝试连接到远程服务器时,您将使用当前的配置文件(这是用于连接到服务器的配置)。但是,有时默认配置文件在远程服务器上无效。
为了将 Plastic SCM 配置为能够与使用不同身份验证模式的远程服务器连接,请使用复制对话框中的高级选项按钮。此时将弹出一个对话框,如下图所示。
该对话框显示当前选择的配置文件(屏幕截图上的默认配置文件)以及转换模式(有关更多信息,请参阅身份验证一章)和可选的转换表。
您可以从以前的复制操作中创建不同的身份验证配置文件,并可以通过单击位于远程服务器配置的配置文件编辑框右侧的浏览按钮列出这些配置文件或创建新的配置文件。
此时将显示如下图所示的对话框,允许您选择、编辑、创建或删除配置文件。
到目前为止,所有步骤都集中在设置复制过程上。正确配置操作后,按复制按钮,然后您将实际进入复制进度对话框,如下图所示。
复制操作分为三个主要状态:
在任何时间点,都可以单击取消按钮取消操作。
复制操作完成后,将显示摘要,其中包含有关创建的对象数量的详细信息。
您可以从存储库上的分支创建复制包,或从可以连接到的任何服务器上的任何分支创建复制包。为了从分支视图中的所选分支创建包,请单击从此分支创建复制包。
如果要从任何远程分支创建包,请单击复制菜单上的创建复制包。
上图显示了创建包的对话框。此过程将从所选分支生成一个复制包,其中包含来自该分支的所有数据和元数据。当没有可用的直接连接时,可使用这种方法在服务器之间进行复制。
从复制菜单中选择导入复制包,然后选择要导入的包文件。随即将显示下图所示的对话框。
分支资源管理器是 Plastic SCM GUI 中的核心功能之一,并且在最近的版本中得到了极大的改进,能够处理分布式场景。这就是它现在得到分布式分支资源管理器之名的原因。它的简称是 DBrEx。
考虑两个复制的 Plastic SCM 服务器,一个在中央服务器上运行,另一个在笔记本电脑上,如下所示。
在笔记本电脑上运行的服务器首先从中央服务器复制 main 分支。后来创建了 task002,并且开发者对其进行了处理。在某个时间点,场景如下:
DBrEx 能够通过从不同来源收集数据,然后在单个图表上呈现变更集和分支来呈现分布式图表,如下图所示。
DBrEx 将结合不同的来源并使用从不同来源收集的信息创建交互式图表。
有多个选项可以将多个复制的存储库合并到同一个 DBrEx 图表中。第一个用于创建组合呈现,包括来自所选复制源的所有变更集和分支。下图显示了如何开始配置该图表。
复制源选项卡显示用于从 DBrEx 上呈现的存储库中提取更改的存储库(或者将更改推送到活动存储库的存储库)。
单击一个或多个复制源(单击显示远程数据复选框)后,分布式图表将如下图所示呈现。该图表被扩展并包含来自远程存储库的信息。
这样,分布式分支资源管理器带来了一种新方法以了解项目和分支如何在不同复本之间演化。
也可以从 DBrEx 运行复制操作,因此现在拉取远程分支就像选择 DBrEx 中呈现的远程分支并单击拉取此分支一样简单。远程分支和变更集也可用于“差异比较”,这极大地增强了对于分布式更改的处理。
可以右键单击 DBrEx 上的远程分支或变更集来探索和了解远程修改的内容。通过这种方式,开发者或集成商可以在完成操作之前更好地了解将从远程源拉取哪些更改。下图显示了对远程变更集启用的选项。
有时没有必要呈现整个分布式图表,因为 SCM 管理员或开发者只需要关注特定的分支。
上图显示了分支资源管理器/显示以下来源的当前分支中的远程变更集菜单选项;该选项允许选择远程来源以限定具有远程数据的分支,从而了解需要拉取的内容、查看资源管理器差异以及触发复制命令。
Plastic SCM 旨在帮助团队拥抱分布式开发。为此,我们增强了 DBrEx,但为了处理数百个分布式变更集,我们创建了一个新视角:分布式视图。
同步视图使您能够轻松地同步任何一对存储库,浏览和比较要推送或拉取的待定更改。
要获取有关如何使用“同步”的所有信息,请参阅 GUI 指南中的同步视图一节。