版本控制系統的基礎觀念

http://www.uml.org.cn/pzgl/200903132.asp
1 檔案庫
所有信息的一個數據庫。
前面提到,版本控制系統有一個集中存放檔案的地方,這個地方有個正式名稱,叫做「檔案庫(repository)」。檔案庫裏面儲存了項目檔案的所有歷史版本(包括目前開發中的版本),有的版本控制系統是以數據庫的方式儲存,有的是以檔案的方式儲存,不論儲存的方式爲何,對使用者來說,最重要的就是要把檔案庫放在一臺穩定、安全的機器上,並且還要定期備份。




2 工作區
因此,我們會從檔案庫中取出(複製)一部分自己需要的檔案到自己本機的硬盤裏,這些存放在本機的檔案,就稱爲本地複本(local copy),而存放本地複本的地方,則稱爲工作區(workspace)。相對於本地複本,儲存在檔案庫中的版本,則稱爲主拷貝(master copy)。
對於小型項目而言,本地複本可能就是項目的所有原始碼和文件,而大型項目可能會切割成數個子系統或模塊,所以開發人員只要取出自己負責的子系統就行了。
工作區有時候也稱爲工作目錄(working directory)或程序代碼的工作複本(working copy)。


3 項目、模塊、與檔案(Projects, Modules, and Files)
最上層的邏輯單位,就是項目(projects),在項目底下又可分成幾個模塊(modules)以及子模塊(submodules),你得爲這些模塊命名,以便團隊成員透過名稱來存取它們。例如一個汽車保養場的信息系統,可能會分成進廠維護管理模塊、庫存零件管理模塊、結帳模塊...等等,各開發人員只需要取出自己負責的模塊就行了。當然,如果你要的話,也可以把整個項目都取回自己的工作區。


4版本
其實版本控制系統在我們每次執行 check in 時,就會把這次存入的檔案視爲一個新的版本,而每個版本都會記錄在檔案庫裏面。也就是說,當你從檔案庫取出一個檔案,修改它,然後存入檔案庫,在檔案庫裏面就會保留一份原始的版本,以及你修改後的版本(注1)。 每次修改的新版本都會被賦予一個修訂版次(revision number),檔案的修訂版次在每次存入檔案庫時就會累加。跟版次號碼一起儲存的 信息可能還包括了檔案的修改時間,以及由開發人員額外加註的說明。


5標記(Tags)
前面提過,修訂版次(revision numbers)是用來表示個別檔案的版本,它會由版本控制系統自動累加,不適合用來表示項目的發行版本。當我們要爲項目訂一個好記的版本名稱時,例如:Pre-Relase2, 應該使用標記(tags)


6  分支(Branches)
分支(branches)的用處就在這裏,以上個例子而言,Mary 可以建立一個分支,以繼續修改程序上線後的臭蟲,而 John 則可以繼續維護目前的產品主線。此時 John 和 Mary 都一樣可以執行 check in 的動作,只是 Mary 取出和存入的都是檔案庫中的一個獨立分支,跟 Mary 維護的主線是完全分離的。下圖描繪了上述的作業方式(取自 [1])。


7 合併(Merging)
當你要 check in 某個檔案時,如果檔案已經先被其它人修改過並且 check in 了,版本控制系統便會偵測到,並且不允許你 check in 這個檔案。此時便需要使用合併(merge)的技術,將兩個人修改的內容進行合併,以確保彼此不會相互覆蓋,又能保留各自修改的內容。由於兩個人修改同一個檔案時,通常不會碰巧都修改到相同的部分,因此版本控制系統會幫我們自動完成合並的動作 ;萬一兩個人修改的部分正好重迭,這種情況稱爲衝突(conflict),此時就必須由後來 check in 的那個人手動解決衝突的部分(可能會和另一個修改此檔案的人討論爲什麼會發生這種情況,以及應如何修改)。這部分的處理過程在稍後還會有進一步的討論。


8 鎖定機制(Locking Options)
前面提到過兩個人修改同一個檔案所造成的衝突,是以合併的技術來解決,不過,各種版本控制系統採用的方式可能不盡相同,其相異之處,基本上只是對於檔案鎖定(locking)的處理方式不一樣而已。鎖定機制可分爲兩種:嚴格鎖定(strict locking)與樂觀鎖定(optimistic locking)。


9 術語表
英文 中文 說明
check out 取出 從檔案庫中取出檔案。
commit/check in 存入 將檔案從本地端存入檔案庫。
export 匯出 把整個模塊從檔案庫中取出來,取出來的檔案不包含版本控制系統的管理檔案,也就是匯出的模塊將不再由 版本控制系統控管。
import 匯入 把整個目錄結構匯入檔案庫。當你要把一個新的項目放進檔案庫進行版本控管時,就需要執行這個動作。
local copy 本地複本 放在客戶端機器的工作目錄中的項目複本。
master copy 主拷貝 放在檔案庫裏的項目複本。
module 模塊 一個目錄階層,通常一個項目就是一個模塊。
release 發行版本 軟件產品的一個版本。爲了區別產品的版本以及個別檔案的修訂版次,因此不使用 version,而用 release。
repository 檔案庫 存放所有檔案(包含歷史版本)的地方,客戶端執行 check out 時就是從這裏取出檔案。
revision number 修訂版次 一個檔案的修改版本,例如:1.1、1.3.2.2。
tag 標記 在開發過程的某個時間點上,爲一組檔案提供的符號名稱。透過 tag 一羣檔案,你可以很容易在某個 release 裏面找出這些檔案。
update 更新 從檔案庫中取得其它人修改的檔案,以更新本機的副本(local copy)。
workspace/
working directory 工作區/工作目錄 本機的工作目錄,又稱爲沙盒(sandbox)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章