"Git diff" no hace nada

94

Supongo que se trata de un error de configuración en alguna parte, pero no puedo averiguar dónde. Los comandos regulares de git parecen funcionar bien, pero "git diff" no hace nada. Para estar seguro, eliminé las herramientas de diferencias externas de mi archivo .gitconfig. Se instaló a través de MacPorts y es la última versión (1.7.2.2).

Lo que veo es que cuando ejecuto "git diff" desde mi espacio de trabajo, simplemente sale, sin hacer nada.

$ git --version
git version 1.7.2.2
$ git diff
$ 

Si hago una copia de seguridad de un directorio, fuera de mi espacio de trabajo raíz, escribir "git diff" me da esto:

$ git diff
usage: git diff [--no-index] <path> <path>

Este puede ser un comportamiento esperado ya que no estoy en un repositorio de git.

¿Alguna idea sobre lo que puedo hacer para solucionar este problema?

Tom Lianza
fuente
¿Qué te hace pensar que hay algo que solucionar? ¿Qué esperabas ver?
Rob Kennedy
Nota: el mensaje de error cuando se usa git diff fuera de un repositorio pronto será más claro. Vea mi respuesta a continuación
VonC
Tenga en cuenta que si está intentando diferenciar un archivo específico entre dos confirmaciones y no ve ningún resultado, asegúrese de que la carcasa sea correcta en la ruta del archivo.
Seth Flowers

Respuestas:

110

La salida predeterminada para git diffes la lista de cambios que no se han confirmado / agregado al índice. Si no hay cambios, entonces no hay salida.

git diff [--opciones] [-] […]

Este formulario es para ver los cambios que realizó en relación con el índice (área de preparación para la próxima confirmación). En otras palabras, las diferencias son lo que podría decirle a git que agregue más al índice, pero aún no lo ha hecho.

Consulte la documentación para obtener más detalles. En particular, desplácese hacia abajo hasta los ejemplos y lea esta sección:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. Diferenciar la copia de trabajo con el índice
  2. Diferenciar el índice con HEAD
  3. Diferenciar la copia de trabajo con HEAD

Fuera de su espacio de trabajo, como adivinó, git no sabrá qué diferenciar, por lo que debe especificar explícitamente dos rutas para comparar, de ahí el mensaje de uso.

Douglas
fuente
13
No estoy seguro de que tu respuesta sea correcta, pero me ayudó a encontrar la respuesta, ¡así que gracias y la marcaré como tal! La salida predeterminada para git diff no es la lista de cambios no confirmados, es la lista de cambios no confirmados que también "aún no están preparados para la próxima confirmación". Entonces, el comando que hace lo que esperaba que hiciera "git diff" es en realidad "git diff HEAD".
Tom Lianza
2
Para completar la imagen, use git diff --cached para mostrar solo lo que hay en el índice.
Douglas
¿Qué hace git diff: (índice) - (directorio de trabajo) o al revés: (directorio de trabajo) - (índice)?
BKSpurgeon
4

Nota: a partir de git 1.8.5 o 1.9, cuarto trimestre de 2013 :

Cuando el usuario escribe " git diff" fuera de un árbol de trabajo , pensando que está dentro de uno, el mensaje de error actual es de una sola línea:

usage: git diff --no-index <path> <path>

puede que no sea suficiente para hacerle darse cuenta del error.

Agregue " Not a git repository" al mensaje de error cuando caigamos en el --no-indexmodo " " sin una opción de línea de comando explícita para indicarnos que lo hagamos.


Ver:

Aclare la documentación para " diff --no-index".
Indique que cuando no está dentro de un repositorio, --no-indexestá implícito y dos argumentos son obligatorios.

Aclare el mensaje de error de diff-no-indexpara informar al usuario que CWD no está dentro de un repositorio y, por lo tanto, dos argumentos son obligatorios.

To compare two paths outside a working tree:
usage: git diff --no-index <path> <path>
VonC
fuente
2

No hace nada si su directorio de trabajo está limpio y no hay diferencias con la última actualización. Intente editar un archivo y luego ejecute git diff nuevamente, y luego debería mostrar el archivo diff.

Jaanus
fuente
1

Si lo está utilizando fuera de un repositorio real o copia de trabajo, su comportamiento es idéntico al GNU diff. Por lo tanto, debe informar los 2 directorios o archivos que se van a comparar. Ejemplo:

git diff old_dir new_dir.

Si hay alguna diferencia entre ellos, el resultado lo mostrará, como se esperaba.

jweyrich
fuente
0

No en tu caso, pero tal vez porque el archivo que pasas no existe

$ git difftool HEAD HEAD^ -- path/that-not-exists

nada pasa

deFreitas
fuente