如何使用 git diff --no-index 仅在 dir2 FROM dir1 中显示增量 missing/changes

How can I use git diff --no-index to only show incremental missing/changes in dir2 FROM dir1

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

我愿意使用 diff 而不是 git diff 或者 git difftools(尽管文档说你可以使用任何 git diff arg 和 git difftools,我认为它不能以 --no-index 方式使用 [比较 2 个任意目录])。

git diff 命令有很多选项。先从--name-status开始,看看它的作用:

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

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

  • A表示添加:右边(dir2)的一个文件是新的,即左边没有相应的文件。
  • D 表示 已删除: 左侧 (dir1) 的一个文件丢失了。
  • M 表示已修改,R 表示重命名,T 表示模式已更改(符号链接到文件,反之亦然),根据标志还有更多可能性您提供给 git diff。有关完整列表,请参阅 the documentation

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

您似乎想查看状态为 D(丢失)或 M(文件存在于两边但不同)的内容。所以 --diff-filter=DM 将是正确的过滤器。

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