Cambios locales ficticios que se muestran en Git

Aquí tengo un error de git muy extraño que me tiene totalmente perdido. No es un bloqueador importante, pero es extremadamente irritante trabajar todo el time.

Tengo una copy de trabajo de un repository y, en dicha copy de trabajo, cada vez que cambio de una twig a otra, Git me dice, después de que se haya completado el cambio, que tengo modificaciones locales. Algunos detalles más:

  1. Esto está en Windows
  2. El estado de Git muestra los files como cambiados (cada línea como cambia, vea la captura de pantalla adjunta para un ejemplo)
  3. Más allá de comparar no muestra diferencias; la encoding de files y las terminaciones de línea son las mismas, ambos files tienen el mismo número de bytes.
  4. Lo extraño: no puedo restablecer los cambios, sean lo que sean. Incluso eliminar el file y luego restablecer la eliminación da como resultado un nuevo file que supuestamente se cambia.

¿Qué podría estar pasando aquí? Pensé que podría tener algo que ver con los attributes de file, pero no tengo idea de cómo verificar esto.

Captura de pantalla de los cambios fantasma de GIT


Actualización: VonC tenía razón en cuanto a que las terminaciones de línea eran el problema. Más específicamente, si tiene core.autocrlf establecido en true pero cualquier file en el repository que se haya comprometido previamente con terminaciones de línea de Windows, verá este problema. La razón por la que es imposible restablecer el cambio es porque modificar el file lo modifica , ya que Git considera que la copy de trabajo del file es diferente de cómo se vería si la comentasen ahora. Confuso, lo sé.

De todos modos, pude solucionar el problema haciendo una gran confirmación que estableció todos los finales de línea en el repository de Unix, que afortunadamente resultó no ser tan grande como se podría pensar. Seguí las instrucciones en este post: tratar de arreglar los finales de línea con git filter-branch, pero sin tener suerte , específicamente la respuesta de Russ Egan, que funcionó mejor para mí.

Simplemente asegúrese de escribir (una vez) antes de la próxima compra:

 git config --global core.autocrlf false 

Eso evitará el tipo de transformación automática eol (final de línea) que hace esta configuration (establecida en true de forma pnetworkingeterminada con msysgit).
.gitattributes files .gitattributes son un mejor lugar para declarar los files en los que desea que se administre su eol.

Consulte " git reemplazando LF con CRLF " para get más información sobre esa configuration.

Como originalmente publiqué en esta pregunta …

Tenía algunos files fantasma cambiados que se mostraban como modificados, pero en realidad eran idénticos.

Ejecutar este command a veces funciona:
(Desactiva las conversiones de final de línea "inteligentes" pero a menudo inútiles de git)

 git config --global core.autocrlf false git config --local core.autocrlf false 

Pero en otro caso encontré que se debía a un file .gitattributes en la raíz que tenía algunas configuraciones de fin de línea, que intentaba aplicar autocrlf para ciertos files incluso cuando estaba apagado. Eso no fue realmente útil, así que .gitattributes , .gitattributes y el file ya no se muestra como modificado.