¿Cuál es la estrategia para manejar CRLF (retorno de carro, avance de línea) con Git?

Resuelto Daniel Jomphe asked hace 16 años • 9 respuestas

Intenté enviar archivos con líneas finales CRLF, pero falló.

Pasé todo un día de trabajo en mi computadora con Windows probando diferentes estrategias y casi me sentí atraído por dejar de intentar usar Git y en su lugar probar Mercurial. .

¿Cómo manejar correctamente los finales de línea CRLF?

Daniel Jomphe avatar Oct 05 '08 03:10 Daniel Jomphe
Aceptado

Casi cuatro años después de hacerme esta pregunta, finalmente encontré una respuesta que me satisface completamente. !

Consulte los detalles en github: guía de ayuda para lidiar con finales de línea .

Git le permite configurar las propiedades de final de línea para un repositorio directamente usando el atributo de texto en el .gitattributesarchivo. Este archivo se envía al repositorio y anula la core.autocrlfconfiguración, lo que le permite garantizar un comportamiento coherente para todos los usuarios independientemente de su configuración de git.

Y por lo tanto

La ventaja de esto es que su configuración de final de línea ahora viaja con su repositorio y no necesita preocuparse por si los colaboradores tienen o no la configuración global adecuada.

Aquí hay un ejemplo de un .gitattributesarchivo.

# Auto detect text files and perform LF normalization
*        text=auto

*.cs     text diff=csharp
*.java   text diff=java
*.html   text diff=html
*.css    text
*.js     text
*.sql    text

*.csproj text merge=union
*.sln    text merge=union eol=crlf

*.docx   diff=astextplain
*.DOCX   diff=astextplain

# absolute paths are ok, as are globs
/**/postinst* text eol=lf

# paths that don't start with / are treated relative to the .gitattributes folder
relative/path/*.txt text eol=lf

Hay una colección conveniente de archivos .gitattributes listos para usar. para los lenguajes de programación más populares. Es útil para empezar.

Una vez que haya creado o ajustado su .gitattributes, debe realizar una renormalización de los finales de línea de una vez por todas .

Tenga en cuenta que la aplicación GitHub Desktop.gitattributes puede sugerir y crear un archivo después de abrir el repositorio Git de su proyecto en la aplicación. Para intentarlo, haga clic en el ícono de ajustes (en la esquina superior derecha) > Configuración del repositorio... > Finales de línea y atributos. Se te pedirá que agregues los recomendados .gitattributesy, si estás de acuerdo, la aplicación también realizará una normalización de todos los archivos en tu repositorio.

Finalmente, el artículo Mind the End of Your Line proporciona más antecedentes y explica cómo ha evolucionado Git en los temas que nos ocupan. Considero que esta lectura es obligatoria. .

Probablemente tengas usuarios en tu equipo que usan EGit o JGit (herramientas como Eclipse y TeamCity los usan) para confirmar sus cambios. Entonces no tienes suerte, como explicó @gatinueta en los comentarios de esta respuesta:

Esta configuración no lo satisfará completamente si tiene personas trabajando con Egit o JGit en su equipo, ya que esas herramientas simplemente ignorarán los atributos .gitat y registrarán felizmente los archivos CRLF https://bugs.eclipse.org/bugs/show_bug.cgi. identificación=342372

Un truco podría ser hacer que confirmen sus cambios en otro cliente, dice SourceTree. . En aquel entonces, nuestro equipo prefería esa herramienta a EGit de Eclipse para muchos casos de uso.

¿Quién dijo que el software es fácil? :-/

Daniel Jomphe avatar Jun 01 '2012 18:06 Daniel Jomphe

No convierta finales de línea. No es trabajo del VCS interpretar datos, simplemente almacenarlos y versionarlos. De todos modos, cualquier editor de texto moderno puede leer ambos tipos de finales de línea.

John Millikin avatar Oct 04 '2008 20:10 John Millikin