[英]What is the difference between a tree and commit type in Git?
我在一個文件中簽入了一個簡單的git倉庫。 從我的調查; 在.git/objects
放置了三種類型的.git/objects
舉個例子:
$ git cat-file -t 8b4e834eba22e60c284c7b77e43d3c29e619f92f
commit
$ git cat-file -t c7c5b03aea0b8c970c93de3670c28f2108948266
tree
$ git cat-file -t e965047ad7c57865823c7d992b1d046ea66edf78
blob
如果我試圖在blob上運行git-ls-tree,則會拋出錯誤。
但是我同樣可以在commit
或tree
對象上運行它。
$ git ls-tree -t c7c5b03aea0b8c970c93de3670c28f2108948266
100644 blob e965047ad7c57865823c7d992b1d046ea66edf78 readme.txt
$ git ls-tree -t 8b4e834eba22e60c284c7b77e43d3c29e619f92f
100644 blob e965047ad7c57865823c7d992b1d046ea66edf78 readme.txt
commit
對象也是tree
嗎? 它們有什么不同,如果有的話?
提交對象是引用樹並將其他元數據(作者,提交者,時間戳等)與其關聯的對象。
Commit
/ \
/ \
(parent SHA) Tree
(author) / \
(committer) Blob Blob
(timestamps)
(etc)
多個提交對象可以引用同一個樹(如果每個提交中的文件狀態相同)。
例如,如果兩個人對文件和提交進行相同的更改,則會產生兩個不同的提交對象(因為時間戳和作者都會有所不同)。 但是,由於最終結果是相同的文件內容,因此兩個提交都將指向同一個樹。
在提交SHA上運行git ls-tree
時,它會自動使用該提交引用的樹SHA。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.