我试图从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命令忽略对该文件的更改。我做错了什么?
当前回答
如果你想这样做只是为了直观地检查差异,一个可视化的差异工具(如Meld)会让你用一个容易记住的简短命令来做。
首先,设置一个差异工具(如果你还没有的话)。
$ git config --global diff.tool = meld
然后,您可以运行目录差异。
$ git difftool --dir-diff
您将能够在Meld(或您选择的工具)中浏览差异(按文件)。不要打开你想要忽略的文件。
其他回答
相对于git根目录
Git diff接受一个可选的排除
git diff -- ":(exclude)thingToExclude"
您可能需要添加一些通配符
git diff -- ":(exclude)*/thingToExclude/*"
目标特定的文件类型
git diff -- ":(exclude)*/$1/*.png"
或者为您的dotfiles添加一个小脚本
例如.bash_profile或.zshrc
gde() {
# git diff exclude files or folders
# usage:
# gde fileOrFolderNameToExclude
git diff -- ":(exclude)*/$1/*"
}
这个单行解决方案不需要其他utils/downloads:
git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`
当然,file/to/exclude.txt是您想要排除的文件的名称。
编辑:credit ksenzee修复被删除的文件打破差异。
git diff remote/master..master --name-only -- ':!README.rst'
给我(git版本2.11.0)
fatal: There is nothing to exclude from by :(exclude) patterns.
Perhaps you forgot to add either ':/' or '.' ?
git diff remote/master..master --name-only -- './*' ':!README.rst'
工作得很好,来源:https://stackoverflow.com/a/30084612/5155484
您可以使用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 diff 987200fbfb 878cee40ba -- ':!*.cs'
要了解更多关于不同的包含/排除可能性的信息,请阅读另一篇文章