Cómo cambiar la configuración de final de línea

582

¿Hay un archivo o menú que me permita cambiar la configuración sobre cómo lidiar con los finales de línea?

Leí que hay 3 opciones:

  1. Pagar al estilo de Windows, confirmar al estilo de Unix

    Git convertirá LF a CRLF al retirar archivos de texto. Al confirmar archivos de texto, CRLF se convertirá a LF. Para proyectos multiplataforma, esta es la configuración recomendada en Windows ("core.autocrlf" está configurado como "verdadero")

  2. Pague como está, confirme al estilo Unix

    Git no realizará ninguna conversión al retirar archivos de texto. Al confirmar archivos de texto, CRLF se convertirá a LF. Para proyectos multiplataforma, esta es la configuración recomendada en Unix ("core.autocrlf" está configurado como "input").

  3. Realizar el pago tal cual, confirmar tal cual

    Git no realizará ninguna conversión al retirar o confirmar archivos de texto. No se recomienda elegir esta opción para proyectos multiplataforma ("core.autocrlf" está configurado como "falso")

qwertymk
fuente
3
¿Cuál de estos es el predeterminado?
Stephen
2
No importa, parece que el valor predeterminado es verdadero, lo que creo que es apropiado.
Stephen
19
De hecho, encuentro que la opción de 3er funciona mejor. De lo contrario, a menudo he estado en situaciones en las que edito scripts por lotes y sh en la misma plataforma (Windows / Linux) y luego los confirmo y Git "arregla" automáticamente los finales de línea para una plataforma ... No, prefiero ser auto- consciente de las terminaciones de línea y comprometerlas / pagarlas exactamente como están.
JustAMartin
1
@Neutrino Ojalá esto fuera cierto, pero un ejemplo de IDE que interfiere con los finales de línea (y no ofrece una opción de configuración razonable para desactivar esto) es Visual Studio.
Cássio Renan

Respuestas:

530

La forma normal de controlar esto es con git config

Por ejemplo

git config --global core.autocrlf true

Para más detalles, desplácese hacia abajo en este enlace a Pro Git a la sección llamada "core.autocrlf"


Si desea saber en qué archivo se guarda esto, puede ejecutar el comando:

git config --global --edit

y el archivo de configuración global de git debería abrirse en un editor de texto, y puede ver desde dónde se cargó ese archivo.

CodingWithSpike
fuente
17
trueo falseson solo dos opciones, el instalador tiene tres
qwertymk
49
inputes la tercera opción (como se indica en el enlace que proporcioné). Las 3 opciones son true| falseEl | input
CodingWithSpike
2
Aquí hay otra buena pregunta SO sobre el tema: stackoverflow.com/questions/3206843/…
CodingWithSpike
31
En realidad, si relees tu propia pregunta, en los extractos copiados / pegados: ¿ "1 ... ("core.autocrlf" is set to "true") ... 2 ... ("core.autocrlf" is set to "input") ... 3 ... ("core.autocrlf" is set to "false")"entonces básicamente respondiste tu propia pregunta? :)
CodingWithSpike
2
Esta es la vieja forma de evitarlo. Mira el archivo .gitattributes.
eftshift0
176

Formato de final de línea utilizado en el sistema operativo

  • Windows: par CR(Retorno de carro \r) y LF(LineFeed \n)
  • OSX, Linux: LF(LineFeed \n)

Podemos configurar git para corregir automáticamente los formatos de final de línea para cada sistema operativo de dos maneras.

  1. Configuración global de Git
  2. Usar .gitattributesarchivo

configuración global

En Linux / OSX
git config --global core.autocrlf input

Esto solucionará cualquier CRLFque LFcuando confirme.

En Windows
git config --global core.autocrlf true

Esto asegurará que cuando realice el pago en Windows, todos LFse convertirán aCRLF

Archivo .gitattributes

