.gitattributes没有区别,尝试在使用git difftool时跳过文件

hbC*_*ber 9 git diff difftool

我已经阅读了Git Pro网站,并且我已经在StackOverflow上阅读了多个答案,但遗憾的是我无法让.gitattributes为我工作.

每当我使用时git difftool,它都会尝试显示二进制文件之间的差异,例如图像文件(PNG).

我在.gitattributes文件中尝试了各种组合,但每当我运行git difftool命令时,它仍然会尝试比较二进制文件.

在我的存储库文件夹中,我有:
.git
.gitattributes
[我的项目的文件子目录]

我为.gitattributes文件尝试了很多过滤器组合.例如:

*.pbxproj binary
*.png二进制文件

或者:

*.pbxproj binary -diff
*.png binary -diff

甚至:

*.pbxproj binary
*.png binary
*.pbxproj -diff -difftool
*.png -diff -difftool

每次,我只需将我的.gitattributes文件添加到索引并提交它.但是,在这样做之后,当我运行我git difftool来检查两个分支之间的差异时,会发生这种情况:

git difftool otherBranch HEAD

查看:'MyApp.xcodeproj/project.pbxproj'点击返回启动'diffmerge':

查看:'MyApp/Background1.png'点击返回启动'diffmerge':

它是怎么做到的?我怎么能最终正确设置我的.gitattributes文件,所以我不必查看这些特定文件的差异?

为了进一步调查,我使用了git check-attr如下命令:
git check-attr binary MyApp/MainBackground.png

输出是MyApp/MainBackground.png: binary: set......我想知道为什么git difftool仍然迫使我查看差异!

pat*_*yts 8

看起来这是difftool的缺陷.如果你正如你所描述的那样使用.gitattributes文件,则'git diff'的输出会按预期进行修改,因此将任何.proj文件的输出设置*.proj binary*.proj -diff更改git diff为'二进制文件不同'.然而,difftool apears永远不会查看属性.我相信这是因为difftool基本上调用与mergetool相同的代码,并且支持合并二进制文件(如果仅通过复制一个而不是另一个).附加的补丁是对difftool-helper脚本的一个小改动,它应该使它跳过设置了二进制属性的文件.它可能是git邮件列表的一部分.

--- git-difftool--helper    2011-06-03 21:48:08.000000000 +0100
+++ /opt/git/libexec/git-core/git-difftool--helper  2011-10-06 13:17:55.000000000 +0100
@@ -56,6 +56,10 @@
    fi
 }

+if test $(git check-attr diff "$1" | sed 's/.*diff: //') = 'unset'; then
+   echo skip binary file "\"$1\""
+else
+
 if ! use_ext_cmd; then
    if test -n "$GIT_DIFF_TOOL"; then
        merge_tool="$GIT_DIFF_TOOL"
@@ -70,3 +74,4 @@
    launch_merge_tool "$1" "$2" "$5"
    shift 7
 done
+fi
Run Code Online (Sandbox Code Playgroud)