git檔案管理模型和git分支 branch

2021-06-17 17:14:59 字數 1824 閱讀 6467

git使用起來非常方便,也極其複雜,對於半入門的新手,理解git對檔案管理的模型往往有助於加深對git的理解。

1、git檔案管理模型

假設在工作目錄中有三個檔案,準備將它們暫存後提交。暫存操作會對每乙個檔案計算校驗和(即sha-1 雜湊字串),然後把當前版本的檔案快照儲存到git倉庫中(git使用blob型別的物件儲存這些快照),並將校驗和加入暫存區域。每一次commit操作,git都會建立乙個commit物件,該物件包含乙個指向tree物件(tree物件的概念後面解釋)的指標,包含本次提交的作者等相關附屬資訊,包含零個或多個指向該提交物件的父物件指標(首次提交是沒有直接祖先的,普通提交有乙個祖先,由兩個或多個分支合併產生的提交則有多個祖先。)。下面介紹tree物件的概念:實際上,git commit操作在新建乙個提交物件前,git會先計算每乙個子目錄(也就是專案根目錄)的校驗和,然後在git倉庫中將這些目錄儲存為tree物件(tree物件中記錄著其目錄中的所有的檔案的檔名,檔案位置等原資訊,根據這些元資訊能夠找到檔案的實際儲存位置。)。之後git建立的提交物件,除了包含相關提交資訊以外,還包含著指向這個tree物件(專案根目錄)的指標,如此它就可以在將來需要的時候,重現此次快照的內容了。

在上面的例子中,工作目錄中有三個檔案,將它們暫存並提交後會生成5個物件:三個表示檔案快照內容的blob物件;乙個記錄著目錄樹內容及其中各個檔案對應blob物件索引的tree物件;以及乙個包含指向tree物件(根目錄)的索引和其他提交資訊元資料的 commit物件。具體如下圖:

如果修改後再進行提交那麼將會生成乙個新的commit物件,該物件中會包含乙個指向上次提交物件(也就是父物件)的指標。兩次提交後,倉庫的歷史會成為下面的樣子:

2、git分支(branch)

git中的分支(branch),其實本質上僅僅是個指向commit物件的可變指標。git會使用master作為分支的預設名字。在若干次提交後,你其實已經有了乙個指向最後一次提交物件的master分支,它在每次提交的時候都會自動向前移動。從下圖可以看出,git中的分支概念是指指向最近一次提交物件的指標,從該提交物件可以追溯專案的提交歷史。

新建分支的命令git branch testing會在距離當前最近的提交物件上新建乙個分支指標,命名為testing,也指向該提交物件。

為了區分,當前在哪個分支工作,git中還會儲存乙個head指標,指向當前的工作分支。

使用git checkout testing命令,可以將工作分支切換到testing。

在testing分支上提交之後,用git checkout命令切換回master分支,然後進行提交,可以得到,下圖的狀態:

以上就是對git檔案管理模型和git分支概念的簡單介紹,希望對新手有幫助。

參考文獻《pro git》

Git分支模型

本文介紹一種使用git進行源 管理的分支模型,著重於如何使用git更好的管理我們的源 我假定您對git有一定了解,會使用基本的git命令進行一些簡單的源 管理工作。這不是一篇git使用教程。根據自己的使用情況進行了補充。我們知道git是乙個不需要中心伺服器就能工作的源 管理系統 但我仍然建議你至少保...

git 分支管理

一 遠端倉庫有master和dev分支 1.轉殖 git clone 這個git路徑是無效的,示例而已 2.檢視所有分支 git branch all 預設有了dev和master分支,所以會看到如下三個分支 master 本地主分支 origin master 遠端主分支 origin dev 遠...

git分支管理

1 遠端倉庫相關命令 檢出倉庫 git clone git 檢視遠端倉庫 git remote v 新增遠端倉庫 git remote add name url 刪除遠端倉庫 git remote rm name 拉取遠端倉庫 git pull remotename localbranchname ...