【发布时间】:2011-08-10 06:24:37
【问题描述】:
我对 Git 比较陌生。我之前用过Subversion (SVN)。
我注意到,如果文件已被重命名,大多数图形化 Git 前端和 IDE 插件似乎都无法显示文件的历史记录。当我使用
git log --follow
在命令行上,我可以跨重命名查看整个日志。
According to Linus Torvalds (alternative link) --follow 开关是一个“SVN noob”取悦;严重的 Git 用户不要使用它:
--follow 完全是 hack,旨在满足从不 对诸如此类的事情一无所知 父母身份或漂亮的修订图 无论如何。
这并不完全是基本的,但 “--follow”的当前实现 真的是一个快速预处理的东西 固定在修订行走 逻辑,而不是任何东西 真的很重要。
它实际上被设计为“SVN noob”取悦者,而不是“真正的 git” 功能”的东西。这个想法是 你会远离(破碎的) 重命名的思维方式 事关大局。
铁杆 Git 用户如何在文件重命名时获取文件的历史记录?这样做的“真正”方法是什么?
【问题讨论】:
-
@David Hall:
git mv oldfile newfile根本不会记录重命名 - 这与删除一个文件并添加另一个文件相同。 git 只会在事后每次提交时从树的状态中计算出重命名和副本。 -
@David Hall:如果你用 git 之外的其他工具重命名文件(例如
/bin/mv oldfile newfile),然后再使用git add newfile; git rm oldfile,结果与git mv oldfile newfile没有区别。 -
如果您将文件移动到新的存储库,这种思想就会崩溃,在这种情况下,无法移动其整个历史可能是一个主要问题。当然,在一个复杂的项目中,一个文件可以真正带来多少真实历史是有限度的。
-
注意:
git log --follow在 git 2.9(2016 年 6 月)中有所改进:参见 my answer below -
从 v2.15 开始,您可能希望在
diff时尝试使用--color-moved。
标签: git