2011-09-24 8 views
10

me gustaría tener git diff salidas me diffs regulares para todos los archivos, excepto * .tex. Para archivos * .tex, me gustaría ver el resultado de git diff --word-diff.uso de git para archivos de látex

Estaba jugando con .gitattributes y .gitconfig, pero lo más lejos que conseguí fue obtener una pantalla parcial para un archivo .tex, seguido de un bloqueo.

¿Es posible obtener este comportamiento?

Mi .gitattributes:

*.tex diff=latex 

.gitconfig:

[diff "latex"] 
    wordRegex = "\\\\[a-zA-Z]+|[{}]|\\\\.|[^\\{}[:space:]]+" 
    command = ~/bin/word-diff.sh 

y word-diff.sh:

#!/bin/sh 
git --no-pager diff --color-words "$2" "$5" 
+0

¿Cómo se te ocurrió con "$ 2" y "$ 5"? No puedo encontrar información sobre eso en ningún lado. – silvenon

+0

Lo encontré, lo siento. Para otros que se estaban preguntando, busque GIT_EXTERNAL_DIFF en la [página de git man] (http://git-scm.com/docs/git). – silvenon

+0

Como nota al margen, se [supone que hay] (http://git-scm.com/docs/gitattributes/1.9.0#_defining_a_custom_hunk_header) incorporado un patrón de diff "tex" disponible que debe darle trozo razonable -cabezas. Pero eso no parece funcionar para mí. –

Respuesta

6

Se puede publicar (o enlace a) un ejemplo completo? Configuré exactamente lo que describiste y parece funcionar bien. Es decir, el resultado de diff resalta las palabras en lugar de las líneas, y todos los cambios que hice se incluyeron (es decir, no salieron temprano ni nada). La única anomalía fue que lo haría siempre diff de salida con:

external diff died, stopping at foo.tex. 

Esto sucede porque git diff, cuando se ejecuta en el modo en que se está usando, se comporta como la herramienta independiente diff: se sale con un código salida distinto de cero si los archivos difieren Git no espera este comportamiento; asume que su comando personalizado siempre se ejecutará correctamente y que los códigos de salida de error indican un problema real.

Git ya se sabe que los archivos son la diferencia y no requiere el comando externo para hacer esta determinación. El comando externo es estrictamente una herramienta de formateo.

Si modifica la secuencia de comandos diff-words.sh para salir siempre con éxito, las cosas deberían funcionar mejor:

#!/bin/sh 
git --no-pager diff --color-words "$2" "$5" 
exit 0 
+0

Ese fue el mensaje de error exacto que recibí. Agregar 'exit 0' hizo el truco, ¡gracias! –

Cuestiones relacionadas