He echado un vistazo a todas las preguntas similares. Sin embargo, lo he verificado dos veces y definitivamente algo extraño está sucediendo.
En un servidor (Solaris con Git 1.8.1) cloné el repositorio de Git y luego copié la carpeta .git en mis archivos vivos existentes. Esto funcionó perfectamente, podría correr
git status
luego
git diff [filename]
para verificar cualquier archivo que fuera diferente.
Sin embargo, en otro servidor (Solaris con Git 1.7.6) estoy haciendo exactamente lo mismo
git diff [filename]
no muestra nada, incluso si el contenido del archivo es definitivamente diferente. También probé agregar un nuevo archivo, confirmarlo y luego editarlo. El mismo problema git status
muestra el archivo modificado, pero git diff
no muestra nada. Si descargo el archivo modificado y ejecuto un diff localmente, obtengo un resultado de diff.
git diff --cached
.git diff --cached
solo me da una salida en blanco también.git log
Tampoco da salida.core.fileMode
opción aquí 2) Además, estoy enfrentando un problema similar con la configuración de Console2 (lo tengo en git) cuando Console2 se está ejecutando realmente. Tal vez una especie de bloqueo de archivo hace que el archivo haya cambiado.Respuestas:
Agregué el archivo al índice :
y luego corrió:
Puedes ver la descripción de git diff aquí .
Si necesita deshacer su git add, consulte aquí: ¿Cómo deshacer 'git add' antes de confirmar?
fuente
Hay algunas razones por las cuales
git status
podría mostrar una diferencia, perogit diff
podría no serlo.El modo (bits de permiso) del archivo cambió, por ejemplo, de 777 a 700.
El estilo de avance de línea cambió de CRLF (DOS) a LF (UNIX)
La forma más fácil de averiguar qué sucedió es ejecutar
git format-patch HEAD^
y ver qué dice el parche generado.fuente
Para mí, tenía algo que ver con los permisos de archivo. Alguien con Mac / Linux en mi proyecto parece confirmar algunos archivos con permisos no predeterminados que mi cliente git de Windows no pudo reproducir. La solución para mí fue decirle a git que ignore los permisos de archivo:
Otra información: ¿Cómo hago que Git ignore los cambios en el modo de archivo (chmod)?
fuente
Tuve un problema en el que un programa modificó cientos de finales de línea y
git diff
enumeró todos los archivos de origen como modificados. Después de arreglar las terminaciones de línea,git status
todavía se enumeran los archivos como modificados.Pude solucionar este problema agregando todos los archivos al índice y luego restableciendo el índice.
core.filemode
se estableció en falso.fuente
git add --renormalize .
, ver mi respuesta a continuación.Sospecho que hay algo mal, ya sea con su instalación de Git o su repositorio.
Intenta correr:
Mira si obtienes algo útil. Si eso no ayuda, solo usa strace y mira qué está pasando:
fuente
-F
indicador a laLESS
variable env que dice menos para salir si hay menos de una pantalla llena de información para mostrar. Como git usa menos como buscapersonas y tenía una pequeña diferencia, no se mostraba nada. O bien, tuve que agregar-X
alLESS
entorno que muestra el contenido en la pantalla incluso después de menos salidas o simplemente eliminarlo-F
.GIT_TRACE
mostró queless
se estaba ejecutando, lo que me recordó que cambié laLESS
variable recientemente. La misma razón en la respuesta de @ rcwxok, pero quería un comentario sobre cómoGIT_TRACE
ayudó.core.pager
en.gitconfig
que funciona perfectamente para mí.Tuve un problema similar:
git diff
mostraría diferencias, perogit diff <filename>
no lo haría. Resultó que configuréLESS
una cadena que incluye-F
(--quit-if-one-screen
). Eliminar esa bandera resolvió el problema.fuente
-F
, agregar-X
también podría funcionar, vea mi respuesta a continuación para un caso similar.Como ya se señaló en una respuesta anterior , esta situación puede surgir debido a problemas de final de línea (CR / LF vs. LF). Resolví este problema (bajo Git versión 2.22.0) con este comando:
De acuerdo con el manual:
fuente
Respuesta corta
Correr a
git add
veces ayuda.Ejemplo
El estado de Git muestra archivos modificados y git diff no muestra nada ...
... ejecutar git add resuelve la inconsistencia.
fuente
status
ydiff
tiene formas separadas de manejarlos.Me encontré con este problema. Mi caso fue similar a la
LESS
cuestión Publicado por rcwxok .En mi caso, configuré la
PAGER
variable de entorno enPAGER='less -RSF'
.Sin embargo, a diferencia de las respuestas anteriores, no quería eliminar la
-F
opción, porque la puse explícitamente allí con la esperanza de evitar mostrar la diferencialess
si es más corta que una pantalla completa.Para obtener el resultado deseado, en lugar de eliminar
-F
, añadí-X
:PAGER='less -RSFX'
. Esto resolvió elgit diff
problema y, además, evita mostrar diferencias cortas conless
.fuente
Acabo de correr en un problema similar.
git diff file
mostró nada porque añadí archivo en el índice de Git con alguna parte de su nombre en mayúsculas:GeoJSONContainer.js
.Luego, le cambié el nombre
GeoJsonContainer.js
y los cambios dejaron de ser rastreados.git diff GeoJsonContainer.js
No estaba mostrando nada. Tuve que eliminar el archivo del índice con un indicador de fuerza y agregar el archivo nuevamente:fuente
Realmente no hizo una pregunta real, pero dado que este es un caso de uso general que uso con bastante frecuencia, esto es lo que hago. Puede intentarlo usted mismo y ver si el error persiste.
Mi suposición sobre su caso de uso:
Tiene un directorio existente que contiene archivos y directorios y ahora desea convertirlo en un repositorio Git que se clone desde otro lugar sin cambiar ningún dato en su directorio actual.
Realmente hay dos formas.
Clone repo - mv
.git
- git reset --hardEste método es lo que hizo: clonar el repositorio existente en un directorio vacío y luego mover el
.git
directorio al directorio de destino. Para trabajar sin problemas, esto generalmente requiere que ejecuteSin embargo, eso cambiaría el estado de los archivos en su directorio actual. Puede probar esto en una copia completa / rsync de su directorio y estudiar qué cambios. Al menos después ya no debería ver discrepancias entre
git log
ystatus
.Init nuevo repositorio - punto de origen
El segundo es menos perturbador:
cd
en su destino, y comience un nuevo repositorio conLuego le dices a ese nuevo repositorio, que tiene un antepasado en otro lugar:
Entonces con seguridad
copiar sobre los datos sin cambiar sus archivos locales. Todo debería estar bien ahora.
Siempre recomiendo la segunda forma por ser menos propenso a errores.
fuente
.git
carpetas a otras áreas de trabajo, potencialmente estamos violando los supuestos de git. Si esto resulta en un comportamiento errático, no podemos culpar a git, tenemos que culparnos a nosotros mismos por jugar trucos con git. git proporciona medios para arreglar eso, por ejemplo, elreset --hard
. Es solo que eso no es lo que queremos. Esta es exactamente la razón por la cualinit/remote add
se recomienda el camino, y todo está bien.remote add
forma de hacer las cosas todavía se puede aplicar a una situación desordenada como la descrita por Oliver PMe topé con este problema nuevamente. Pero esta vez ocurrió por una razón diferente. Había copiado archivos en el repositorio para sobrescribir las versiones anteriores. Ahora puedo ver que los archivos se modifican pero diff no devuelve los diffs.
Por ejemplo, tengo un archivo mainpage.xaml. En File Explorer, pegué un nuevo archivo mainpage.xaml sobre el de mi repositorio actual. Hice el trabajo en otra máquina y acabo de pegar el archivo aquí.
El archivo se muestra modificado, pero cuando ejecuto git diff, no mostrará los cambios. Probablemente sea porque la información de archivo en el archivo ha cambiado y git sabe que no es realmente el mismo archivo. Interesante.
Puede ver que cuando ejecuto diff en el archivo no muestra nada, solo devuelve el mensaje.
fuente
Tuve este mismo problema descrito de la siguiente manera: si escribí
Git simplemente regresó a la solicitud sin error.
Si escribiera
Git simplemente regresó a la solicitud sin error.
Finalmente, al leer, noté que en
git diff
realidad llamamingw64\bin\diff.exe
al hacer el trabajo.Aquí está el trato. Estoy ejecutando Windows, instalé otra utilidad Bash y cambió mi ruta para que ya no apunte a mi directorio mingw64 \ bin .
Entonces, si escribe:
y solo vuelve a la indicación de que puede tener este problema.
Finalmente, para solucionar esto, copié mi
mingw64\bin
directorio en la ubicación en la que Git lo estaba buscando. Lo probé y todavía no funcionaba.Luego, cerré mi ventana de Git Bash y la abrí nuevamente, fui a mi mismo repositorio que estaba fallando y ahora funciona.
fuente