tipos tag remove qué oneline log hace existen etiquetas crear git diff

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



tipos de etiquetas en git (4)

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 (solo LF).

Tengo un archivo Java de tamaño mediano. 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-diff muestra 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 ve este archivo como binario o algo así? ¿Es esto un problema? Si es así, ¿cómo puedo arreglar esto?


git diff -b

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


Para solucionar esto, no necesité 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 ejecuté el siguiente comando

:%s/^M//r/g

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


Establezca 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 su ejemplo pegado, es posible que también esté sufriendo de "terminaciones de línea Mac de estilo antiguo" (gracias a ddaa y Charles Bailey por la pista), que son solo CR s 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 en un formato del siglo XXI, como LF apropiada, solo terminaciones de línea Unix.