版本控制系統(Version Control System, VCS)可以幫助我們記錄和跟蹤項目中各文件內容的修改變化。
分布式版本控制系統(Distributed version control system, DVCS)也是這樣,它的主要目標仍然是幫助記錄和跟蹤項目中所做的修改。而它與傳統版本控制系統的區別在於,開發人員相互同步修改內容的方式不同。
版本庫 The Repository
版本庫(Repository)是版本控制系統用來存儲所有歷史數據的地方。
大多數版本控制系統在版本庫中存儲各個文件的當前狀態、歷史修改時間、誰做的修改,以及修改的原因。
CVS和Subversion這類版本控制系統屬於集中式版本庫(Centralized Repository)模式。在這種模式下,所有的程序員都會把他們的改動提交到服務器上的一個公共版本庫中。在本地工作目錄樹中,只能看到代碼的最新版本,如果想查詢歷史修改記錄,就必須與服務器上的版本庫打交道。這就帶來一個問題:必須要使用網絡。
如果使用分布式版本控制系統,就不會遇到不能上網所帶來的問題。
這是以Git為代表的分布式版本控制系統最大的優勢。
每個人都會在本地有自己的版本庫,而不是連接到服務器上的一個公共的版本庫。所有的歷史記錄都存儲在本地的版本庫中。
工作目錄樹 Working Trees
工作目錄樹是程序員進行程序開發的地方。
在傳統的版本控制工具中,工作目錄在本地,而版本庫在服務器上,而Git中並非如此。
在Git中,版本庫不在服務器上,而存儲在本地工作目錄樹的“.git”目錄中。
工作目錄樹最初的創建有兩種方法:
1.用Git相關命令初始化版本庫,生成“.git”目錄,於是“.git”目錄的父目錄就成了工作目錄樹。
2.克隆一個已有的版本庫,也就連帶創建了相應的工作目錄樹。
代碼修改與文件同步 Manipulating Files and Staying in Sync
每次提交(Commit)操作都會使得版本庫中新增一個版本(Revision)。
除了記錄改動內容本身以外,版本庫還記錄改動的日志信息(Log Message)或稱提交留言(Commit Message)。
使用像Git這樣的分布式版本控制系統時,除了把改動提交到本地版本庫之外,還要通過某種方式將改動共享,以便其他程序員能夠得到。為此,需要把改動推入(Push)到上游版本庫(upstream repository),即公共版本庫。
推入操作是代碼同步的一半,另一半是,必須把別人完成的勞動從公共版本庫拿到本地版本庫中來。
具體來說,把遠程版本庫中的改動拿到本地版本庫中,需要兩步操作:
1.把改動取來(Fetch),把遠程版本庫中的改動取到本地版本庫。
2.將取來的內容和本地改動合並(Merge)。
在Git中,可以用一個命令完成這兩個操作:Pull。
使用標簽跟蹤里程碑 Tracking Milestones with Tags
標簽以一個簡單的名稱(即標簽名)來標記版本庫歷史中某個特定的點。
本質上,標簽是一個對於使用者來說易於理解和易於記憶的名字,用來標識版本庫中一個難讀難記的內部版本號,以此幫助使用者跟蹤歷史版本。
使用分支來跟蹤並行演進 Creating Alternate Histories with Branches
在版本庫中創建分支的起點。自此,各路發展平行並進。
每條分支記錄這條分支上發生的變更,而與其他分支隔離。
主分支(Master Branch)是研發的主線,一些版本控制工具也把主分支稱作主干(trunk)。
分支可以長期存在,也可以僅存在數小時。分支可以合並到其他的分支,但並非所有的分支都必須合並。
合並 Merging
合並操作把兩條或者兩條以上的分支合並到一起。
Git自動處理分支合並的方法與程序員人工處理的方法是相同的:Git比較各分支上的變化,確定變化在哪里發生——哪個文件的哪個位置。
當不同的變化發生在文件的不同部分時,Git能夠自動合並。但
情況並不總是這樣理想,當Git不能自動合並時,就會提示沖突(conflict)。
鎖機制 Locking Options
嚴格鎖(strict locking):一個時刻,只有一個人可以占用資源。
樂觀鎖(optimistic locking):允許多個人同時修改同一文件。樂觀鎖基於一個假定:大多數時候,這種並發修改不會引起沖突。
一些約定
Git 首字母大寫表示Git工具本身。
git 表示命令行中的命令。
prompt> 表示需要輸入的命令。
基礎命令
設置用戶名和郵箱:
prompt> git config --global user.name “XXXName”
prompt> git config –global user.email “XXXX@YYY.com”
用下列命令可以檢查上述設置是否成功:
prompt> git config --global --list
啟動圖形界面:
prompt> git-gui
啟動gitk:
在工作目錄樹下prompt> gitk
顯示版本庫中的歷史記錄:
prompt> gitk –all
獲取Git內置幫助信息:
prompt> git help
prompt> git help <command>
其中,用希望了解的具體命令名稱替代<command>
文檔中相應命令的頁面將會在瀏覽器中顯示出來。
參考資料
《版本控制之道——使用Git》(Pragmatic Version Control Using Git)