編輯:如果你downvote我的問題有一個體面的說爲什麼。Git如何知道將哪個索引blob添加到樹中?
在Pro Git Ch9的作者說:
通常Git根據你的暫存區域或索引的狀態,並從它上面書寫樹對象創建樹。
我的問題是如何混帳知道兩個consequitive索引條目從創建樹對象?
例如(隨機數的意思是40字符SHA1的 - 我只是做舉起手來):
$ echo 'First change' > one.txt
$ git add one.txt
$ find .git/objects -type f
.git/objects/1f/755a7fffe4 //first index entry
$ echo 'Second change' > one.txt
$ git add one.txt
$ find .git/objects -type f
.git/objects/2d/234asdf2 //second index entry
$ git commit -a -m "Initial commit"
$ git cat-file master^{tree}
100644 blob 2d234asdf2 one.txt //How did it know not to take 1f755??
是否只看BLOB時間戳? 另外 - 創建第一個blob會發生什麼 - 沒有人引用它。它會被摧毀還是被遺忘?
你的git有一些非常錯誤的地方。首先,你在blob上添加'one.txt'和你的對象數據庫增益,然後添加(可能已經存在的)'two.txt',並且你的對象數據庫中只有一個blob,它會丟失對應於'one .txt'。此外,您的blob條目沒有正確的ID。你使用的是什麼版本的git? – 2010-04-27 14:36:16
「git add two.txt」你的意思是「one.txt」? – Thilo 2010-04-27 14:39:24
@Thilo:Yah我的意思是one.txt改變了它。對不起@Charles - 錯字。忽略我製作的ID :-) – drozzy 2010-04-27 16:12:22