2011-05-25 47 views
10

我使用git diff --name-status来追踪哪些文件在两次提交之间被修改/添加/删除/重命名/复制,并且效果很好。如何限制git-diff到一个目录而没有子目录?

现在假设我移动文件file1newdir/file1,提交,然后运行git的差异,我得到这个:

$ 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 

...但我怎么能获得在根目录下的“互补” DIFF信息?即,此输出:

$ git diff ??? 
D  file1 

注意,我想保持-C选项来检测在同一目录中重命名和复制。

回答

1

把它传递到grep:

git diff --name-status HEAD..HEAD~1 . | grep ^[^/]*$ 

这将过滤掉任何包含子目录的内容,如果您需要从更深层次获得更多内容,请执行以下操作:

git diff --name-status HEAD..HEAD~1 <path> | grep ^<path>[^/]*$ 

如果你愿意,你可以很容易地别名。

+0

'git diff .. - '为我工作。 – sholsinger 2014-02-11 20:30:04

1

我知道它在Git中可能是可行的,但我会受到诱惑而使用filterdiff/grepdiff计划从patchutils这样的事情应该通过好的工作

git diff -C .... | filterdiff --clean -x '*/*/**' 
+0

'git diff --name-status'的输出不是一个补丁文件,而是一个修改过的文件列表,所以看起来像'filterdiff'没有帮助。 – 2011-05-26 07:29:23

相关问题