223 votes

Force LF eol dans le dépôt et la copie de travail

J'ai un dépôt git hébergé sur github. La plupart des fichiers ont été initialement développées sur Windows, et je n'ai pas été trop prudent sur les fins de ligne. Lorsque j'ai effectué la première s'engager, je n'ai pas du tout de configuration git en place pour assurer le bon caractère de nouvelle ligne. Le résultat est que j'ai un certain nombre de fichiers avec CRLF les fins de ligne dans mon dépôt github.

Je suis en train de développer en partie sur Linux, et je voudrais nettoyer les fins de ligne. Comment puis-je vous assurer que les fichiers sont stockés correctement avec LF sur github, et ont LF dans ma copie de travail?

J'ai mis en place un .gitattributes le fichier contenant text eol=LF; est-ce exact? Avec qui engage et poussé, je peux juste rm de ma région, pensions et re-cloner à partir de github pour obtenir l'effet désiré?

273voto

nulltoken Points 15605

Sans un peu d'informations sur ce que sont les fichiers dans votre espace de stockage (code source pure, les images, les fichiers exécutables, ...), c'est un peu dur de répondre à la question :)

À côté de cela, je vais considérer que vous êtes prêt à défaut de LF comme les fins de ligne dans votre répertoire de travail parce que vous êtes prêt à faire assurez-vous que les fichiers texte ont LF fins de ligne dans votre .dépôt git si vous travaillez sur Windows ou Linux. En effet, mieux vaut prévenir que guérir....

Cependant, il existe une meilleure alternative: bénéficiez de LF en fin de ligne, dans votre Linux workdir, CRLF les fins de ligne dans votre Windows workdir ET LF en fin de ligne, dans votre référentiel.

Comme vous êtes partiellement à travailler sur Linux et Windows, assurez - core.eol est définie à l' native et core.autocrlf est définie à l' true.

Ensuite, remplacez le contenu de votre .gitattributes le fichier avec les éléments suivants

* text=auto

Cela vous permettra de Git poignée automagiques les fins de ligne de conversion pour vous, sur les validations et les extractions. Les fichiers binaires ne sera pas modifié, les fichiers détectés comme étant un fichier texte va voir la fin de ligne, converti à la volée.

Cependant, comme vous le savez, le contenu de votre dépôt, vous pouvez donner à Git d'une main et de l'aider à détecter les fichiers texte à partir de fichiers binaires.

À condition que vous travaillez sur un C en fonction de traitement d'image de projet, remplacer le contenu de votre .gitattributes le fichier avec les éléments suivants

* text=auto
*.txt text
*.c text
*.h text
*.jpg binary

Cela permettra de s'assurer que les fichiers dont l'extension est c, h, ou txt seront stockées avec LF fins de ligne dans votre pension et natif de fins de ligne dans le répertoire de travail. Les fichiers Jpeg ne sera pas touché. Tous les autres seront bénéficier de la même automagic de filtrage comme vu ci-dessus.

Afin d'obtenir une obtenir une compréhension plus profonde de l'intérieur les détails de tout cela, je vous suggère de vous plonger dans ce très bon post "l'Esprit à la fin de votre ligne" de Tim Clem, un Githubber.

Comme un exemple réel, vous pouvez aussi coup d'œil à cette commettre où ces changements à un .gitattributes le fichier sont démontrés.

Mise à JOUR de la réponse en considérant le commentaire suivant

En fait, je ne veux pas CRLF dans mes répertoires Windows, parce que mon environnement Linux est en fait une VirtualBox partage le répertoire Windows

Du sens. Merci pour la clarification. Dans ce contexte spécifique, l' .gitattributes fichier lui-même ne sera pas assez.

Exécutez les commandes suivantes à l'encontre de votre référentiel

$ git config core.eol lf
$ git config core.autocrlf input

Que votre dépôt est partagé entre Linux et Windows, ce sera mettez à jour le fichier de configuration pour l'environnement. core.eol sera assurez-vous que les fichiers de texte ours LF fins de ligne sur les extractions. core.autocrlf veillera à ce potentiel CRLF dans des fichiers texte (résultant d'une opération copier/coller par exemple) seront convertis en FL dans votre référentiel.

En option, vous pouvez aider à Git distinguer ce qui est un fichier texte par la création d'un .gitattributes le fichier contenant quelque chose de semblable à la suivante:

# Autodetect text files
* text=auto

# ...Unless the name matches the following
# overriding patterns

# Definitively text files 
*.txt text
*.c text
*.h text

# Ensure those won't be messed up with
*.jpg binary
*.data binary

Si vous avez décidé de créer un .gitattributes le fichier, de le commettre.

Enfin, s'assurer git status mentions "rien à commettre (répertoire de travail propre)", puis effectuez l'opération suivante

$ git checkout-index --force *

Cela permettra de recréer les fichiers dans votre répertoire de travail, en tenant compte de vos modifications de configuration et l' .gitattributes le fichier et remplacer tout le potentiel négligé CRLF dans vos fichiers texte.

Une fois cela fait, tous les fichiers texte dans votre répertoire de travail portera LF en fin de ligne, et git status doit encore examiner le workdir aussi propre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X