编辑:如果你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