簡體   English   中英

Git中樹和提交類型有什么區別?

[英]What is the difference between a tree and commit type in Git?

我在一個文件中簽入了一個簡單的git倉庫。 從我的調查; .git/objects放置了三種類型的.git/objects

  1. 承諾
  2. BLOB

舉個例子:

$ git cat-file -t 8b4e834eba22e60c284c7b77e43d3c29e619f92f
commit

$ git cat-file -t c7c5b03aea0b8c970c93de3670c28f2108948266
tree

$ git cat-file -t e965047ad7c57865823c7d992b1d046ea66edf78
blob

如果我試圖在blob上運行git-ls-tree,則會拋出錯誤。

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

$ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM