2008-10-28 13 views
9

Tengo un archivo Java de tamaño medio. Cada vez que hago un cambio en uno de mis archivos, BuildTable.java, Git lo informa como un cambio masivo, incluso si solo es una línea o dos. BuildTable.java tiene unas 200 líneas y el cambio en esta confirmación solo cambió una línea.Git piensa que estoy reescribiendo uno de mis archivos cada vez que hago un pequeño cambio

ouputs git-diff 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%) 

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

Respuesta

20

Para arreglar esto, no tuve que cambiar ninguna de las configuraciones de git de núcleo, ya que las terminaciones de línea predeterminadas que se generaban estaban bien, era solo que este archivo en particular estaba destrozado. Para solucionarlo abrí vim y ejecuta el siguiente comando

:%s/^M/\r/g 

Tenga en cuenta que para escribir el "^ M" hay que pulsar Ctrl-V y luego Ctrl-M.

+0

He estado buscando por días, y acabas de resolver mi problema. Gracias. – Jared

+0

'sed -i 's # \ r # \ n # g'' funciona también –

27

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

Corrija los archivos para que tengan terminaciones de línea estilo ventana (CR LF) o unix (LF solamente).

+2

OS X utiliza terminaciones LF como cualquier otro estilo de Unix. –

+8

Las terminaciones de línea llamadas "mac-style" eran estándar en Mac hasta MacOS 9. Y solo en MacOS. – ddaa

+7

Es bastante triste que esta respuesta haya sido modificada cuatro veces, mientras que el diagnóstico fue correcto, como señaló el autor de la pregunta en su respuesta. – ddaa

5

Conjunto core.autocrlf y core.safecrlf con git-config. Esto hará que git convierta automáticamente las terminaciones de línea cuando se transfiere desde/a la tienda de objetos. Es posible que deba hacer una confirmación para almacenar las terminaciones "nuevas".

A juzgar por tu ejemplo pegado, es posible que también se caracterizaban por "viejo estilo Mac finales de línea" (gracias a ddaa y Charles Bailey por la pista), que sólo son desnudos CR s sin ningún LF, un caso no se manejan por git. Si esto es cierto (consulte con un editor hexadecimal), use una herramienta como recode para traducir esta basura en un formato del siglo XXI, como LF, solo las terminaciones de línea Unix.

+1

core.autocrlf no va a ayudar en este caso (terminaciones de línea Mac de estilo antiguo). Para citar la fuente de git actual: "En este momento ni siquiera vamos a tratar de convertir cosas que tienen caracteres CR desnudos. ¿Alguien hace esas cosas locas?" –

0
git diff -b 

Ignora los cambios de final de línea al mostrarle las diferencias.

Cuestiones relacionadas