Para "git diff" ¿hay una opción -U <infinito> para mostrar todo el file?

Necesito generar un git diff de context completo programáticamente para una interfaz web.

Una CLI para generar una diferencia de context completo se cubrió en preguntas:

  • ¿Cómo get git diff con context completo?
  • Git muestra cambios de files completos

La respuesta frecuente es algo así como git diff -U99999

Con una opción -U / --unified con un umbral ridículamente alto (por ejemplo, 999.999), haciendo git diff -U999999 :

  1. Me hace sospechar que podría haber un golpe de performance
  2. Peor aún, es un problema de corrección si mi file es más grande que 1M líneas

¿Hay una opción -U para mostrar el file completo?

Si solo usa un número grande con -U , puede elegir el número grande para que sea el punto en el cual su aplicación no pueda manejar la visualización de un file tan grande (diff).

es un problema de corrección si mi file es más grande que 1M líneas

Y para solucionar este problema, puede verificar el resultado de más de una línea @@ ... @@ para determinar si está completo; esto le permite evitar dar un número equivocado en silencio.

Francamente, la mejor opción es usar git difftool lugar de vanilla git diff . Para ver qué herramientas admite su versión de git, ingrese

 git difftool --tool-help 

que, con mi versión (2.3.0), muestra lo siguiente

 $ git difftool --tool-help 'git difftool --tool=<tool>' may be set to one of the following: araxis gvimdiff gvimdiff2 gvimdiff3 meld vimdiff vimdiff2 vimdiff3 The following tools are valid, but not currently available: bc bc3 codecompare deltawalker diffmerge diffuse ecmerge emerge kdiff3 kompare opendiff p4merge tkdiff xxdiff 

Usualmente uso meld , pero eso es solo una preference personal. git difftool toma los mismos arguments que git diff y algunos para ayudar con el process (me parece útil para evitar las requestes al pasar de un file al siguiente).

Para ver los cambios introducidos por una confirmación específica, por ejemplo, puede usar

 git difftool -y -t meld 08f0f82^..08f0f82 

obviamente reemplazando 08f0f82 con el SHA-1 correcto.

Mi mayor queja es que lanza la herramienta para cada file modificado en secuencia (por lo tanto, especificando la opción -y ).

Si solo quería examinar los cambios en un file en particular en esa confirmación, puede simplemente agregar el nombre de file a la línea de command.

 git difftool -y -t meld 08f0f82^..08f0f82 myfile.c 

Obviamente, esto es para uso interactivo, no para secuencias de commands