我怎样才能将git-diff限制为只有一个目录,没有它的孩子?

时间:2011-05-25 11:56:32

标签: git git-diff

我正在使用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选项以检测同一目录中的重命名和副本。

3 个答案:

答案 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