《Git版本控製管理(第2版)》——1.3 先例
本節書摘來自異步社區《Git版本控製管理(第2版)》一書中的第1章,第1.3節,作者:【美】Jon Loeliger , Matthew McCullough著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看
1.3 先例
VCS的完整曆史已經超出了本書的討論範圍。然而,有一些具有裏程碑、革新意義的係統值得一提。這些係統對Git的開發或者有重要的鋪墊意義,或者有引導意義。(本節為可選章節,希望能夠記錄那些新特性出現的時間,以及在自由軟件社區變得流行的時間。)
源代碼控製係統(Source Code Control System, SCCS)是UNIX②上最初的幾個係統之一,由M. J. Rochkind於20世紀70年代早期開發。[“The Source Code Control System,” IEEE Transactions on Software Engineering 1(4) (1975): 364-370.]這是有證可查的可以運行在UNIX係統上的最早的VCS。
SCCS提供的數據存儲中心稱為“版本庫”(repository),而這個基本概念一直沿用至今。SCCS同樣提供了一個簡單的鎖模型來保證開發過程有序。如果一個開發人員需要運行或者測試一個程序,他需要將該程序解鎖並檢出。然而,如果他想修改某個文件,他則需要鎖定並檢出(通過UNIX文件係統執行的轉換)。當編輯完成以後,他又可以將文件檢入到版本庫中並解鎖它。
修訂控製係統(Revision Control System,RCS)由Walter F. Tichy於20世紀80年代早期引入[“RCS: A System for Version Control,”Software Practice and Experience 15(7) (1985): 637-654.]。RCS引入了雙向差異的概念,來提高文件不同版本的存儲效率。
並行版本係統(Concurrent Version System,CVS)由Dick Grune於1986年設計並最初實現。4年後又被Berliner和他的團隊融入RCS模型重新實現,這次實現非常成功。CVS變得非常流行,並且成為開源社(http:www.opensource.org)區許多年的事實標準。CVS相對RCS有多項優勢,包括分布式開發和版本庫範圍內對整個“模塊”的更改集。
此外,CVS引入了一個關於“鎖”的新範式。而之前的係統需要開發人員在修改某個文件之前先鎖定它,一個文件同時隻允許一個開發人員進行修改,所有需要修改這個文件的開發人員需要有序等候。CVS給予每個開發人員對於自己的私有版本寫的權限。因此,不同開發人員的改動可以自動合並,除非兩個開發人員嚐試修改同一行。如果出現修改同一行的情況,那這一行將會作為“衝突”被標記出來,由開發人員手動去解決。這個關於“鎖”的新規則使得多個開發人員可以並行地編寫代碼。
就像經常發生的那樣,對CVS短處和缺點的改進,促進了新VCS的誕生:Subversion(SVN)。SVN於2001年問世,迅速風靡了開源社區。不像CVS,SVN以原子方式提交改動部分,並且更好地支持分支。
BitKeeper和Mercurial則徹底拋棄了上述所有解決方案。它們淘汰了中心版本庫的概念,取而代之的,數據的存儲是分布式的,每個開發人員都擁有自己可共享的版本庫副本。Git則是從這種端點對端點(Peer to Peer)的模型繼承而來。
最後,Mercurial和Monotone首創了用散列指紋來唯一標識文件的內容,而文件名隻是個“綽號”,旨在方便用戶操作,再沒有別的作用。Git沿用了這個概念。從內部實現上來說,Git的文件標識符基於文件的內容,這是一個叫做“內容可尋址文件存儲”(Content Addressable File Store,CAFS)的概念。這不是一個新概念。 據Linus的說法③,Git直接從Monotone借用了這個概念。Mercurial也同時實現了這個概念。
最後更新:2017-06-01 17:01:34