2011-03-09 62 views
4

我在一個文件中檢入了一個簡單的git倉庫。 從我的調查;有放置在.git/objectsGit中的樹和提交類型有什麼區別?

  1. 三種類型的對象提交
  2. BLOB

舉個例子:

$ git cat-file -t 8b4e834eba22e60c284c7b77e43d3c29e619f92f 
commit 

$ git cat-file -t c7c5b03aea0b8c970c93de3670c28f2108948266 
tree 

$ git cat-file -t e965047ad7c57865823c7d992b1d046ea66edf78 
blob 

如果我試圖運行git-LS-樹上一個blob,它會拋出一個錯誤。

但我同樣可以在committree對象上運行它。

$ git ls-tree -t c7c5b03aea0b8c970c93de3670c28f2108948266 
100644 blob e965047ad7c57865823c7d992b1d046ea66edf78 readme.txt 

$ git ls-tree -t 8b4e834eba22e60c284c7b77e43d3c29e619f92f 
100644 blob e965047ad7c57865823c7d992b1d046ea66edf78 readme.txt 

是一個commit對象也tree? 他們的區別是什麼?

回答

9

提交對象是一個引用樹的對象,並將其他元數據(作者,提交者,時間戳等)與它相關聯。

  Commit 
    /  \ 
    /  \ 
(parent SHA)  Tree 
(author)  / \ 
(committer) Blob Blob 
(timestamps) 
(etc) 

多個對象提交可以引用相同的樹(如果文件中的每個的狀態提交是相同的)。例如,如果兩個人對一個文件進行相同的更改並提交,它將導致兩個不同的提交對象(因爲時間戳和作者都會有所不同)。但是,由於最終結果是相同的文件內容,因此兩個提交都將指向同一棵樹。

當您在提交SHA上運行git ls-tree時,它會自動使用該提交所引用的樹SHA。

相關問題