¿A qué se refiere la salida "diff – git" en "git diff"?

Cuando ejecuto git diff , la salida comienza con:

 diff --git a/foo/bar b/foo/bar 

Si trato de ejecutar el viejo y simple diff --git , me dicen que la opción --git no existe (obviamente, supongo que sería una tontería que una herramienta de bajo nivel sepa algo sobre un DVCS específico). No hay mención de eso en la página de man también. ¿De donde viene esto?

Es una "opción de diferencia imaginaria", utilizada para indicar al lector que no es solo la salida de ejecutar el command diff . Por ejemplo, en el propio git repo de git:

 $ git diff HEAD~1..HEAD | head diff --git Documentation/git.txt Documentation/git.txt index bd659c4..7913fc2 100644 --- Documentation/git.txt +++ Documentation/git.txt @@ -43,6 +43,11 @@ unreleased) version of Git, that is available from the 'master' branch of the `git.git` repository. Documentation for older releases are available here: +* link:v2.10.0/git.html[documentation for release 2.10] + $ 

El command diff sí mismo, si lo invocó con el mismo nombre de file dos veces, no mostraría diferencias. git presumiblemente crea files temporales correspondientes a dos versiones diferentes de Documentation/git.txt y los envía a diff , pero los nombres de esos files temporales no serían útiles. Creo que git diff masajea la salida de diff para que sea más significativo para el lector.

Inmerso en el código fuente de git, diff.c tiene la cadena "diff --git" cableada como una cadena literal:

 strbuf_addf(&header, "%s%sdiff --git %s %s%s\n", line_prefix, meta, a_one, b_two, reset); 

Y mirando la historia de diff.c para la versión más antigua que contiene esa cadena:

 $ git log -n 1 b58f23b3 commit b58f23b38a9a9f28d751311353819d3cdf6a86da Author: Junio C Hamano <junkio@cox.net> Date: 2005-05-18 09:10:47 -0700 [PATCH] Fix diff output take #4. This implements the output format suggested by Linus in <Pine.LNX.4.58.0505161556260.18337@ppc970.osdl.org>, except the imaginary diff option is spelled "diff --git" with double dashes as suggested by Matthias Urlichs. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org> $ 

Es de suponer que <Pine.LNX...> es el id del post de algún post de correo electrónico en una list de correo en alguna parte. En cualquier caso, este post de confirmación deja en claro que diff --git es una "opción de diferencia imaginaria".

Este post de correo electrónico , citado por nos en un comentario, parece ser parte de la discusión que condujo a esto.

El --git significa que diff está en el formatting diff "git". No hace reference a la opción del command /usr/bin/diff ni a la opción Puede encontrar la list de documentation de formatting de diferencia . Otros formattings son:

  • diff --combined
  • diff --cc
  • diff --summary
Intereting Posts