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

什麼是 版本控制系統(VCS)

什麼是版本控制系統(VCS)

很多人認為 Git 難以理解的第一個門檻在於:所謂的「Git 是一個分散式版本控制系統」這句話的具體 含義不夠清楚。

其實分散式版本控制系統(Distributed Version Control System - DVCS)這個定義並不難,不過一步一步來,我先告訴你,什麼是版本控制系統(Version Control System - VCS)。

 

版本控制:最基本功能

版本控制系統(VCS)最基本的功能是版本控制。所謂版本控制,意思就是在檔案的修改歷程中保留修改歷史,讓你可以方便地撤銷之前對檔案的修改操作

 

        最簡化的版本控制模型,是大多數主流文字編輯器都有的「撤銷(Undo)」功能:你本來想刪除一個 字元,卻在按刪除鍵之前不小心選中了全文,結果一下子整篇文件都被刪光了,沒關係,按一下「撤 銷」(Ctrl + Z 或 ⌘ + Z 或 U 等等,具體和你的作業系統以及編輯器有關),刪掉的文字就都回來 了。這其實是文字編輯器幫你自動儲存了之前的內容,當你按下「撤銷」的時候,它就幫你把內容回退到上一個狀態;同理,按一次是會退到上一個版本,按兩次就是回退到上上一個版本。寫程式的時候同樣也難免會遇到「寫錯」的情況,所以程式的 VCS,當然也會需要版本控制功能,這 樣當你發現「昨天有一行程式碼寫錯了」,你就不用憑著記憶把那段程式碼背出來,而只需要在 VCS 中選 擇撤回到昨天的那個版本。

 

主動提交:程式程式碼和普通文字的區別

VCS 和文字編輯器的撤銷功能比起來,有一個很重要的區別是:程式程式碼的修改的生命週期非常長。

一次程式碼的修改,在幾天後、幾個月後、幾年後都有可能需要被翻出來。如果依然採用「每次改動自動儲存」的形式來保留修改歷史,將會導致改動歷史非常頻繁和無章可循,這樣,歷史程式碼的查詢、閱讀和回退就會很困難了。所以,和文字編輯器的撤銷功能不同,VCS 儲存修改歷史,使用的是主動提交改動的機制。在你寫了一段完整的程式碼(例如修復了一個 bug)之後,使用 commit 命令把改動和對改動的描述信 息提交,這次改動就被記錄到版本歷史中了。之後如果你希望回退到這個版本,就可以從 VCS 的歷史

日誌中方便地找到它。

 

多人合作的同步需求:中央倉庫

Git 原理詳解及實用指南 程式碼可以一個人寫,但更多的時候會是多個人共同開發。那麼自然地,就需要有一箇中央倉庫作為代 碼的儲存中心:所有人的改動都會上傳到這里,所有人都能也都能看到和下載到別人上傳的改動。這樣,解決了同步的需求,多個人在不同的機器上開發同一個程式就成了可能。版本控制、主動提交、中央倉庫這三個要素,共同構成了版本控制系統(VCS)的核心:開發團隊中 的每個人向中央倉庫主動提交自己的改動和同步別人的改動,並在需要的時候檢視和操作歷史版本,這就是版本控制系統。

 

中央式版本控制系統

最初的版本控制系統,是中央式版本控制系統(Centralized VCS),也就是前面我講的這種。Git 是 分散式的版本控制系統(Distributed VCS),它和中央式的區別我在下節說,現在先說一下中央式版本控制系統的工作模型

 

 

工作模型

假設你在一個三人團隊,你們計劃開發一個軟體或者系統,並決定使用中央式 VCS 來管理程式碼。於 是:

 

 

而對於團隊中的每個人來說,就會更簡單一點:
1. 第一次加入團隊時,把中央倉庫的程式碼取下來;

2. 寫完的新功能提交到中央倉庫;

3. 同事提交到中央倉庫的新程式碼,及時同步下來。

 

這樣,一個三人的團隊就成功做到了各自在自己的電腦上開發同一個專案,並且互不影響,就好像你們三個人是在同一臺電腦上操作一樣。這就是中央式 VCS 最基本的工作模型。當然,實際的開發工作並沒有簡單到這種程度,因為你時常會 需要處理程式碼衝突、檢視版本歷史、回退程式碼版本等;另外,Git 屬於分散式 VCS,它的概念也比中 央式 VCS 要複雜一些。但這些概念你需要一步步地理解和吸收,你現在只需要先知道中央式 VCS 的 這個基本工作模型,其他的內容我會在後面慢慢地全部講清楚。