我正在使用git diff --name-status
来跟踪哪些文件在两次提交之间被修改/添加/删除/重命名/复制,并且效果很好。
现在假设我将文件file1
移动到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
选项以检测同一目录中的重命名和副本。
答案 0 :(得分:1)
我知道它可能在git中可行,但是我很想使用patchutils中的filterdiff / grepdiff程序这样的东西可以正常工作
git diff -C .... | filterdiff --clean -x '*/*/**'
答案 1 :(得分:1)
将其传递给grep:
git diff --name-status HEAD..HEAD~1 . | grep ^[^/]*$
这将过滤掉任何包含子目录的内容,如果您需要从更深层次获取内容,请执行以下操作:
git diff --name-status HEAD..HEAD~1 <path> | grep ^<path>[^/]*$
如果您愿意,可以轻松将其设为别名。
答案 2 :(得分:0)
如果运行具有find
可用的Linux或兼容Shell,则可以使用find
生成当前(或其他)目录中非目录文件的列表,然后将其提供给{{ 1}},例如:
git diff