Git有一个众所周知的,或者至少是众所周知的空树,其SHA1是:
4b825dc642cb6eb9a060e54bf8d69288fbee4904
Run Code Online (Sandbox Code Playgroud)
(你可以在任何仓库中看到这个,甚至是新创建的仓库,用git cat-file -t和git cat-file -p).
如果您努力工作并且非常小心,您可以使用这个空树来存储没有文件的目录(请参阅如何将空目录添加到git存储库的答案),尽管这不是一个好主意.
它作为一个参数更有用git diff-tree,其中一个示例钩子可以做到.
我想知道的是,
4b825dc642cb6eb9a060e54bf8d69288fbee4904? (创建符号名称的快速而肮脏的方法是将SHA1放入,例如,.git/Nulltree不幸的是,您必须为每个repo执行此操作.似乎更好地将幻数放在脚本中等等.我只是有一般的厌恶到魔术数字.)
这是我之前提出的另一个问题的后续措施。
正在编辑之前,最初创建的文件something被重命名为somethingelse可观察到这里:
git mv something somethingelse
Run Code Online (Sandbox Code Playgroud)
该文件somethingelse然后得到重命名回至something第二VIM编辑之前:
git mv somethingelse something
Run Code Online (Sandbox Code Playgroud)
git mv something somethingelse
Run Code Online (Sandbox Code Playgroud)
如果在这一点上我添加abc到代码中,我们将最终得到:
First line of code. abc
Run Code Online (Sandbox Code Playgroud)
我认为这是第1行增加了4个字节,而这又将在此结束:
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: something
deleted: somethingelse
Run Code Online (Sandbox Code Playgroud)
然后,如果我们添加换行符并在第三行中键入abc(也应为4个字节,如果有错,请更正我):
First line of code.
abc
Run Code Online (Sandbox Code Playgroud)
突然,Git会检测到重命名(包括编辑):
On branch master
Changes to be committed:
(use "git reset HEAD …Run Code Online (Sandbox Code Playgroud)