我试图从Git diff中排除一个文件(db/ irrelevance .php),我已经尝试将一个文件放在db子目录中,名为.gitattributes,并使用行irrelevance .php -diff 我还尝试创建了一个名为.git/info/attributes的文件,其中包含db/无关的。php。
在所有情况下,db/ irrelevance .php文件都作为Git二进制补丁包含在diff中。我想要的是由diff命令忽略对该文件的更改。我做错了什么?
我试图从Git diff中排除一个文件(db/ irrelevance .php),我已经尝试将一个文件放在db子目录中,名为.gitattributes,并使用行irrelevance .php -diff 我还尝试创建了一个名为.git/info/attributes的文件,其中包含db/无关的。php。
在所有情况下,db/ irrelevance .php文件都作为Git二进制补丁包含在diff中。我想要的是由diff命令忽略对该文件的更改。我做错了什么?
当前回答
类似于本·鲁克斯的解决方案,但无论如何都是共享的:
git status --porcelain | grep -v $PATTERN_TO_EXCLUDE | awk '{print $2}' | xargs git diff
或者,如果更改已经在本地提交:
git diff --name-only origin/master | grep -v $PATTERN_TO_EXCLUDE | xargs git diff origin/master
例子:
git status --porcelain | grep -v docs | awk '{print $2}' | xargs git diff origin/master
git diff --name-only origin/master | grep -v docs | xargs git diff origin/master
其他回答
您可以使用no op命令设置一个自定义diff驱动程序,并将其分配给那些应该忽略的文件。
使用此命令创建一个特定于存储库的差异驱动程序
git config diff.nodiff.command /bin/true
或者是你所有的,全球回购。
(如果MacOS中不存在/bin/true,则可以使用/usr/bin/true或echo)。
然后,将新的diff驱动程序分配给.git/info/attributes文件中你想忽略的那些文件。
irrelevant.php diff=nodiff
如果这个状态应该与其他开发人员共享,你可以使用.gitattributes而不是.git/info/attributes,并与你的同事共享git config命令(通过文档文件或其他东西)。
在现有答案的基础上,如果你想排除一个文件模式,无论它在目录中的哪个位置,使用相应的git路径spec值**:
git diff -- ':!**/yarn.lock'
这种方法比公认的答案更短。
git diff 987200fbfb 878cee40ba -- ':!*.cs'
要了解更多关于不同的包含/排除可能性的信息,请阅读另一篇文章
我做以下事情:
git add *pattern_to_exclude*
git diff
git reset HEAD .
我知道这不是一个优雅的解决方案,它有时不能被使用(例如。如果你已经把东西准备好了),但它不需要输入复杂的命令就能完成任务
类似于本·鲁克斯的解决方案,但无论如何都是共享的:
git status --porcelain | grep -v $PATTERN_TO_EXCLUDE | awk '{print $2}' | xargs git diff
或者,如果更改已经在本地提交:
git diff --name-only origin/master | grep -v $PATTERN_TO_EXCLUDE | xargs git diff origin/master
例子:
git status --porcelain | grep -v docs | awk '{print $2}' | xargs git diff origin/master
git diff --name-only origin/master | grep -v docs | xargs git diff origin/master