2010-06-28 9 views
9

Ho un repository Git da cui ho bisogno di creare un file patch in qualcosa di diverso dal formato predefinito git diff. Il mio caso d'uso è che ho un vecchio macchinista OSF/1 su cui ho bisogno di applicare la patch, e il programma /bin/patch non comprende le differenze unificate.Come rendere git-diff creare un formato "contesto" diff?

Se uso GIT_EXTERNAL_DIFF=diff, sperando che posso poi usare GIT_DIFF_OPTS=-c richiedere un diff formato di contesto, quindi il mio (attuale) programma diff lamenta argomentazioni circa supplementari sulla propria linea di comando:

diff: extra operand `373e5907b789a1398a91f4ceb4ab14e8a0ed4282' 
diff: Try `diff --help' for more information. 
external diff died, stopping at [filename]. 

Impostazione GIT_EXTERNAL_DIFF=echo mostra che Git sembra per eseguire il programma diff esterno con:

$GIT_EXTERNAL_DIFF <file2> <file1> <hash> <mode> <tmpfilename> <hash> <mode> 

Questo confonde diff che non vuole gli argomenti extra. C'è un modo semplice per dire a git diff di creare un formato "contesto" vecchio stile diff?

(Il mio piano attuale è quello di scrivere uno script di shell one-liner che chiama il vero diff con appena $1 $2, ma spero ci sia un modo meno imbarazzante.)

risposta

5

Configurare un difftool a fare quello che desiderare:

$ git config difftool.ctxdiff.cmd 'diff $LOCAL $REMOTE' 
$ git difftool -y -t ctxdiff HEAD~4..HEAD 
+0

Se abbiamo bisogno di ottenere il diff nel formato contesto inbetween 2 commit, dove abbiamo bisogno di fuori del vecchio commit e nuovo commit in, 'git difftool -y -t ctxdiff oldCommitHash newCommitHash' –

8

non v'è alcuna necessità di configurare un difftool personalizzato, basta usare l'opzione -x:

$ git difftool -y -x "diff -c" | less 

Oppure configurare un alias fare una semplice "git cdiff" uscita di comando un diff contesto-style:

$ git config --global alias.cdiff 'difftool -y -x "diff -c"' 
$ git cdiff | less 
+0

puoi spiegarmi come ottenere la differenza di contesto di due commit. Diciamo che gli hash di commit rilevanti sono 'b299g2' e' f242g3'? –

+0

perché inseriamo il '' diff -c "' come opzione –

Problemi correlati