Quiero forzar a git a pagar archivos en Windows usando simplemente LFnoCR+LF . Verifiqué las dos opciones de configuración pero no pude encontrar la combinación correcta de configuraciones.
Quiero que convierta todos los archivos LFy mantenga elLF en los archivos.
Observación: solía autocrlf = inputpero esto solo repara los archivos cuando los confirma. Quiero forzarlo para que los useLF .
Probablemente no estaba tan claro: el repositorio ya está usando LFpero los archivos desprotegidos usando msysgit están usando CR+LFy quiero forzar a msysgit a obtenerlos LF: forzando las terminaciones de línea de Unix .
>git config --list | grep crlf
core.autocrlf=input

autocrlf=inputEs la opción correcta. Por supuesto, no lo protege de los archivos que realmente tienencr+lfen el repositorio o crea archivos concr+lfotra herramienta antes de agregarlos a git. ¿Qué problemas tienes que esto no funciona?LFpero cuando los obtengo en Windows msysgit los convierteCR+LF.autocrlfset toinput, git dejalfsolo 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
.gitattributesarchivo:(como se señala en los comentarios de nieto , refiriéndose a la
.gitattributesconversión de fin de línea ), para evitar cualquierCRLFconversión de archivos con correctaeol.Y siempre he recomendado
git config --global core.autocrlf falsedeshabilitar 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.gitattributesconfiguració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 eoly cualquier otra opción de formato que desee aplicar.Si el
clearscript " " no hace nada, habrá (después de la confirmación) transformado sus archivos, aplicando exactamente el formato que necesita que sigan.fuente
.txtextensió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..gitattributeslíneas deberían leer:*.txt text eol=lfsegún git-scm.com/docs/gitattributes.gitattributestenemos que hacergit add --renormalize .La forma más adecuada para obtener terminaciones LF en Windows es primer conjunto
core.autocrlfdefalse:Debe hacer esto si está utilizando msysgit, porque lo configura
trueen 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=autoen su.gitattributespara todos los archivos:Y establecer
core.eolalf: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 addgit 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). CualquieraCRLFse convertirá a soloLFen 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 (.). losresetcontinuació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 inputopción anula lacore.eolconfiguració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
.gitattributesarchivo en la raíz de su repositorio git que tenga los siguientes contenidos:Compromételo
Ajustes opcionales
También puede agregar una
.editorconfigen 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=inputes la configuración correcta para lo que desea, pero es posible que tenga que hacer aygit update-index --refresh/ ogit reset --hardpara que el cambio surta efecto.Con
core.autocrlfset 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