¿Cuál es la estrategia para manejar CRLF (retorno de carro, avance de línea) con Git?
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?
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
.gitattributes
archivo. Este archivo se envía al repositorio y anula lacore.autocrlf
configuració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 .gitattributes
archivo.
# 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 .gitattributes
y, 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? :-/
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.