从git diff中排除一个目录
我想知道如何从我的Git diff中排除整个目录。 (在这种情况下/规格)。 我使用git diff命令为我们的整个软件版本创build一个diff。 然而,规范的变化与这个程序无关,只是令人头疼。 现在我知道我可以做
git diff previous_release..current_release app/
这会为app目录中的所有更改创build一个diff,但不会在lib /目录中创build。 有谁知道如何完成这个任务? 谢谢!
编辑:我只是想清楚,我知道我可以串在我的所有目录的参数结束,减/规范。 我希望有一种方法可以真正排除命令中的单个目录。
假设你使用bash,并且你已经启用了extglob,你可以从shell端处理:
git diff previous_release current_release !(spec)
保存你不得不列出所有其他的东西。
或者,shell不可知论者:
git diff previous_release current_release --name-only | grep -v '^spec/' | xargs git diff previous_release current_release --
你可以把它包装在一个单行的shell脚本中,以免你不得不重新input参数。
基于这个答案,你也可以使用:
git diff previous_release..current_release -- . ':!spec'
这是一个新的gitfunction,允许排除某些path。 它应该比各种shell的线条更可靠。
我在这里发布这个,因为这个问题仍然是“git diff排除path”的#1命中。
您可以尝试取消设置lib目录中的任何文件的diff属性。
.gitattributes
:
lib/* -diff
如果你想在一个git diff中指定多个path来排除,你只需要在最后添加一个排除参数,例如,从统计中排除vendor和bin目录中的所有内容:
git diff --stat previous_release..current_release -- . ':!vendor' ':!bin'
Git diff现在接受一个自定义排除格式: git diff -- ':(exclude)lib/*'
如果你有很多重复的文件夹名称('/ app','/ lib'等),请注意,因为这会排除相对于当前工作目录和git根目录的文件。
git diff app lib