分散式版本控制指南


請參閱 Plastic 手冊中的集中式和分散式一章,以瞭解分散式開發的基礎概念。

請使用此最新版指南,瞭解套件複寫與直接複寫的差異、各種不同伺服器之間的驗證、如何使用命令列和 GUI 進行複寫,以及分支瀏覽器如何協助視覺化分散式儲存庫。


複寫模式

有兩種可用的複寫模式:

  • 直接伺服器至伺服器複寫 - Plastic SCM 用戶端將告知目的地伺服器從來源伺服器複寫分支。伺服器將透過網際網路或內部網路連線進行通訊以複寫資料。
  • 以套件為基礎的複寫 - Plastic SCM 用戶端會與來源伺服器連線並建立複寫套件。此套件需親自交付 (例如透過 USB 隨身碟),之後再由目的地伺服器匯入。

下圖描述兩種可用的複寫模式。

複寫模式

以套件為基礎的複寫導入了讓伺服器保持同步的功能,但因安全性限制而不允許這些伺服器直接連線。


從命令列複寫

所有上述複寫案例和可能性都可以透過下列 Plastic SCM 命令進行管理:pushpull

cm pull srcbranch destinationrepos

其中,srcbranch 是識別要複寫的分支及其儲存庫的分支規格,而 destinationrepos 是即將複寫分支的儲存庫。


直接伺服器複寫

假設您要將伺服器 london:8084 的儲存庫程式碼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 的儲存庫程式碼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 的 [安全性設定] 區段完全相同的資料。

假設現在複寫必須反向進行 (從 berlinlondon),如下圖所示。系統會指定連線至 LDAP 伺服器 (在此案例中是透過 LDAP 存取的 Active Directory) 的參數。一般而言,在 LDAP 中,驗證檔案將用來簡化程序。

與 LDAP 通訊的 UP 伺服器
注意:如果複寫是透過複寫套件執行,用戶端必須能連線至來源或目的地伺服器,端視系統是否在執行匯出或匯入作業而定。

轉譯使用者和群組

在具有不同安全性模式的伺服器之間執行複寫時,驗證並不是唯一的議題。使用者和群組識別必須在不同的安全性模式之間進行轉譯。

下圖的範例嘗試從使用者/密碼驗證模式複寫至以 LDAP 為基礎的模式。UP 節點的使用者清單會儲存純文字名稱,但 LDAP 伺服器的使用者清單會儲存 SID。當正在複寫的某個修訂的擁有者需要從 repA 複製到 repB 時,將從 repA 的使用者清單中取得使用者或群組,並導入repB 的清單中。如果來自 repA 的名稱直接插入至 repB 的清單中,之後當柏林的伺服器嘗試解析 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 日
  • 我們已更新從命令列複寫,以展示 clone 命令如何符合分散式案例。
2019 年 3 月 20 日
  • 我們已更新命令列使用方式範例來使用新命令 pushpull
2019 年 2 月 15 日
  • 我們新增了說明閱讀本指南將學到的內容的附註。在此附註中,您也會找到探討集中式和分散式模式之 Plastic 手冊章節的連結。
2017 年 5 月 12 日
  • 我們已更新一些螢幕擷取畫面,因為我們變更了儲存庫相關的複寫對話方塊,將其伺服器文字方塊取代為包含最近使用之伺服器清單的下拉式方塊。