Git是否将添加/删除视为重命名?

时间:2009-07-29 11:16:46

标签: git version-control dvcs

这可能更适合作为Git使用的任何问题跟踪器/论坛中的问题,但我认为我首先得到一个SO确认/解释:

我有一个repo跟踪一堆安装程序可执行文件。

假设foo-1.0.exe已经在回购邮件中。

我现在在同一目录中添加foo-2.0.exe(git add foo-2.0.exe)。接下来,我删除foo-1.0.exe(git rm foo-1.0.exe)。

我希望Git状态向我显示一个添加的文件和一个已删除的文件。相反,我得到了这个:


在分支大师
要提交的更改:
(使用“git reset HEAD ...”来取消演示)
重命名:foo-1.0.exe - > foo2.0.exe

对我来说这是一个WTF ......是Git使用某种启发式来猜测2.0是对1.0的更新......我可以看出这可能是有意义的,但我不认为我希望它能做到在这种情况下。

1 个答案:

答案 0 :(得分:15)

你是正确的,Git正在使用启发式。 Git只跟踪内容,因此存储库只知道曾经有foo-1.0.exe,现在有foo-2.0.exe。在您的情况下,git status正在使用可用信息来猜测可能存在重命名(加上一些小的更改,您的两个文件可能非常相似)。这种猜测不会影响存储库中记录的内容。

这种仅跟踪内容而非跟踪增量的理念允许Git发展并提供更好,更好的工具来浏览存储库历史记录。最终,Git将提供一种方法,通过重命名或重构或任何其他代码修改,在函数甚至行级别跟踪特定代码位的演变。这可以在存储库不必事先存储此信息的情况下完成。