J'ai un dépôt git hébergé sur github. La plupart des fichiers ont été initialement développés sous Windows et je n'ai pas fait trop attention aux fins de ligne. Lorsque j'ai effectué le commit initial, je n'avais pas non plus de configuration git en place pour appliquer les fins de ligne correctes. Le résultat est que j'ai un certain nombre de fichiers avec des fins de ligne CRLF dans mon référentiel github.
Je développe maintenant partiellement sous Linux, et j'aimerais nettoyer les fins de ligne. Comment puis-je m'assurer que les fichiers sont correctement stockés avec LF sur github et que LF est dans ma copie de travail?
J'ai mis en place un .gitattributes
fichier contenant text eol=LF
; Est-ce exact? Avec cela engagé et poussé, puis-je simplement rm
mon dépôt local et re-cloner à partir de github pour obtenir l'effet souhaité?
Réponses:
Sans un peu d'informations sur les fichiers de votre référentiel (code source pur, images, exécutables, ...), il est un peu difficile de répondre à la question :)
À côté de cela, je considérerai que vous êtes prêt à utiliser par défaut LF comme fins de ligne dans votre répertoire de travail, car vous êtes prêt à vous assurer que les fichiers texte ont des fins de ligne LF dans votre référentiel .git que vous travailliez sous Windows ou Linux. . En effet, mieux vaut prévenir que guérir ....
Cependant, il existe une meilleure alternative: bénéficiez des fins de ligne LF dans votre répertoire de travail Linux, des fins de ligne CRLF dans votre répertoire de travail Windows ET des fins de ligne LF dans votre référentiel.
Comme vous travaillez partiellement sur Linux et Windows, assurez-vous que
core.eol
est défini surnative
etcore.autocrlf
est défini surtrue
.Ensuite, remplacez le contenu de votre
.gitattributes
fichier par le suivantCela permettra à Git de gérer la conversion automatique des fins de ligne pour vous, lors des validations et des extractions. Les fichiers binaires ne seront pas modifiés, les fichiers détectés comme étant des fichiers texte verront les fins de ligne converties à la volée.
Cependant, comme vous connaissez le contenu de votre référentiel, vous pouvez donner un coup de main à Git et l'aider à détecter les fichiers texte à partir de fichiers binaires.
Si vous travaillez sur un projet de traitement d'image basé sur C, remplacez le contenu de votre
.gitattributes
fichier par ce qui suitCela garantira que les fichiers dont l'extension est c, h ou txt seront stockés avec des fins de ligne LF dans votre dépôt et auront des fins de ligne natives dans le répertoire de travail. Les fichiers Jpeg ne seront pas touchés. Tous les autres bénéficieront du même filtrage automagique que ci-dessus.
Afin d'avoir une meilleure compréhension des détails internes de tout cela, je vous suggère de plonger dans ce très bon article "Attention à la fin de votre ligne" de Tim Clem, un Githubber.
En tant qu'exemple du monde réel, vous pouvez également jeter un œil à ce commit où ces modifications d'un
.gitattributes
fichier sont démontrées.MISE À JOUR de la réponse en tenant compte du commentaire suivant
Logique. Merci pour la clarification. Dans ce contexte spécifique, le
.gitattributes
fichier à lui seul ne suffira pas.Exécutez les commandes suivantes sur votre référentiel
Comme votre référentiel est partagé entre votre environnement Linux et Windows, cela mettra à jour le fichier de configuration local pour les deux environnements.
core.eol
s'assurera que les fichiers texte portent des fins de ligne LF lors de l'extraction.core.autocrlf
s'assurera que le CRLF potentiel dans les fichiers texte (résultant d'une opération de copier / coller par exemple) sera converti en LF dans votre référentiel.En option, vous pouvez aider Git distinguer ce qui est un fichier texte en créant un
.gitattributes
fichier contenant quelque chose de semblable à ce qui suit:Si vous avez décidé de créer un
.gitattributes
fichier, validez-le .Enfin, assurez-vous de
git status
mentionner "rien à valider (nettoyage du répertoire de travail)" , puis effectuez l'opération suivanteCela recréera vos fichiers dans votre répertoire de travail, en tenant compte de vos modifications de configuration et du
.gitattributes
fichier et en remplaçant tout CRLF potentiel négligé dans vos fichiers texte.Une fois que cela est fait, chaque fichier texte de votre répertoire de travail portera des fins de ligne LF et
git status
devrait toujours considérer le répertoire de travail comme propre.la source
vi
est moins satisfait de CRLF. Est-ce que je veux juste le changer pour qu'ilcore.autocrlf
soitfalse
(ouinput
)?git checkout-index --force --all
peut fonctionner mieux. Le deuxième point semble un peu hors sujet par rapport à la question initiale. Que diriez-vous de poser une question dédiée?text
eteol=lf
obtenir le même résultat que celui décrit dans votre réponse viacore.eol
etcore.autocrlf
?git checkout-index --force --all
ne fait rien pour moi. Ce qui fonctionne, c'est la liste des commandes dans les instructions GitHub pour traiter ce problème.À partir de git 2.10 (publié le 03/09/2016), il n'est pas nécessaire d'énumérer chaque fichier texte séparément. Git 2.10 a corrigé le comportement de text = auto avec eol = lf . Source .
.gitattributes
fichier à la racine de votre référentiel git:Ajoutez et validez.
Ensuite, vous pouvez suivre les étapes et tous les fichiers sont maintenant normalisés:
Source: Réponse de kenorb .
la source
Pour forcer les fins de ligne LF pour tous les fichiers texte, vous pouvez créer un
.gitattributes
fichier au niveau supérieur de votre référentiel avec les lignes suivantes (modifiez comme vous le souhaitez):qui garantit que tous les fichiers que Git considère comme des fichiers texte ont des
LF
fins de ligne normalisées ( ) dans le référentiel (normalement, lacore.eol
configuration contrôle celle que vous avez par défaut).Sur la base des nouveaux paramètres d'attribut, tous les fichiers texte contenant des CRLF doivent être normalisés par Git. Si cela ne se produit pas automatiquement, vous pouvez actualiser un référentiel manuellement après avoir modifié les fins de ligne, de sorte que vous pouvez réexaminer et valider le répertoire de travail en suivant les étapes suivantes (compte tenu du répertoire de travail propre):
ou selon la documentation GitHub :
Voir aussi: @Charles Bailey post .
De plus, si vous souhaitez exclure des fichiers pour qu'ils ne soient pas traités comme du texte, désactivez leur attribut de texte, par exemple
Ou marquez-le explicitement comme binaire:
Pour voir le fichier de normalisation git plus avancé, vérifiez
.gitattributes
au coeur de Drupal :Voir également:
la source
text=auto
est trompeur. Vous ne pouvez pas utilisertext=auto
eteol
ensemble. Le paramètreeol
désactive la détection automatique des fichiers texte. C'est pourquoi vous devez spécifier tous ces types de fichiers. Siauto
était activé, vous n'auriez pas besoin de tout cela. 2. Vous n'avez pas besointext
eteol=lf
.eol=lf
définit efficacementtext
.* text=auto eol=lf
le premiertext=auto
est remplacé pareol=lf
. Où avez-vous trouvé cette fonctionnalité? Voici ma source: stackoverflow.com/questions/29435156/…* text=auto eol=lf
de l'exemple, car il a également été supprimé de Drupal. Pensez également à supprimer les commentaires.