1. 程式人生 > >什麼是 分散式版本控制系統(DVCS)

什麼是 分散式版本控制系統(DVCS)

什麼是分散式版本控制系統(DVCS)

分散式 VCS (Distributed VCS / DVCS)和中央式的區別在於,分散式 VCS 除了中央倉庫之外,還有本地倉庫:團隊中每一個成員的機器上都有一份本地倉庫,這個倉庫里包含了所有的版本歷史,或者換句話說,每個人在自己的機器上就可以提交程式碼、檢視歷史,而無需聯網和中央倉庫互動——當然,取而代之的,你需要和本地倉庫互動。

 

 

中央式 VCS 的中央倉庫有兩個主要功能:儲存版本歷史、同步團隊程式碼。

而在分散式 VCS 中,儲存版本歷史的工作轉交到了每個團隊成員的本地倉庫中,中央倉庫就只剩下了同步團隊程式碼這一個主要任務。它的中央倉庫依然也儲存了歷史版本,但這份歷史版本更多的是作為團隊間的同步中轉站。

 

工作模型

依然以三人團隊為例,分散式 VCS 的工作模型大致是這樣:

1. 首先,你作為主工程師,獨立搭建了專案架構,並把這些程式碼提交到了本地倉庫

2. 然後,你在服務器上建立了一箇中央倉庫,並把 1 中的提交從本地倉庫推送到了服務器的中央倉庫

3. 其他同事把中央倉庫的所有內容克隆到本地,擁有了各自的本地倉庫,從此刻開始,你們三人開 始並行開發;

4. 在之後的開發過程中,你們三人總是每人獨立負責開發一個功能,在這個功能開發過程中,一個人會把它的每一步改動提交到本地倉庫

注意:由於本地提交無需立即上傳到中央倉庫,所以每一步提交不必是一個完整功能,而可以是功能中的一個步驟或塊。

5. 在一個人把某個功能開發完成之後,他就可以把這個功能相關的所有提交從本地倉庫推送到中央倉庫

6. 每次當有人把新的提交推送到中央倉庫的時候,另外兩個人就可以選擇把這些提交同步到自己的 機器上,並把它們和自己的原生代碼合併

 

 

可以看出,這個工作模型和上一節講的「中央式 VCS 的工作模型」很相似,只是把程式碼的提交和上傳過程拆開了

 

另外,和上節講的中央式 VCS 工作模型一樣,這個也只是分散式 VCS 的一個最基本的工作模型,實際的開發工作會比這個麻煩和複雜。但這是個核心模型,你把它理解了,就可以更好地看懂後面的內容。

 

優點與缺點

分散式 VCS 的優點:

1. 大多數的操作可以在本地進行,所以速度更快,而且由於無需聯網,所以即使不在公司甚至沒有 在聯網,你也可以提交程式碼、檢視歷史,從而極大地減小了開發者的網路條件和物理位置的限制 (例如,你可以在飛機上提交程式碼、切換分支等等);

2. 由於可以提交到本地,所以你可以分步提交程式碼,把程式碼提交做得更細,而不是一個提交包含很 多程式碼,難以 review 也難以回溯。 

 

對於一般的程式專案而言,由於專案的大多數內容都是文字形式的程式碼,所以工程的體積都並不是很大,再加上文字內容自身的特點,VCS 可以利用演算法來把倉庫的體積極大地壓縮。這就導致,在實際中,Git 等分散式 VCS 的倉庫體積並不大,初次獲取專案的耗時和本地倉庫的儲存佔用都很小。所以對於大多數的程式專案而言,分散式 VCS 「尺寸大、初次下載慢」的問題其實並不嚴重。

不過也有一些例外,比如遊戲開發。遊戲的開發中有大量的大尺寸資料和媒體檔案,並且這些檔案的格式也不容易壓縮尺寸,如果用分散式 VCS 會導致倉庫的體積非常龐大。所以一些大型遊戲的開發會選擇中央式的 VCS 來管理程式碼。