Cómo comparar dos archivos que no están en repositorio usando git

114

Me gustaría comparar dos archivos css que no están en ningún repositorio de git. ¿Existe tal funcionalidad en git?

Cedric Reichenbach
fuente
¿Y si quisiera usar, digamos, la --patiencebandera? ¿Conoce un diff (1) que pueda hacer eso?
SamB
Deberías aceptar la respuesta de Kyle Burton.
BrodieG

Respuestas:

214

gitEl diff es más funcional que el Unix estándar diff. A menudo quiero hacer esto y, dado que esta pregunta ocupa un lugar destacado en Google, quiero que aparezca esta respuesta.

Esta pregunta: ¿Cómo usarlo git diff --color-wordsfuera de un repositorio de Git?

Muestra cómo usar git para diferenciar archivos donde al menos uno de ellos no está en el repositorio usando --no-index:

git diff --no-index file1.txt file2.txt

No importa cuál es rastreado por git y cuál no, uno o ambos pueden no ser rastreados, por ejemplo:

$ date > x
$ sleep 2
$ date > y
$ git diff --color-words --no-index x y
diff --git a/x b/y
index 6b10c7c..70f036c 100644
--- a/x
+++ a/y
@@ -1 + 1 @@
Wed Jun 10 10:57:45|10:57:47 EDT 2013

El color no se puede mostrar aquí, así que separé los cambios con una tubería en el ejemplo.

Kyle Burton
fuente
14
Si desea que este comportamiento sea predeterminado, puede agregar un alias a su .bashrcarchivo (o lo que sea que use):alias diff="git diff --no-index"
counterbeing
1
FYI: En Git para Windows hubo un error (# 2123) que "--no-index" no fue respetado. Esto se solucionó en Git para Windows v2.21.0 (26 de febrero de 2019).
StackzOfZtuff
¿Qué significa la fila "índice 6b10c7c..70f036c 100644"? Estoy comparando 2 binarios, difieren, pero esa es la única fila con diferencia ...
Lukas Salich
hola @LukasSalich, parece que el formato de línea podría estar documentado por git (por ejemplo: git-scm.com/docs/diff-format ) La diferencia de git no intenta diferenciar binarios afaik, así que supongo que esa línea significa que difieren , los dos SHA donde se identificó un cambio y luego los permisos del archivo.
Kyle Burton
3

diff -u

dará una salida de contexto unificada similar a la diferencia de git.

James
fuente
1
Sin embargo, no sirve para colorear ni utilizar un buscapersonas.
Xiong Chiamiov
Tampoco permite una palabra agradable diff ( git diff --word-diff).
Stefan van den Akker
0

Simplemente use el comando diff:

diff file1.ext file2.ext
Edwardmp
fuente
2
Hmkay, intenté esto pero en mi opinión, la salida fue simplemente una tontería ... Tal vez me equivoqué ...
Cedric Reichenbach
puede ejecutar alguna herramienta GUI que proporcione una mejor vista, como gvimdiff, kompare o similar
Eugene Sajine