當前位置:編程學習大全網 - 行動軟體 - 【Git原理】深入理解git add和git commit命令

【Git原理】深入理解git add和git commit命令

(1) git倉庫(版本庫):git倉庫就是壹個.git文件夾。這個文件夾內包含了很多文件(見插圖2),其中有壹個很重要的文件夾objects,保存了暫存區的所有文件對象,包括blob對象、tree對象、commit對象等,這些對象都是壹以文件的形式來保存的。還有HEAD文件,保存著最新的提交的指針。當然很多人到這裏可能還是不理解objects中的文件對象和HEAD中保存的指針到底是什麽意思,沒關系,下面會詳細講解。

(2)工作區:在壹個項目目錄中,除了.git文件的其他所有文件的集合就是工作區。

(3)暫存區:暫存區可以理解為文件從修改到最後提交到git版本庫之間的壹個緩存,為了防止壹次提交了不必要的文件,有回退的余地,便有了暫存區。

(4)HEAD:HEAD在.git文件夾中是壹個文件,文件的內容是壹個32位的16進制數,這只是壹個指針,他指向最近壹個提交點、這個提交點實質是壹個commit對象,對象裏包含裏多個屬性,包括最後壹個提交點目錄結構索引、上壹次提交點id、提交人、提交時間等。

(1) 首先,跟著我的思路,我們來創建壹個git倉庫, 通過壹個例子來理解git add命令

1、首先,我們通過git init來創建壹個倉庫,這時會生成壹個.git文件夾,這個文件夾就壹個git倉庫

2、創建壹個文件A.java

執行 git add A.java

到.git裏面的objects文件中,發現,多了壹個文件夾,打開,裏面有壹個文件,名字是壹串符號,打開這個文件,裏面是壹串無法識別的字符。

git add做了啥?

其實,在執行git add命令的時候,git首先會通過hash函數算出文件名A.java對應的sha-1值是1fed2a34f13dd2a34f13d,這個code是壹個32位的16進制數,git會取這個code的前兩位作為文件夾名在.git/objects文件夾中創建壹個文件夾1f,取code的後30位作為文件名,在.git/objects/1f中創建壹個文件ed2a34f13dd2a34f13d,git會將A.java的文件內容通過壹定的壓縮保存在這個文件中

未完待續.....

本文到這裏就快結束了,文中可能有些地方沒有說明清楚,歡迎指定討論,有問題歡迎騷擾,看到會第壹時間回復!

  • 上一篇:《我愛我班》主題班會方案
  • 下一篇:日式綁縛有幾種方法?
  • copyright 2024編程學習大全網