Digamos que estoy editando un archivo. Si guardo el archivo, git-diff
me dará sus cambios en relación con el índice. Me gustaría obtener los cambios relativos al índice sin guardar el archivo primero, para una diferencia “en tiempo real”.
Una solución es escribir los cambios no guardados en un archivo temporal (es decir, guardar el archivo en otro lugar), escribir el archivo preparado en otro archivo temporal (git show :file > tempfile2
) entonces git-diff tempfile tempfile2
. Sin embargo, eso parece poco elegante.
¿Hay una mejor manera?
Ash Berlín-Taylor
Desde git 1.5.1 ha habido una opción para diferenciar contra stdin, simplemente no se ha documentado
$ echo foo | git diff --no-index -- my_file -
Al jugar un poco más con esto, me di cuenta de que esto podría no ser lo que quería el OP (o yo): diferencia el estado actual del archivo a stdin, no el último estado comprometido del archivo a stdin. Algo como esto hará eso
$ echo foo | diff -u <(git show :my_file) -
Tenga en cuenta que esto significa invocar diff directamente, lo que podría no seleccionar algunas configuraciones en su configuración de git. Básicamente, como dice ams en su respuesta.
Mejorando la respuesta de Ash Berlin.
Esto le permite usar las buenas funciones de git-diff.
git show :file | git diff --no-index -- - temp_saved_path
Tenga en cuenta que esto aún podría no ser tan conveniente como le gustaría, porque aún tiene que escribir en un archivo temporal. Hasta que guarde el archivo, los cambios no se encuentran en el disco (solo en la memoria) o en algún tipo de archivo temporal que depende del editor. Es posible que Vim pueda hacer esto sin problemas en un solo paso, pero no estoy lo suficientemente familiarizado como para decirlo.
-
Vim le permite pasar contenido a la entrada estándar del comando externo que se está llamando. Así que ahora escribo la versión de índice del archivo en un archivo temporal y paso el archivo en memoria a stdin:
git show :file > tmpfile && git diff -- tmpfile -
.–Andy Stewart
11 de noviembre de 2014 a las 10:34
-
Además, si una o ambas rutas de archivo están fuera del repositorio de git, entonces
--no-index
se infiere automáticamente.–Andy Stewart
11 de noviembre de 2014 a las 10:37
¿Por qué no simplemente guardar el archivo? ¿Qué habla en contra?
– Daniel Hilgarth
7 de marzo de 2013 a las 12:15
Sería bueno evitar guardar el archivo si solo puedo usar una tubería.
–Andy Stewart
7 de marzo de 2013 a las 15:02
@AndyStewart: ¿por qué es agradable? Solo lanza un archivo en tmp. No es difícil, no es mucho trabajo … ciertamente mucho menos que tratar de evitar los requisitos de git (pero vea la respuesta de Ash Berlin).
– sirida
11 de agosto de 2013 a las 16:57