我如何使用git diff—no-index只显示dir2中dir1的增量缺失/更改?



我想显示两个任意非git dirs之间的递归差异(我知道我可以通过传递—no-index来做到这一点);Dir1和dir2,但要根据以下具体说明:

  • 我只想看到与dir1不同的东西(文件和文件内容);我不关心dir2中的附加项。我想知道dir1中dir2中缺少的内容或者dir1中dir2中更改的内容

我愿意使用diff而不是git diffgit difftools(尽管尽管文档说您可以使用任何git diff参数与git difftools,我不认为它可以以-no-index方式使用[比较2任意dirs])。

git diff命令有许多选项。先从--name-status开始,看看它是怎么做的:

git diff --no-index --name-status <dir1> <dir2>
现在您已经看到了它的输出,请注意状态字母:
  • A表示添加:右边的文件(dir2)是新的,即左边没有相应的文件。
  • D表示deleted:左边的一个文件(dir1)已经不见了
  • M表示修改,R表示重命名,T表示模式更改(符号链接到文件或反之亦然),根据您提供给git diff的标志,还有更多的可能性。查看文档获取完整的列表。

现在考虑--diff-filter选项。你可以告诉Git忽略(不显示任何关于)状态是一个或多个这些字母的文件,或者只显示状态是一个或多个这些字母的文件。

似乎你想看到状态D(失踪)或M(文件存在于两侧但不同)的东西。所以--diff-filter=DM应该是正确的过滤器。

您可能希望完全禁用重命名检测(git diff --no-renames)或允许R状态文件;这取决于您的预期用途。

最新更新