《Git版本控制管理(第2版)》 1 3 先例

2021-09-23 16:39:48 字數 1630 閱讀 9036

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於2023年設計並最初實現。4年後又被berliner和他的團隊融入rcs模型重新實現,這次實現非常成功。cvs變得非常流行,並且成為開源社(http:www.opensource.org)區許多年的事實標準。cvs相對rcs有多項優勢,包括分布式開發和版本庫範圍內對整個「模組」的更改集。

此外,cvs引入了乙個關於「鎖」的新正規化。而之前的系統需要開發人員在修改某個檔案之前先鎖定它,乙個檔案同時只允許乙個開發人員進行修改,所有需要修改這個檔案的開發人員需要有序等候。cvs給予每個開發人員對於自己的私有版本寫的許可權。因此,不同開發人員的改動可以自動合併,除非兩個開發人員嘗試修改同一行。如果出現修改同一行的情況,那這一行將會作為「衝突」被標記出來,由開發人員手動去解決。這個關於「鎖」的新規則使得多個開發人員可以並行地編寫**。

就像經常發生的那樣,對cvs短處和缺點的改進,促進了新vcs的誕生:subversion(svn)。svn於2023年問世,迅速風靡了開源社群。不像cvs,svn以原子方式提交改動部分,並且更好地支援分支。

bitkeeper和mercurial則徹底拋棄了上述所有解決方案。它們淘汰了中心版本庫的概念,取而代之的,資料的儲存是分布式的,每個開發人員都擁有自己可共享的版本庫副本。git則是從這種端點對端點(peer to peer)的模型繼承而來。

最後,mercurial和monotone首創了用雜湊指紋來唯一標識檔案的內容,而檔名只是個「綽號」,旨在方便使用者操作,再沒有別的作用。git沿用了這個概念。從內部實現上來說,git的檔案識別符號基於檔案的內容,這是乙個叫做「內容可定址檔案儲存」(content addressable file store,cafs)的概念。這不是乙個新概念。 據linus的說法③,git直接從monotone借用了這個概念。mercurial也同時實現了這個概念。

Git學習筆記2 版本控制

1.版本回退 head 當前指標 head 表示向上一層 head n 表示向上n層 git reset hard head 返回到上乙個版本 git reset hard 94bf 返回到指定版本,94bf是指定版本的id穿梭前,用git log可以檢視提交歷史,以便確定要回退到哪個版本。要重返未...

Git(2) 版本控制工具高階

倉庫已經建立好了,接下來就應該去提交該專案中的 接下來只需要去思考是否需要將所有的檔案都加入到版本控制中。git提供了一種可配性很強的機制允許使用者將指定的檔案或目錄排除在版本控制之外,它會檢查 倉庫的目錄下是否存在乙個名為.gitignore的檔案,如果存在的話,就去一行行讀取這個檔案中的內容,並...

Git版本控制 2 git版本控制基本命令

版本回退 現在,我們最次修改readme的檔案,並再次提交檔案 git add readme.txt 1 file changed,1 insertion 1 deletion 有些時候,在打boss之前,你會手動存檔,以便萬一打boss失敗了,可以從最近的地方重新開始。git也是一樣,每當你覺得檔...