Es una buena idea mantener un .gitattributesarchivo ya que no queremos esperar que todos en nuestro equipo establezcan su configuración. Este archivo debe mantenerse en la ruta raíz del repositorio y, si existe, git lo respetará.

* text=auto

Esto tratará todos los archivos como archivos de texto y los convertirá a la línea del sistema operativo que finaliza al finalizar la compra y vuelve a LFconfirmar automáticamente. Si quisiera decirlo explícitamente, use

* text eol=crlf
* text eol=lf

El primero es para pagar y el segundo es para confirmar.

*.jpg binary

Trate todas las .jpgimágenes como archivos binarios, independientemente de la ruta. Entonces no se necesita conversión.

O puede agregar calificadores de ruta:

my_path/**/*.jpg binary
Jasnan
fuente
3
¿Qué pasa con OS X, que usa CR(retorno de carro) solo?
jww
23
Legacy MacOS (es decir, MacOS 9 y CRversiones anteriores) se usa solo, pero OS X generalmente lo usa LF.
Zachary Ware
2
¿Puedo usar * text eol=lfdos veces para pagar LFen Windows?
mbomb007
1
De acuerdo con la configuración de documentación de gitattributes , * text=autogit decide si el contenido es texto o no. Forzar que todos los archivos sean texto debe ser * textsolo.
Adrian W
¿Cómo configuro los eol=crarchivos en Mac OS 9 y otras plataformas heredadas?
NobleUplift
36

Para una solución de configuración de repositorio, que se puede redistribuir a todos los desarrolladores, consulte el atributo de texto en el archivo .gitattributes . De esta manera, los desarrolladores no tienen que establecer manualmente sus propias terminaciones de línea en el repositorio, y debido a que diferentes repositorios pueden tener diferentes estilos de finalización de línea, global core.autocrlf no es el mejor, al menos en mi opinión.

Por ejemplo, desarmar este atributo en una ruta dada [ . - texto] forzará a git a no tocar las terminaciones de línea cuando ingrese y salga En mi opinión, este es el mejor comportamiento, ya que la mayoría de los editores de texto modernos pueden manejar ambos tipos de terminaciones de línea. Además, si como desarrollador aún desea realizar la conversión de final de línea al registrarse, aún puede establecer la ruta para que coincida con ciertos archivos o establecer el atributo eol (en .gitattributes) en su repositorio.

También consulte esta publicación relacionada, que describe el archivo .gitattributes y el atributo de texto con más detalle: ¿Cuál es la mejor estrategia de manejo de CRLF (retorno de carro, avance de línea) con Git?

Fazi
fuente
. - textda is not a valid attribute name: .gitattributes:1por favor ponercat .gitattributes
jangorecki
3

Para mí, ¿cuál fue el truco para ejecutar el comando?

git config auto.crlf false

dentro de la carpeta del proyecto, lo quería específicamente para un proyecto.

Ese comando cambió el archivo en la ruta {nombre_proyecto} /. Git / config (fyi .git es una carpeta oculta) agregando las líneas

[auto]
    crlf = false

al final del archivo. Supongo que cambiar el archivo también hace el mismo truco.

Entusiasta de viajes y códigos
fuente
1

Si desea volver a convertir los formatos de archivo que se han cambiado al formato UNIX desde el formato de PC.

(1) Debe reinstalar el GIT de tortuga y en la sección "Conversión de final de línea" asegúrese de haber seleccionado la opción "Retirar como está - Registrar como es".

(2) y mantenga las configuraciones restantes tal como están.

(3) una vez realizada la instalación

(4) escriba todas las extensiones de archivo que se convierten al formato UNIX en un archivo de texto (extensiones.txt).

ex:*.dsp
   *.dsw

(5) copie el archivo en su clon Ejecute el siguiente comando en GITBASH

while read -r a;
do
find . -type f -name "$a" -exec dos2unix {} \;
done<extension.txt
Nishanth
fuente