Entrada

Diferencias de salto de línea- verificación EOL de Windows y Linux y sincronización de Git Repo

Si necesita modificar y confirmar archivos en un repositorio de Git tanto en Linux como en Windows, puede haber casos en los que el cliente Git reconozca el archivo como un archivo modificado en la etapa de confirmación de Git aunque el contenido claramente no haya sido modificado.

La causa del problema es que aunque el contenido del archivo es el mismo, la forma básica de expresar saltos de línea en Windows y Linux es diferente. En la imagen de abajo, la izquierda es un archivo modificado y guardado en Windows (PC), y la derecha es un archivo modificado y guardado en Linux (UNIX).

El mismo contenido de archivo pero archivos diferentes, a la izquierda está el formato de PC con Windows y a la derecha está el formato Linux UNIX El mismo contenido de archivo pero archivos diferentes, a la izquierda está el formato de PC con Windows y a la derecha está el formato Linux UNIX

Diferencias de saltos de línea entre Windows y Linux

Desde una perspectiva de caracteres ASCII,

Windows expresa saltos de línea en forma de “CRLF (retorno de carro con avance de línea)” como se muestra a continuación.

1
\r\n

En sistemas Linux como Ubuntu, los saltos de línea se expresan solo como “LF (salto de línea)”, como se muestra a continuación.

1
\n

Supongamos que recibió un archivo que expresa nuevas líneas en formato LF de Git, lo modificó brevemente en un editor de Windows y luego lo restauró. Esto significa que el archivo tiene el mismo contenido en la superficie, pero los saltos de línea se modifican con CRLF, por lo que existe la posibilidad de que se transforme en un archivo diferente al archivo en Git.

Si ejecuta un script bash escrito en Windows en Linux, puede encontrar misteriosos errores de ejecución del script durante la depuración. Esto puede deberse a que el script de shell almacenó saltos de línea en formato CRLF en Windows y bash no pudo interpretar esto.

Verificar y convertir EOL (Fin de línea) de un archivo

Por supuesto, incluso si escribe un archivo en Windows, puede crear y convertir el archivo en formato UNIX (LF), no en formato PC (CRLF). También es posible lo contrario. La operación de conversión se denomina comúnmente “Conversión EOL (Fin de líneas)”.

De hecho, puede resultar un poco confuso cuando se encuentra por primera vez con las diferencias en el EOL para cada sistema operativo. Por lo tanto, las palabras clave relacionadas con el contenido que se explicará en el futuro se pueden asignar a una tabla como se muestra a continuación.

NombreventanasUbuntu (Linux)
Terminología del formato de saltos de líneaCRLF (retorno de carro con avance de línea)LF (avance de línea)
caracteres de representación de saltos de línea\r\n\n
Información de la herramienta file en UbuntuASCII text, with CRLF line terminatorsASCII text
Tipo EOL en la herramienta Beyond ComparePCUNIX
Tipo EOL en Ubuntudosunix
Herramienta de conversión EOL en Ubuntuunix2dosdos2unix

ventanas

Usar el editor Notepad++ puede ayudarle a crear archivos teniendo en cuenta el EOL.

Como se muestra en la imagen a continuación, puede verificar el estado actual de “Conversión EOL” en el editor Notepad ++ y realizar la conversión. El menú está en “Editar> Conversión EOL”.

Notepad++ - Conversión EOL - `Editar > Conversión EOL > Windows (CR LF) o Unix (LF)` Notepad++ - Conversión EOL - Editar > Conversión EOL > Windows (CR LF) o Unix (LF)

Ubuntu (Linux)

En el entorno Ubuntu, también puedes comprobar el estado EOL de los archivos y convertirlos.

Puede comprobar el estado EOL de un archivo utilizando la herramienta “archivo”.

1
2
3
4
5
6
7
# PC (CRLF)
$ file pc.txt 
pc.txt: ASCII text, with CRLF line terminators

# Unix (LF)
$ file unix.txt 
unix.txt: ASCII text

Para la conversión EOL de archivos, se deben instalar tofrodos y dos2unix. Se puede instalar usando apt.

1
2
sudo apt-get install tofrodos
sudo apt-get install dos2unix

Una vez que instale los paquetes, puede utilizar las herramientas siguientes.

  • dos2unix: Convertir PC (CRLF) a Unix (LF)
  • unix2dos: convierte Unix (LF) a PC (CRLF)

A continuación se muestra un ejemplo de conversión de PC (CRLF) a UNIX (LF).

1
2
3
4
5
6
7
8
9
$ file pc.txt 
pc.txt: ASCII text, with CRLF line terminators

$ dos2unix pc.txt 
dos2unix: converting file pc.txt to Unix format...

$ file pc.txt 
pc.txt: ASCII text

Sincronización EOL de Git Repo entre sistemas operativos

Hay una configuración de Git en un repositorio de Git que evita problemas de conversión EOL al confirmar y extraer archivos en entornos Windows y Ubuntu.

El siguiente comando git cambia CRLF a LF antes de insertar un archivo en formato ASCII en la base de datos de objetos. Por lo tanto, se utiliza principalmente para la configuración de Git en un entorno “Windows”.

1
git config --global core.autocrlf input 

El siguiente comando git utiliza saltos de línea como LF. Por lo tanto, se utiliza principalmente en el entorno “Ubuntu (Linux)”.

1
git config --global core.autocrlf true

Dado que el comando anterior es una configuración global de Git, si desea que la configuración EOL se aplique solo a un repositorio clonado específico, puede ir a la carpeta del repositorio correspondiente y usar el comando eliminando solo la opción --global.

En otras palabras, la intención es subir archivos con un EOL en formato LF al servidor Git.

En un entorno Windows, puede acceder a Git Bash desde el menú después de hacer clic derecho.

Accediendo a Git Bash en Windows Accediendo a Git Bash en Windows

Esta entrada está licenciada bajo CC BY 4.0 por el autor.