首页 > 解决方案 > 如何使用 git diff --no-index 仅显示 dir2 FROM dir1 中的增量丢失/更改

问题描述

我想显示 2 个任意非 git 目录之间的递归差异(我知道我可以通过传递 --no-index 来做到这一点);dir1 和 dir2 但须遵守以下具体说明:

我愿意使用diff代替git diff或同时使用git difftools(尽管文档说您可以将任何git diffarg 与 git difftools 一起使用,但我认为它不能以 --no-index 方式使用 [比较 2 个任意目录])。

标签: gitdiff

解决方案


git diff命令有许多选项。首先开始--name-status,看看它做了什么:

git diff --no-index --name-status <dir1> <dir2>

现在您已经看到了它的输出,请记下状态字母:

  • A表示添加:右侧的文件(dir2)是新的,即左侧没有对应的文件。
  • D表示已删除:左侧的文件 (dir1) 已丢失。
  • M意味着修改,R意味着重命名,T意味着模式改变(符号链接到文件,反之亦然),还有更多的可能性取决于你提供给git diff. 有关完整列表,请参阅文档

现在考虑这个--diff-filter选项。您可以告诉 Git忽略(不显示任何有关)状态为这些字母中的一个或多个的文件,或仅显示状态为这些字母中的一个或多个的文件。

似乎您想查看具有状态D(丢失)或M(文件存在于双方但不同)的事物。--diff-filter=DM正确的过滤器也是如此。

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


推荐阅读