Versión del artículo: Enterprise Server 2.17
Configurar Git para manejar finales de línea
Para evitar problemas en tus diferencias, puedes configurar Git para manejar correctamente los finales de línea.
Cada vez que presionas Enter en tu teclado, insertas un caracter invisible denominado fin de línea. Esto se maneja de forma diferente en los diferentes sistemas operativos.
Cuando colaboras en proyectos con Git y GitHub Enterprise, Git puede producir resultados inesperados si, por ejemplo, trabajas en una máquina Windows y tu colaborador hizo un cambio desde OS X.
Puedes configurar Git para que maneje los fines de línea automáticamente y así puedas colaborar eficazmente con las personas que utilizan otros sistemas operativos.
Parámetros globales para finales de línea
El comando git config core.autocrlf
se usa para cambiar el modo en que Git maneja los finales de línea. Toma un solo argumento.
En OS X, simplemente escribes input
en la configuración. Por ejemplo:
$ git config --global core.autocrlf input
# Configure Git to ensure line endings in files you checkout are correct for OS X
En Windows, simplemente escribes true
en la configuración. Por ejemplo:
$ git config --global core.autocrlf true
# Configure Git to ensure line endings in files you checkout are correct for Windows.
# For compatibility, line endings are converted to Unix style when you commit files.
En Linux, simplemente escribes input
en la configuración. Por ejemplo:
$ git config --global core.autocrlf input
# Configure Git to ensure line endings in files you checkout are correct for Linux
Parámetros por repositorio
Como ocpión, puedes configurar un archivo de tipo .gitattributes para administrar cómo Git lee los fines de línea en un repositorio específico. Cuando confirmas este archivo en un repositorio, éste invalida la configuración de core.autocrlf
para todos los colaboradores del mismo. Esto garantiza un comportamiento consistente para todos los usuarios, sin importar su configuración y ambiente de Git.
El archivo .gitattributes debe crearse en la raíz del repositorio y confirmarse como cualquier otro archivo.
Un archivo .gitattributes se asemeja a una tabla con dos columnas:
- A la izquierda está el nombre del archivo que coincide con Git.
- A la derecha está la configuración de fin de línea que Git debería usar para esos archivos.
Ejemplo
Aquí hay un ejemplo de archivo .gitattributes. Puedes usarlo como plantilla para tus repositorios:
# Esteblece el comportamiento predeterminado, en caso de que las personas no tengan configurado core.autocrlf.
* text=auto
# Declara explícitamente los archivos de texto que siempre quieres que estén normalizados y convertidos
# a finales de línea nativos en el control.
*.c text
*.h text
# Declara los archivos que siempre tendrán los finales de línea CRLF en el control.
*.sln text eol=crlf
# Denota todos los archivos que son absolutamente binarios y no deberían modificarse.
*.png binary
*.jpg binary
Notarás que los archivos coinciden—*.c
, *.sln
, *.png
—, separados con un espacio, y luego se les dará una configuración —text
, text eol=crlf
, binary
. Revisaremos algunas configuraciones posibles a continuación.
-
text=auto
Git manejará los archivos en cualquier manera que crea sea mejor. Esta es una buena opción predeterminada. -
text eol=crlf
Git siempre convertirá los fines de línea enCRLF
a la salida. Deberías usar esto para los archivos que deben conservar los finalesCRLF
, incluso en OSX o Linux. -
text eol=lf
Git siempre convertirá los finales de línea enLF
a la salida. Deberías usar esto para los archivos que deben conservar los finales LF, incluso en Windows. -
binary
Git entenderá que los archivos especificados no son de texto, y no deberá intentar cambiarlos. El parámetrobinario
también es un alias paratext -diff
.
Actualizar un repositorio después de los finales de línea
Cuando configuras la opción core.autocrlf
o confirmas un archivo de tipo .gitattributes podrías encontrar que Git reporta cambios a archivos que no has modificado. Git ha cambiado los fines de línea para que concuerden con tu nueva configuración.
Para garantizar que todos los fines de línea en tu repositorio concuerdan con tu nueva configuración, respalda tus archivos con Git, borra los archivos en tu repositorio (con excepción de el directorio .git
), y luego restablece todos los archivos al mismo tiempo.
- Guarda los archivos actuales en Git, de manera que nada de tu trabajo se pierda.
$ git add . -u $ git commit -m "Saving files before refreshing line endings"
- Agrega todos los archivos cambiados nuevamente y normaliza los finales de línea.
$ git add --renormalize .
- Muestra los archivos reescritos, normalizados.
$ git status
- Confirma los cambios en tu repositorio.
$ git commit -m "Normalize all the line endings"
Leer más
- Personalizar Git - Atributos de Git en el libro de Pro Git
- git-config en las páginas man para Git
- Comenzar -Configuración Inicial en el libro de Pro Git
- Mind the End of Your Line por Tim Clem