2010-06-28 15 views
9

Tengo un repositorio de Git desde el cual necesito crear un archivo de parche en un formato que no sea el predeterminado git diff. Mi caso de uso es que tengo una vieja máquina OSF/1 torpe en la que necesito aplicar el parche, y el programa /bin/patch no comprende las diferencias unificadas.¿Cómo hacer que git-diff cree un formato de contexto diff?

Si uso GIT_EXTERNAL_DIFF=diff, con la esperanza de que entonces puedo usar GIT_DIFF_OPTS=-c para solicitar un diff formato de contexto, entonces mi (actual) del programa diff se queja argumentos acerca de más en su línea de comandos:

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

Configuración GIT_EXTERNAL_DIFF=echo muestra que Git parece correr el programa diff externo con:

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

Esto confunde diff que no quiere que los argumentos adicionales. ¿Hay alguna manera fácil de decir git diff para crear un formato de contexto de "estilo antiguo"?

(Mi plan actual es escribir un script de shell de una sola línea que llama a la verdadera diff con sólo $1 $2, pero espero que hay una manera menos incómoda.)

Respuesta

5

Configurar un difftool para hacer lo que desear:

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

Si tenemos que conseguir el diff en el formato de contexto entre medio de 2 confirmaciones, ¿dónde tenemos que salir cometer el viejo y nuevo commit en, 'git difftool -y -t ctxdiff oldCommitHash newCommitHash' –

8

no hay necesidad de configurar un difftool costumbre, sólo tiene que utilizar la opción -x:

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

o configurar un alias hacer un simple "git Cdiff" salida del comando diff-estilo de contexto:

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

puede explicarme cómo obtener la diferencia de contexto de dos commits. Digamos que los hashes de confirmación relevantes son 'b299g2' y' f242g3'? –

+0

por qué insertamos el '" diff -c "' como una opción –

Cuestiones relacionadas