J'essaie de faire en sorte que git ne modifie aucune fin de ligne pour aucune opération. Malheureusement, il semble que ce soit le cas, peu importe quoi. Je l'ai réduit au cas de test suivant, qui a autant de mécanismes différents pour désactiver ce comportement que je pouvais trouver.
- Commencez par deux machines (ordinateur Windows = A, ordinateur Linux = B)
- Sur les deux machines:
git config --global core.autocrlf false
- Sur les deux machines:
git config --global core.eol crlf
(juste au cas où)
- Créez un nouveau référentiel sur A. À partir d'un dossier vide:
git init --shared
(puis affichez le.git
répertoire créé )- Créer un nouveau fichier
.gitignore
dans le référentiel - Créez un nouveau fichier
.gitattributes
dans le référentiel avec une seule ligne:* -text
git add .
, puisgit commit -m "initial commit"
pour contourner, par exemple ceci .git branch master_recv
- Ajouter des télécommandes
- Créer un nouveau fichier
document.txt
dans le référentiel contenant CRLF - Commit:,
git add -A
alorsgit commit -m "<something>"
- Notez que A
document.txt
contient toujours CRLF (et le supprimer et réinitialiser avec--hard
renvoie la version toujours avec CRLF)
- SCP tout le répertoire sur l'ordinateur B
- Ajouter un nouveau fichier
new file
contenant CRLF - Commit:,
git add -A
alorsgit commit -m "<something>"
- Notez que les B
document.txt
et les Bnew file
contiennent toujours CRLF
- Tirez le maître de B vers A:
git pull <remote> master:master_recv
- A
document.txt
est devenu LF. Le fichier ajouténew file
contient également LF.
Le problème ne se produit pas si B est une machine Windows.
core.autocrlf
toujours été faux? On dirait que vous avez déjà des\n
fins de ligne dans votre référentiel? Il n'y a aucun paramètre à modifier\n
dans votre référentiel\r\n
dans votre répertoire de travail.Réponses:
À l'intérieur de votre projet, il devrait y avoir un
.gitattributes
fichier. La plupart du temps, cela devrait ressembler à ci-dessous (ou à cette capture d'écran ):Passez
* text=auto
à* text=false
pour désactiver la gestion automatique (voir la capture d'écran ).Comme ça:
Si votre projet n'a pas de fichier .gitattributes, les fins de ligne sont définies par vos configurations git. Pour modifier vos configurations git, procédez comme suit:
Accédez au fichier de configuration dans ce répertoire:
1) C: \ ProgramData \ Git \ config
2) Ouvrez le fichier de configuration dans Notepad ++ (ou n'importe quel éditeur de texte que vous préférez)
3) Remplacez "autocrlf =" par false.
la source
* text=false
n'annule pas le texte: elle laisse le texte défini sur la valeur de chaîne false. Cela a le même effet que de laisser le texte non spécifié (pas spécifiquement non défini). Utiliser* -text
lui donne le paramètre spécial non défini. La désactivation de l'attribut text sur un chemin indique à git de ne pas tenter de conversion de fin de ligne lors de l'enregistrement ou du retrait.* text=false
n'a pas d'effet. Veuillez corriger la réponse!Une solution simple est:
git config --global core.autocrlf false
git add --renormalize .
S'il y a des conversions effectuées automatiquement, cela signifie qu'une
.gitattributes
core.eol
directive est présente dans le dépôt.Avec Git 2.8+ (mars 2016) , vérifiez s'il y a encore une transformation eol avec:
la source
autocrlf
AUJOURD'HUI! unsettedautocrlf
équivaut àfalse
. Vous êtes à la traîne des mouvements à la mode dans Git1.8.5.2
.Je l'ai compris. Il semble que le programme SCP convertissait les fins de ligne. J'ai remarqué cela lorsque j'ai essayé de créer délibérément un fichier avec des fins LF, puis en observant qu'il apparaissait en tant que CRLF lors du téléchargement.
Puisque c'était la solution pour moi, j'accepte cette réponse, mais les gens du futur devraient également se référer aux autres réponses pour une solution plus générale.
la source
De la page de manuel gitattributes (5) Sujet "Effets"
core.autocrlf
dans le nouveau (1.7.2+) Git non utilisé,core.eol
et réglage correct | désactivation de l'attribut texte considéré comme un moyen plus fiablela source
.gitattributes
fichier, j'avais cependant tout désactivé explicitement sous forme de texte, non? De plus, je ne le vois pas avec une option pour qu'il ne fasse pas de conversion (bien que celacrlf
puisse n'avoir aucun effet)?text
et empêcher toute conversion, vous devez définir .gitattributes sur* -text
et non sur* text=false
.false
n'est pas une valeur valide pour l'text
attribut - git ne le reconnaîtra pas et reviendra à son paramètre autocrlf par défaut à la place. De plus, après avoir modifié latext
valeur, vous devez sauvegarder tous les fichiers de votre dépôt local, effectuer une validation, puis restaurer les fichiers avec la fin de ligne correcte selon vos besoins, et les valider à nouveau. Ensuite, votre fin de ligne ne sera plus jamais modifiée par git.