Je veux forcer git à extraire des fichiers sous Windows en utilisant simplement LF
pas CR+LF
. J'ai vérifié les deux options de configuration mais je n'ai pas pu trouver la bonne combinaison de paramètres.
Je veux qu'il convertisse tous les fichiers LF
et les conserve LF
.
Remarque: j'ai utilisé autocrlf = input
mais cela ne fait que réparer les fichiers lorsque vous les validez. Je veux le forcer à les utiliser LF
.
Je n'étais probablement pas aussi clair: le référentiel utilise déjà LF
mais les fichiers extraits à l'aide de msysgit utilisent CR+LF
et je veux forcer msysgit à les obtenir avec LF
: forçage des fins de ligne Unix .
>git config --list | grep crlf
core.autocrlf=input
autocrlf=input
est la bonne option. Bien sûr, il ne vous protège pas des fichiers qui ont réellementcr+lf
dans le référentiel ou de la création de fichiers aveccr+lf
dans un autre outil avant de les ajouter à git. Quels problèmes rencontrez-vous pour lesquels cela ne fonctionne pas?LF
mais lorsque je les obtiens sous Windows, msysgit les convertitCR+LF
.autocrlf
défini surinput
, git laisse leslf
sauts de ligne seuls. Pouvez-vous publier la sortie degit config
?Réponses:
Le PO a ajouté dans sa question:
Une première étape simple serait toujours dans un
.gitattributes
fichier:(comme indiqué dans les commentaires de petit - enfant , se référant à la
.gitattributes
conversion de fin de ligne ), pour éviter touteCRLF
conversion de fichiers avec correcteol
.Et j'ai toujours recommandé
git config --global core.autocrlf false
de désactiver toute conversion (qui s'appliquerait à tous les fichiers versionnés)Voir Meilleures pratiques pour la configuration git multiplateforme?
Depuis Git 2.16 (Q1 2018), vous pouvez utiliser
git add --renormalize .
pour appliquer ces.gitattributes
paramètres immédiatement.Mais une deuxième étape plus puissante implique un pilote de filtre gitattribute et ajoute une étape de maculage
Chaque fois que vous mettriez à jour votre arborescence de travail, un script pourrait, uniquement pour les fichiers que vous avez spécifiés dans
.gitattributes
, forcer laLF eol
et toute autre option de formatage que vous souhaitez appliquer.Si le
clear
script " " ne fait rien, vous aurez (après validation) transformé vos fichiers, en appliquant exactement le format que vous souhaitez qu'ils suivent.la source
.txt
extension. Il est préférable d'établir d'abord cela et de le tester sur un groupe spécifique, avant de généraliser à *, et d'ajouter une règle négative!*.xyz ...
pour exclure quelques fichiers de cette règle..gitattributes
lignes doivent se lire:*.txt text eol=lf
selon git-scm.com/docs/gitattributes.gitattributes
nous devons fairegit add --renormalize .
La bonne façon d'obtenir les terminaisons LF dans Windows est d'abord de définir
core.autocrlf
surfalse
:Vous devez le faire si vous utilisez msysgit, car il le définit
true
dans ses paramètres système.Maintenant, git ne fera aucune normalisation de fin de ligne. Si vous souhaitez que les fichiers que vous archivez soient normalisés, procédez comme suit: Définissez
text=auto
votre.gitattributes
pour tous les fichiers:Et réglé
core.eol
surlf
:Maintenant, vous pouvez également basculer un seul référentiel vers crlf (dans le répertoire de travail!) En exécutant
Une fois la configuration terminée, vous souhaiterez peut-être que git normalise tous les fichiers du référentiel . Pour ce faire, accédez à la racine de votre référentiel et exécutez ces commandes:
Si vous voulez maintenant que git normalise également les fichiers dans votre répertoire de travail , exécutez ces commandes:
la source
git diff --cached --name-only -z | xargs -0 git add
git diff --cached --name-only
?git clone --config core.autocrlf=false <repo path>
.Je reviens à cette réponse assez souvent, mais aucune de ces réponses ne me convient parfaitement. Cela dit, la bonne réponse pour moi est un mélange des autres.
Ce que je trouve fonctionne comme suit:
Pour les dépôts qui ont été extraits après que ces paramètres globaux ont été définis, tout sera extrait comme quoi que ce soit dans le dépôt - avec un peu de chance
LF
(\n
). ToutCRLF
sera converti en justeLF
lors de l'enregistrement.Avec un référentiel existant que vous avez déjà extrait - qui a les terminaisons de ligne correctes dans le référentiel mais pas votre copie de travail - vous pouvez exécuter les commandes suivantes pour le corriger:
Cela supprimera (
rm
) récursivement (r
) sans prompt (-f
), tous les fichiers sauf ceux que vous avez édités (--cached
), du répertoire actuel (.
). Lereset
retourne ensuite tous ces fichiers dans un état où ils ont leurs vraies fins de ligne (correspondant à ce qui est dans le référentiel).Si vous devez corriger les fins de ligne des fichiers dans un référentiel, je vous recommande de saisir un éditeur qui vous permettra de le faire en bloc comme IntelliJ ou Sublime Text, mais je suis sûr que tout bon supportera probablement cela.
la source
Notepad++
montre également la fin de la ligne du fichier ouvert dans le coin inférieur droit. Un clic droit sur ce champ vous permettra de modifier les fins de ligne.core.autocrlf input
option remplace lecore.eol
paramètre, donc le réglage des deux est redondant. (Voir git-scm.com/docs/git-config )Le contexte
Si vous
vous pouvez le faire à partir de git 2.10. La version 2.10 ou ultérieure est requise, car la version 2.10 a corrigé le comportement de text = auto avec eol = lf . Source .
Solution
Mettez un
.gitattributes
fichier à la racine de votre dépôt git ayant le contenu suivant:Engagez-le.
Ajustements facultatifs
Vous pouvez également ajouter un
.editorconfig
à la racine de votre référentiel pour vous assurer que les outils modernes créent de nouveaux fichiers avec les fins de ligne souhaitées.la source
core.autocrlf=input
est le bon réglage pour ce que vous voulez, mais vous devrez peut-être faire ungit update-index --refresh
et / ou ungit reset --hard
pour que le changement prenne effet.Avec
core.autocrlf
défini surinput
, git n'appliquera pas de conversion de nouvelle ligne au moment du départ (donc si vous avez LF dans le repo, vous obtiendrez LF), mais il s'assurera que si vous vous trompez et introduisez des CRLF dans le travail copier en quelque sorte, ils ne feront pas leur entrée dans le repo.la source
Vous pouvez trouver la solution à ce problème sur: https://help.github.com/en/github/using-git/configuring-git-to-handle-line-endings
Description simplifiée de la façon dont vous pouvez résoudre ce problème sur Windows:
Paramètres globaux pour les fins de ligne La commande git config core.autocrlf est utilisée pour modifier la façon dont Git gère les fins de ligne. Cela prend un seul argument.
Sous Windows, vous passez simplement fidèle à la configuration. Par exemple: C:> git config --global core.autocrlf true
Bonne chance, j'espère avoir aidé.
la source