tag - Cómo normalizar las terminaciones de la línea de árbol en funcionamiento en Git?
git tags best practices (4)
Enfoque alternativo (solo se usa el comando)
Asegúrese de no tener ningún cambio pendiente en el repositorio:
$ git status
$ git stash
Modifique .gitattributes
para que la interpretación de CRLF cambie:
$ echo "*.txt text" >>.gitattributes
$ git commit -m "Made .txt files a subject to CRLF normalization." -- .gitattributes
Eliminar datos del índice y actualizar el directorio de trabajo:
$ git rm --cached -r .
$ git reset --hard
Revise las correcciones CRLF que Git propone:
$ git ls-files --eol
$ git status
$ git diff
De acuerdo con la decisión de Git:
$ git add -u
$ git commit -m "Normalized CRLF for .txt files"
Volver a cargar los cambios como si se hubiera hecho el clon limpio:
$ git rm --cached -r .
$ git reset --hard
He clonado un repositorio que tenía terminaciones de línea inconsistentes. He agregado un .gitattributes
que establece el atributo de texto para los archivos que quiero normalizar. Ahora, cuando confirmo cambios, recibo el mensaje:
warning: CRLF will be replaced by LF in FILE.
The file will have its original line endings in your working directory.
¿Cómo puedo hacer que Git normalice mi copia de trabajo del archivo para mí? Preferiblemente me gustaría que Git normalice todo el árbol de trabajo.
Con el cliente Git 2.16 y superior ahora hay una forma mucho más simple de hacerlo. Solo usa git add --renormalize .
La configuración de .gitattributes
solo afectará a las nuevas confirmaciones. Si este repositorio no tiene historial publicado (no hay otros que dependen de él), es posible que desee revisar todo el historial. En Unix / Linux, puede usar dos2unix(1)
para arreglar todos los archivos en combinación con find(1)
, y usando la reescritura del historial de filter-branch
(vea la discussion en el libro de git) puede incluso limpiar el historial completo del proyecto.
Use con sumo cuidado, en un clon nuevo. Póngase en contacto con cualquier persona que pueda tener un clon, y aconseje lo que quiere hacer.
Los documentos para gitattributes proporcionan la respuesta:
rm .git/index # Remove the index to force git to
git reset # re-scan the working directory
git status # Show files that will be normalized
git add -u
git add .gitattributes
git commit -m "Introduce end-of-line normalization"
Haga esta secuencia después de haber editado .gitattributes
.
Actualizar
Parece que algunos usuarios han tenido problemas con las instrucciones anteriores. Los documentos actualizados para gitattributes muestran un nuevo conjunto de instrucciones (después de editar los archivos .gitattributes):
git read-tree --empty # Clean index, force re-scan of working directory
git add .
git status # Show files that will be normalized
git commit -m "Introduce end-of-line normalization"
Gracias a @vossad01 por señalar esto.
Además, con cualquiera de las soluciones, los archivos en su copia de trabajo aún conservan sus antiguas terminaciones de línea. Si desea actualizarlos, asegúrese de que su árbol de trabajo esté limpio y use:
git rm --cached -r .
git reset --hard
Ahora las terminaciones de línea serán correctas en tu árbol de trabajo.