如何将git diff限制为仅一个目录,而不包含其子目录?
我使用如何将git diff限制为仅一个目录,而不包含其子目录?,git,git-diff,Git,Git Diff,我使用git diff--name status跟踪在两次提交之间修改/添加/删除/重命名/复制了哪些文件,效果非常好 现在假设我将filefile1移动到newdir/file1,提交,然后运行git diff,我得到以下结果: $ git diff --name-status -C HEAD~1 HEAD R100 file1 newdir/file1 有没有办法让git将自己限制在给定目录中的更改列表中,而不是它的子目录?我想分别了解根目录和newdir目录的确切更改。对于n
git diff--name status
跟踪在两次提交之间修改/添加/删除/重命名/复制了哪些文件,效果非常好
现在假设我将filefile1
移动到newdir/file1
,提交,然后运行git diff,我得到以下结果:
$ git diff --name-status -C HEAD~1 HEAD
R100 file1 newdir/file1
有没有办法让git将自己限制在给定目录中的更改列表中,而不是它的子目录?我想分别了解根目录和newdir
目录的确切更改。对于newdir
,很容易:
$ git diff --name-status -C HEAD~1 HEAD -- newdir
A newdir/file1
…但如何在根目录中获取“互补”差异信息?即,该输出:
$ git diff ???
D file1
请注意,我想保留
-C
选项来检测同一目录中的重命名和副本。我知道这在git中可能是可行的,但我会尝试使用类似这样的filterdiff/grepdiff程序
git diff -C .... | filterdiff --clean -x '*/*/**'
将其传递给grep:
git diff --name-status HEAD..HEAD~1 . | grep ^[^/]*$
这将过滤掉包含子目录的任何内容,如果您需要从更深层的目录中获取某些内容,请执行以下操作:
git diff --name-status HEAD..HEAD~1 <path> | grep ^<path>[^/]*$
git diff——名称状态HEAD..HEAD~1|grep^[^/]*$
如果您愿意,您可以很容易地将其命名为别名。如果运行Linux或兼容的shell,并且有
find
可用,您可以使用find
生成当前(或其他)目录中的非目录文件列表,然后将其馈送到git diff
,例如:
git diff --stat --other-git-diff-args -- $(find . -type f -depth 1 -print0 | tr '\0' ' ')
git diff--name status
的输出不是一个补丁文件,而是一个修改过的文件列表,因此似乎filterdiff
没有帮助。git diff代码>为我工作。