Comment puis-je la force de git à utiliser LF au lieu de CR+LF sous windows?
Je veux de la force git checkout fichiers sous Windows en utilisant simplement LF
pas CR+LF
. J'ai vérifié les deux options de configuration, mais je n'étais pas capable de trouver la bonne combinaison de paramètres.
Je veux convertir tous les fichiers LF
et de garder la LF
sur les fichiers.
Remarque: j'ai utilisé autocrlf = input
mais cela répare les fichiers lorsque vous les valider. Je veux le forcer à les obtenir à l'aide de LF
.
Probablement que je n'étais pas si clair: le référentiel est déjà à l'aide de LF
mais les extraits des fichiers à l'aide de msysgit utilisez CR+LF
et je veux de la force de msysgit de les obtenir avec LF
: forcer les fins de ligne Unix.
>git config --list | grep crlf
core.autocrlf=input
autocrlf=input
est la bonne option. Bien sûr, il ne protège pas contre les fichiers qui ont vraimentcr+lf
dans le référentiel ou la création de fichiers aveccr+lf
dans un autre outil avant de les ajouter à git. Quels problèmes rencontrez-vous que cela ne fonctionne pas?- Les fichiers dans le référentiel sont déjà en utilisant uniquement
LF
mais lorsque je les reçois sous Windows msysgit convertitCR+LF
. - Il doit y avoir quelque chose avec votre config; je viens de le tester sur mon msysgit installer. Avec
autocrlf
ensemble deinput
, git est en laissantlf
des sauts de ligne seul. Vous pouvez poster à la sortie degit config
? - Veuillez envoyer la sortie de
git config --list | grep crlf
- Dans ce cas, je suggère que vous vous connectez à un bug; de préférence, pointant vers un dépôt de test qui présente à votre problème et y compris les étapes à suivre pour reproduire le comportement que vous voyez est vraiment mauvais (mais je ne peux pas le reproduire).
- Un petit conseil: assurez-vous également que vous exécutez les commandes git sur le git vous pensez que vous êtes. Par exemple, vous pouvez avoir git est installé sur windows, et git installé sur cygwin, alors assurez-vous d'avoir défini le droit git config.
Vous devez vous connecter pour publier un commentaire.
L'OP ajouté à sa question:
Une première étape simple serait encore à un
.gitattributes
fichier:afin d'éviter toute crlf conversion de fichiers avec un bon eol.
Et J'ai toujours recommandé
git config --global core.autocrlf false
pour désactiver la conversion (qui s'appliquerait à tous fichiers versionnés)Voir les Meilleures pratiques pour la croix-plate-forme git config?
Mais une seconde plus puissante consiste à gitattribute pilote de filtre et ajouter une tache étape
Chaque fois que vous mettez à jour votre arbre de travail, un script peut, uniquement pour les fichiers que vous avez spécifié dans le
.gitattributes
, la force de laLF eol
et toute autre option de mise en forme que vous souhaitez appliquer.Si le "
clear
" script ne fait rien, vous aurez (après commit) qui se transforme vos fichiers, en appliquant exactement le format que vous avez besoin d'eux pour suivre..txt
extension. Il est préférable d'établir le présent et de le tester sur un groupe spécifique, avant une généralisation à *, et ajouter une règle négative!*.xyz ...
à exclure quelques fichiers à partir de cette règle.La bonne façon d'obtenir LF terminaisons Windows est d'abord de définir
core.autocrlf
àfalse
:Vous avez besoin de faire cela si vous utilisez msysgit, parce qu'il la définit
true
dans ses paramètres système.Maintenant git ne fera pas de fin de ligne de la normalisation. Si vous souhaitez que les fichiers de vous enregistrer afin d'être normalisée, ce faire: Définir
text=auto
dans votre.gitattributes
pour tous les fichiers:Et définir
core.eol
àlf
:Maintenant, vous pouvez aussi passer seul repos à crlf (dans le répertoire de travail!) en exécutant
Après vous avez terminé la configuration, vous pouvez git pour normaliser tous les fichiers dans le repo. Pour ce faire, allez à la racine de votre repo et exécutez ces commandes:
Si vous voulez maintenant git aussi normaliser les fichiers dans votre répertoire de travail, exécutez ces commandes:
git diff --cached --name-only -z | xargs -0 git add
git diff --cached --name-only
?Je reviens à cette réponse assez souvent, bien qu'aucune de ces sont assez bon pour moi. Cela dit, le droit de réponse pour moi est un mélange de tous les autres.
Ce que je trouve fonctionne est la suivante:
Pour pensions de titres qui ont été vérifié après ces paramètres globaux ont été fixés, tout sera vérifié que ce qu'il est dans le pensions – nous l'espérons
LF
(\n
). ToutCRLF
seront convertis justeLF
sur l'enregistrement.Avec un repo que vous avez déjà vérifié – que a la bonne fin de ligne, dans les pensions de titres, mais pas votre copie de travail, vous pouvez exécuter les commandes suivantes pour résoudre le problème:
Cela permettra de supprimer (
rm
) de manière récursive (r
) sans demander (-f
), tous les fichiers sauf ceux que vous avez modifié (--cached
), à partir du répertoire courant (.
). Lereset
retourne ensuite tous ces fichiers dans un etat où ils ont leur vrai caractère de nouvelle ligne (correspondant à ce qui est dans le repo).Si vous avez besoin de fixer les fins de ligne de fichiers dans une pension, je vous recommandons de prendre un éditeur qui vous permettra de le faire en vrac comme IntelliJ ou Sublime Text, mais je suis sûr que toute la bonne volonté de soutenir cette.
Notepad++
montre également la ligne fin de la actuellement de fichier ouvert dans le coin en bas à droite. Un clic droit sur ce champ vous permettra de modifier les fins de ligne.Contexte
Si vous
vous pouvez le faire en commençant par git 2.10. 2.10 ou plus) est nécessaire, parce que 2.10 fixe le comportement du texte=auto avec eol=lf. Source.
Solution
Mettre un
.gitattributes
fichier dans la racine de votre dépôt git ayant contenu suivant:Commettre.
Option réglages
Vous pouvez également ajouter un
.editorconfig
dans la racine de votre dépôt pour s'assurer que l'outillage moderne crée de nouveaux fichiers avec des fins de ligne.core.autocrlf=input
est l'endroit le plus approprié pour ce que vous voulez, mais vous pourriez avoir à faire ungit update-index --refresh
et/ou ungit reset --hard
pour que la modification prenne effet.Avec
core.autocrlf
ensemble deinput
, git ne s'appliquera pas de saut de ligne-conversion check-out (donc si vous avez de la FL dans les pensions de titres, vous aurez LF), mais il fera en sorte que dans le cas où vous vous trompez et introduire quelques CRLFs dans la copie de travail d'une certaine façon, elles ne veulent pas faire leur chemin dans le repo.