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.