Git piensa que estoy reescribiendo uno de mis archivos cada vez que hago un pequeño cambio.

StackOverflow https://stackoverflow.com/questions/244639

  •  05-07-2019
  •  | 
  •  

Pregunta

Tengo un archivo Java de tamaño mediano. Cada vez que hago un cambio en uno de mis archivos, BuildTable.java, Git lo reporta como un cambio masivo, aunque solo sea una línea o dos. BuildTable.java tiene aproximadamente 200 líneas y el cambio en esta confirmación solo cambió una sola línea.

git-diff ofrece esto:

--- a/src/BuildTable.java
+++ b/src/BuildTable.java
@@ -1 +1 @@
-import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport
\ No newline at end of file
+import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport
\ No newline at end of file

Después de hacer un git-commit -a

Created commit fe43985: better error notifications
 3 files changed, 54 insertions(+), 50 deletions(-)
 rewrite src/BuildTable.java (78%)

¿Git está viendo este archivo como binario o algo así? ¿Es esto un problema? Si es así, ¿cómo soluciono esto?

¿Fue útil?

Solución 2

Para solucionar esto, no tuve que cambiar ninguna de las configuraciones de git del núcleo, ya que los finales de línea predeterminados que se generaron estaban bien, era solo que este archivo en particular estaba dañado. Para solucionarlo abrí vim y ejecuté el siguiente comando

:%s/^M/\r/g

Tenga en cuenta que para escribir el " ^ M " tienes que escribir ctrl-V y luego ctrl-M.

Otros consejos

Claramente, a git no le gustan los finales de línea de estilo mac (solo CR). Su algoritmo diff usa LF como separador de línea.

Arregle sus archivos para que tengan los finales de línea de estilo Windows (CR LF) o Unix (solo LF).

Establezca core.autocrlf y core.safecrlf con git-config . Esto hará que git convierta automáticamente los finales de línea al transferir desde / al almacén de objetos. Es posible que deba realizar un compromiso para almacenar " nuevo " terminaciones.

A juzgar por el ejemplo pegado, es posible que también sufras los "finales de línea de Mac de estilo antiguo". (gracias a ddaa y Charles Bailey para la pista), que son solo CR sin ningún LF , un caso no manejado por git. Si esto es cierto (consulte con un editor hexadecimal), use una herramienta como recode para traducir esta basura a un formato del siglo XXI, como LF , solo terminaciones de líneas de Unix.

git diff -b

Ignora los cambios de final de línea cuando te muestra las diferencias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top