2011-09-24 7 views
10

Mi piacerebbe avere git diff mi invia le differenze regolari per tutti i file, eccetto * .tex. Per i file * .tex, mi piacerebbe vedere l'output di git diff --word-diff.usa il diff di parole di git per i file in lattice

Stavo giocando con .gitattributes e .gitconfig, ma il più lontano che ho ottenuto è stato ottenere un display parziale per un file .tex, seguito da un crash.

È possibile ottenere questo comportamento?

mio .gitattributes:

*.tex diff=latex 

.gitconfig:

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

e word-diff.sh:

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

Come ti è venuta con "$ 2" e "$ 5"? Non riesco a trovare informazioni su questo ovunque. – silvenon

+0

Trovato, mi dispiace. Per gli altri che si stavano chiedendo, cerca GIT_EXTERNAL_DIFF nella [git man page] (http://git-scm.com/docs/git). – silvenon

+0

Come nota a margine, c'è [dovrebbe essere] (http://git-scm.com/docs/gitattributes/1.9.0#_defining_a_custom_hunk_header) un modello di diff "tex" integrato che dovrebbe darti un pezzo ragionevole -headers. Ma non sembra funzionare per me. –

risposta

6

potete inserire (o link) un esempio completo? Ho impostato esattamente quello che hai descritto e sembra funzionare bene. Cioè, l'output diff mette in evidenza le parole piuttosto che le righe e tutte le modifiche apportate sono state incluse (ovvero, non ha fatto schifo presto o altro). L'unica anomalia è che diff sarebbe sempre uscita con:

external diff died, stopping at foo.tex. 

Questo accade perché git diff, quando eseguito nel modo in cui lo si usa, si comporta come il diff strumento autonomo: esce con un codice diverso da zero se i file differiscono. Git non si aspetta questo comportamento; presume che il comando personalizzato verrà sempre eseguito correttamente e che i codici di uscita dell'errore indicano un problema reale.

Git sa già che i file sono differenze e non richiede il comando esterno per effettuare questa determinazione. Il comando esterno è strettamente uno strumento di formattazione.

Se si modifica lo script diff-words.sh per uscire sempre con successo, le cose dovrebbero funzionare fuori meglio:

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

Quello era l'esatto messaggio di errore che ho ricevuto. Aggiungere 'exit 0' ha funzionato, grazie! –