.gitattributes no hace la diferencia, tratando de omitir files cuando se usa git difftool

He leído el website de Git Pro y he leído varias respuestas en StackOverflow, pero lamentablemente no puedo hacer que los .gitattributes me funcionen.

Cada vez que estoy usando git difftool , intentará mostrar la diferencia entre los files binarys, como los files de image (PNG).

He intentado una variedad de combinaciones en mi file .gitattributes, pero siempre que ejecuto mi command git difftool , todavía bash comparar los files binarys.

En la carpeta de mi repository, tengo:
.git
.gitattributes
[subdirectorys de files de mi proyecto]

He intentado muchas combinaciones de filters para mi file .gitattributes. Por ejemplo:

* .pbxproj binary
* .png binary

O también:

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

Incluso:

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

Cada vez, simplemente agrego mi file .gitattributes al índice y lo comprometo. Sin embargo, después de hacerlo, cuando ejecuto mi git difftool para examinar mis diferencias entre dos twigs, sucede esto:

git difftool otherBranch HEAD

Visualización: 'MyApp.xcodeproj / project.pbxproj' Pulse el button regresar para iniciar 'diffmerge':

Viendo: 'MyApp / Background1.png' Presione volver para iniciar 'diffmerge':

¿Cómo es que está haciendo esto? ¿Cómo puedo finalmente establecer mi file .gitattributes correctamente para que no tenga que ver los diffs para estos files específicos?

Para seguir investigando, he usado el command git check-attr siguiente manera:
git check-attr binary MyApp/MainBackground.png

La salida es MyApp/MainBackground.png: binary: set … Me pregunto por qué git difftool todavía me obliga a ver el diff!

Parece que esto es una deficiencia en difftool. Si usa el file .gitattributes como ha descrito, la salida de 'git diff' se modifica como se pretendía, por lo que la configuration *.proj binary o *.proj -diff cambia la salida de git diff para cualquier file .proj a 'los files binarys se diferencian '. Sin embargo, difftool apears nunca mira los attributes. Creo que esto se debe a que difftool básicamente llama al mismo código que mergetool y es compatible con la fusión de files binarys (solo copyndo uno sobre el otro). El parche adjunto es un pequeño cambio en el script difftool-helper que debería hacer que omita los files para los cuales se establece el atributo binary. Probablemente sea algo para la list de correo 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 

la respuesta de Patthoyts funcionó para mí.

El truco para mí fue descubrir la versión de git-difftool--helper git estaba usando (MacPorts había instalado múltiples versiones)

Utilicé (con el difftool abierto):

 lsof | grep "git-difftool--helper"