“ git log --diff-filter = R”和“ git log --find-renames”之间有什么区别?

时间:2019-05-27 16:44:08

标签: git

我在有关git命令的视频教程中学到了

git log --diff-filter=R --find-renames

通过阅读文档得出的结论是

git log --diff-filter=R

应产生与

相同的结果

git log --find-renames

第一个组合命令可能被视为错字。

但是,当我在一个仓库中尝试时,两个命令分别产生了相同的结果,而在另一个仓库中,只有后一个仓库产生了任何结果。 另外,我找不到有关两者之间可能存在差异的任何文档。

除了可以向每个命令添加不同的修饰符之外,有人可以告诉我这些命令之间的区别是什么吗?

1 个答案:

答案 0 :(得分:2)

区别真的很简单:

  • --find-renames选项使用默认的50%相似文件匹配阈值打开重命名查找机制。重命名查找机制在相当旧的Git版本中默认为关闭,而在较新版本的Git中默认为打开,因此,如果您具有较新版本的Git(并且未更改默认值),请添加--find-renames到您的git diff完全没有效果。 1

  • --diff-filter=选项设置过滤器,以告诉Git运行内部差异引擎后有选择地显示的文件。选择R会告诉Git仅显示检测到重命名的文件。

因此,如果您使用的是Git的较旧版本,则需要两个 选项(或参见脚注1),以仅查看重命名的文件,而对于现代的Git,只需--diff-filter=R该选项就足够了,除非该存储库的配置已禁用重命名检测。


1 还有一些配置旋钮,您可以使用git config-c选项进行设置。这里最相关的是diff.renames,可以将其设置为falsetruecopycopies。有关更多详细信息,请参见the git config documentation。在Git 2.9.0中,diff.rename的默认值从false更改为true