2010-08-27 28 views
68

Supongo que este es 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. Esto se instaló a través de MacPorts y es la última versión (1.7.2.2)."git diff" no hace nada

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 una copia de seguridad de un directorio, fuera de mi área de trabajo de la raíz, escribiendo "git diff" me da esto:

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

Este comportamiento se puede esperar ya que no estoy bajo un repositorio git .

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

+0

le hace pensar que hay algo para solucionar problemas? ¿Qué esperabas ver? –

+0

Nota: el mensaje de error al usar 'git diff' * fuera * un repositorio pronto será más claro. Consulte [mi respuesta a continuación] (http://stackoverflow.com/a/18895460/6309) – VonC

+0

Tenga en cuenta que si está tratando de diferenciar un archivo específico entre dos confirmaciones y no ve ningún resultado, asegúrese de que la cubierta sea correcta en la ruta al archivo. –

Respuesta

91

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

git diff [--options] [-] [...]

Este formulario es para ver los cambios que ha realizado en relación con el índice (área de ensayo 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.

Ver el documentation para más detalles. En particular, desplácese hacia abajo para los ejemplos, y leer esta sección:

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

Fuera de tu espacio de trabajo, como habrás adivinado, git no sabrá qué diferenciar, por lo que debes especificar explícitamente dos rutas para comparar, de ahí el mensaje de uso.

+9

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 es * not * la lista de cambios no confirmados, es la lista de cambios no confirmados que son _also_ "aún no configurados para la siguiente confirmación". Entonces, el comando que hace lo que esperaba que hiciera "git diff" es en realidad "git diff HEAD". –

+2

Para completar la imagen, use git diff --cached para mostrar solo lo que está en el índice. – Douglas

+0

hace git diff do: (índice) - (directorio de trabajo) o al revés: (directorio de trabajo) - (índice)? – BKSpurgeon

2

No hace nada si su directorio de trabajo está limpio y no existen diferencias con respecto a la última actualización. Intenta editar un archivo y luego ejecuta git diff nuevamente, y luego debe mostrar la diferencia.

1

Si lo está utilizando fuera de un repositorio real o copia de trabajo, su comportamiento es idéntico al de la diferencia de GNU. Entonces necesita informar los 2 directorios o archivos que se compararán. Ejemplo:

git diff old_dir new_dir.

Si hay alguna diferencia entre ellos, la salida le mostrará, como se esperaba.

4

Nota: starting git 1.8.5 or 1.9, Q4 2013:

Cuando el usuario escribe "git diff" fuera de un árbol de trabajo, pensando que está dentro de uno, el mensaje de error actual, que es de un solo revestimiento:

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

puede no ser suficiente para que se dé cuenta del error.

Agregar "Not a git repository" al mensaje de error cuando caímos en el modo "--no-index" sin una opción de línea de comando explícito para que así lo indiquen.


Ver:

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

Aclare el mensaje de error diff-no-index para 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> 
0
No

en su caso, pero tal vez porque existe el archivo que no pasa

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

nada sucede