git 是如何儲存資料的呢?
剛學習的時候,文件就說:
git 儲存的不是檔案的變化或者差異,而是一系列不同時刻的檔案快照。
在進行提交操作時,git 會儲存乙個提交物件(commit object),該提交物件會包含乙個指向暫存內容快照的指標
。。該提交物件還包含了作者的姓名和郵箱、提交時輸入的資訊以及指向它的父物件的指標。首次提交產生的提交物件沒有父物件,普通提交操作產生的提交物件有乙個父物件,而由多個分支合併產生的提交物件有多個父物件
為了更加形象地說明,我們假設現在有乙個工作目錄,裡面包含了三個將要被暫存和提交的檔案。 暫存操作會為每乙個檔案計算校驗和(使用我們在 起步 中提到的 sha-1 雜湊演算法),然後會把當前版本的檔案快照儲存到 git 倉庫中(git 使用 blob 物件來儲存它們),最終將校驗和加入到暫存區域等待提交:
$ git add readme test.rb license
$ git commit -m 'the initial commit of my project'
當使用git commit
進行提交操作時,git 會先計算每乙個子目錄(本例中只有專案根目錄)的校驗和,然後在 git 倉庫中這些校驗和儲存為樹物件。 隨後,git 便會建立乙個提交物件,它除了包含上面提到的那些資訊外,還包含指向這個樹物件(專案根目錄)的指標。如此一來,git 就可以在需要的時候重現此次儲存的快照。
現在,git 倉庫中有五個物件:三個 blob 物件(儲存著檔案快照)、乙個樹物件(記錄著目錄結構和 blob 物件索引)以及乙個提交物件(包含著指向前述樹物件的指標和所有提交資訊)。
figure 9. 首次提交物件及其樹結構
做些修改後再次提交,那麼這次產生的提交物件會包含乙個指向上次提交物件(父物件)的指標。
figure 10. 提交物件及其父物件
git 的分支,其實本質上僅僅是指向提交物件的可變指標。 git 的預設分支名字是master
。 在多次提交操作之後,你其實已經有乙個指向最後那個提交物件的master
分支。 它會在每次的提交操作中自動向前移動。
note
git 的 「master」 分支並不是乙個特殊分支。 它就跟其它分支完全沒有區別。 之所以幾乎每乙個倉庫都有 master 分支,是因為git init
命令預設建立它,並且大多數人都懶得去改動它。
文件的例子超棒,所以直接拷過來吧,哈哈哈。
個人理解:
就是把專案及更改資訊只儲存一遍,建立分支就相當於打了乙個標記,使用這個標記裡的引用位址,能找到對應的提交資訊,並且還不會破壞更改前的資訊。如果想用對應時間或分支的專案資訊,只需要通過這個標記提取就可以了,包括如果想回滾到更改以前的專案階段,只需移動指標,也就是操作分支回滾到對應的時間段,就可以滿足。
分支合併,就相當於通過分支名,提取分支裡指向位址對應的專案,合併到一起。
待哥們繼續往下看哦。。。
Lerix的git學習筆記 9 git別名
可以把常用的git命令通過配置檔案設定別名。git config global alias.co checkout git config global alias.br branch git config global alias.ci commit git config global alias....
9 Git多協議方式
git支援多協議方式git支援多種協議,預設的git 使用ssh,但也可以使用https等其他協議。使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令。但是在某些只開放http埠的公司內部就無法使用ssh協議而只能用https。加密方式 對稱加密 效能高 用什麼加密就用什麼解密 ...
Git 學習筆記整理
git是什麼?git是乙個免費的開源分布式版本控制系統,旨在快速,高效地處理從小型到大型專案的所有事務。集中式與分布式的區別 git幾個特性 三種狀態 git有三種狀態 已提交 資料已經儲存在本地倉庫中 已修改 已修改檔案,但是還未儲存到倉庫中 已暫存 對乙個已修改檔案的當前版本做了標記,使之包含在...