Quiero forzar a git a pagar archivos en Windows usando simplemente LF
noCR+LF
. Verifiqué las dos opciones de configuración pero no pude encontrar la combinación correcta de configuraciones.
Quiero que convierta todos los archivos LF
y mantenga elLF
en los archivos.
Observación: solía autocrlf = input
pero esto solo repara los archivos cuando los confirma. Quiero forzarlo para que los useLF
.
Probablemente no estaba tan claro: el repositorio ya está usando LF
pero los archivos desprotegidos usando msysgit están usando CR+LF
y quiero forzar a msysgit a obtenerlos LF
: forzando las terminaciones de línea de Unix .
>git config --list | grep crlf
core.autocrlf=input
autocrlf=input
Es la opción correcta. Por supuesto, no lo protege de los archivos que realmente tienencr+lf
en el repositorio o crea archivos concr+lf
otra herramienta antes de agregarlos a git. ¿Qué problemas tienes que esto no funciona?LF
pero cuando los obtengo en Windows msysgit los convierteCR+LF
.autocrlf
set toinput
, git dejalf
solo saltos de línea. ¿Puedes publicar la salida degit config
?Respuestas:
El OP agregó en su pregunta:
Un primer paso simple aún estaría en un
.gitattributes
archivo:(como se señala en los comentarios de nieto , refiriéndose a la
.gitattributes
conversión de fin de línea ), para evitar cualquierCRLF
conversión de archivos con correctaeol
.Y siempre he recomendado
git config --global core.autocrlf false
deshabilitar cualquier conversión (que se aplicaría a todos los archivos versionados)¿Ver las mejores prácticas para la configuración git multiplataforma?
Desde Git 2.16 (Q1 2018), puede usar
git add --renormalize .
para aplicar esa.gitattributes
configuración de inmediato.Pero un segundo paso más poderoso implica un controlador de filtro gitattribute y agrega un paso de mancha
Cada vez que actualice su árbol de trabajo, un script podría, solo para los archivos que ha especificado en
.gitattributes
, forzar laLF eol
y cualquier otra opción de formato que desee aplicar.Si el
clear
script " " no hace nada, habrá (después de la confirmación) transformado sus archivos, aplicando exactamente el formato que necesita que sigan.fuente
.txt
extensión. Es preferible establecer esto primero y probarlo en un grupo específico, antes de generalizar a *, y agregar una regla negativa!*.xyz ...
para excluir algunos pocos archivos de esa regla..gitattributes
líneas deberían leer:*.txt text eol=lf
según git-scm.com/docs/gitattributes.gitattributes
tenemos que hacergit add --renormalize .
La forma más adecuada para obtener terminaciones LF en Windows es primer conjunto
core.autocrlf
defalse
:Debe hacer esto si está utilizando msysgit, porque lo configura
true
en la configuración del sistema.Ahora git no hará ninguna línea que finalice la normalización. Si desea que los archivos que registre estén normalizados, haga lo siguiente: Configure
text=auto
en su.gitattributes
para todos los archivos:Y establecer
core.eol
alf
:Ahora también puede cambiar repositorios individuales a crlf (en el directorio de trabajo) ejecutando
Después de haber realizado la configuración, es posible que desee que git normalice todos los archivos en el repositorio . Para hacer esto, vaya a la raíz de su repositorio y ejecute estos comandos:
Si ahora desea que git también normalice los archivos en su directorio de trabajo , ejecute estos comandos:
fuente
git diff --cached --name-only -z | xargs -0 git add
git diff --cached --name-only
?git clone --config core.autocrlf=false <repo path>
.Vuelvo a esta respuesta con bastante frecuencia, aunque ninguno de estos es el adecuado para mí. Dicho esto, la respuesta correcta para mí es una mezcla de los demás.
Lo que encuentro funciona es lo siguiente:
Para los repositorios que se verificaron después de que se establecieron esas configuraciones globales, todo se verificará como lo que sea que esté en el repositorio, con suerte
LF
(\n
). CualquieraCRLF
se convertirá a soloLF
en el registro.Con un repositorio existente que ya ha extraído, que tiene las terminaciones de línea correctas en el repositorio pero no su copia de trabajo, puede ejecutar los siguientes comandos para solucionarlo:
Esto eliminará (
rm
) recursivamente (r
) sin prompt (-f
), todos los archivos excepto los que ha editado (--cached
), desde el directorio actual (.
). losreset
continuación, se recuperan todos los archivos a un estado en el que tienen sus verdaderos finales de línea (que coinciden con lo que hay en el repositorio).Si necesita arreglar las terminaciones de línea de los archivos en un repositorio, le recomiendo que tome un editor que le permita hacerlo de forma masiva como IntelliJ o Sublime Text, pero estoy seguro de que cualquiera bueno lo admitirá.
fuente
Notepad++
también muestra el final de línea del archivo abierto en la esquina inferior derecha. Un clic derecho en ese campo le permitirá cambiar las terminaciones de línea.core.autocrlf input
opción anula lacore.eol
configuración, por lo que la configuración de ambos es redundante. (Ver git-scm.com/docs/git-config )Contexto
Si tu
puedes hacerlo comenzando con git 2.10. Se requiere 2.10 o posterior, porque 2.10 arregló el comportamiento de text = auto junto con eol = lf . Fuente .
Solución
Coloque un
.gitattributes
archivo en la raíz de su repositorio git que tenga los siguientes contenidos:Compromételo
Ajustes opcionales
También puede agregar una
.editorconfig
en la raíz de su repositorio para asegurarse de que las herramientas modernas crean nuevos archivos con las terminaciones de línea deseadas.fuente
core.autocrlf=input
es la configuración correcta para lo que desea, pero es posible que tenga que hacer aygit update-index --refresh
/ ogit reset --hard
para que el cambio surta efecto.Con
core.autocrlf
set toinput
, git no aplicará la conversión de nueva línea al finalizar la compra (por lo tanto, si tiene LF en el repositorio, obtendrá LF), pero se asegurará de que en caso de que se equivoque e introduzca algunos CRLF en funcionamiento copia de alguna manera, no entrarán en el repositorio.fuente
Puede encontrar la solución a este problema en: https://help.github.com/en/github/using-git/configuring-git-to-handle-line-endings
Descripción simplificada de cómo puede resolver este problema en Windows:
Configuración global para finales de línea El comando git config core.autocrlf se usa para cambiar cómo Git maneja las terminaciones de línea. Se necesita un solo argumento.
En Windows, simplemente pasa fiel a la configuración. Por ejemplo: C:> git config --global core.autocrlf true
Buena suerte, espero haberte ayudado.
fuente