一、雜湊
雜湊是乙個系列的加密演算法,各個不同的雜湊演算法雖然加密強度不同,但是有以下幾個共同點:
①不管輸入資料的資料量有多大,使用同乙個雜湊演算法,得到的加密結果長度固定
②雜湊演算法確定,輸入資料確定,輸出結果保證不變
③雜湊演算法確定,輸入資料有變化,輸出結果一定有變化,而且通常變化很大
④雜湊演算法不可逆
⑤雜湊演算法中不區分英文大小寫
雜湊演算法有很多種,如:md5、sha-1等。git 底層採用的是 sha-1 ,因為雜湊演算法可以被用來驗證檔案,git 就是靠這種機制來從根本上保證資料完整性的
二、git儲存版本的機制
1、集中式版本控制工具(如svn)的檔案管理機制:以檔案變更列表的方式儲存資訊。這類系統將它們儲存的資訊看作是一組基本檔案(對應下圖的version1)和每個檔案隨時間逐步累積的差異(對應下圖的其他version),在檔案管理的時候只儲存當前版本相對於上乙個版本的差異,這是一種增量式的版本控制
2、git 的檔案管理機制:git 把資料看作是小型檔案系統的一組快照。每次提交更新時 git 都會對當前的全部檔案製作乙個快照並儲存這個快照的索引。為了高效,如果檔案沒有修改,git 不再重新儲存該檔案,而是只保留乙個鏈結指向之前儲存的檔案。所以 git 的工作方式可以稱之為快照流。下圖中version2及其之後的實線框中的檔案表示該版本的該檔案相較於上個版本有變動,虛線框中的檔案表示該版本的該檔案相較於上一版本沒有變動(只儲存上乙個版本的指標,而無需儲存檔案),這樣根據當前版本的檔案和指向上一版本的指標就可以找到該版本的所有檔案的狀態
git 的提交物件:
提交物件及其父物件形成的鏈條:
三、git的分支管理機制(依賴於指標的變化)
1、分支的建立:建立乙個指向head當前指向的分支的當前版本的指標
說明:此時head指向master分支的f30ab版本,那麼新建立的testing分支的指標也會指向master分支的f30ab版本,實際上是建立的分支的指標會指向head指標指向的分支所在的版本
2、分支的切換:僅僅是改變head指標的指向
說明:切換分支時,僅僅是切換一下head指標的指向,從原分支指向想切換的分支
3、版本的提交
說明:若此時在testing分支上提交了版本,則只會使該分支的指標向後移動,不會影響其他分支,如上圖所示,其他分支的指標指向並沒有發生變化
4、衝突的產生
說明:在testing分支修改後,再將head切換至master,然後在master上修改相同的檔案,然後再master分支上提交,就會形成下面的局面:這時就有可能產生衝突,這合併版本的時候就需要解決衝突
5、和svn的比較
svn在建立分支的時候是將所有檔案複製乙份,而git僅僅是建立乙個指向當前版本的指標,因此效率很高;git中分支之間的切換僅僅是head指標的變化,效率也很高;
綜上:git的操作很依賴於head指標的變化。
Git基本原理
學習git的基本原理有利於理解git命令背後的執行原理,需要將腦子裡面之前關於其他版本管理工具比如cvs subversion perforce的知識暫時忘掉,因為它們與git的使用是不太相同的 其他版本工具比如vcs認為它們儲存的資訊是由一系列的檔案組成,以及每個檔案上做出的改動,git儲存資料時...
git筆記 基本原理
git是乙個分布式版本控制工具。乙個git專案有三個部分組成 工作目錄,本地倉庫和遠端倉庫。其中工作目錄和本地倉庫都在本地磁碟上,遠端倉庫一般可以理解為另一台電腦上的倉庫。工作目錄 就是被git管理的那些檔案 本地倉庫 主要包含兩部分 乙個commit樹,和一系列指向commit樹的指標。commi...
Git基本原理總結
本質上,git是一套內容定址 content addressable 檔案系統,而和我們直接接觸的git介面,只不過是封裝在其之上的乙個應用層。這個關係頗有點類似於計算機網路中應用層和下屬層的關係。在git中,那些和應用層相關的命令 也就是我們最常用的命令,如git commit git push等...