J'ai un dépôt Git auquel on accède à la fois depuis Windows et OS X, et je sais que certains fichiers contiennent déjà des fins de ligne CRLF. Pour autant que je sache, il y a deux façons de gérer ce problème :
-
Définir
core.autocrlf
afalse
partout, -
Suivez les instructions aquí (repris dans les pages d'aide de GitHub) pour convertir le référentiel afin qu'il ne contienne que des fins de lignes LF, et ensuite mettre
core.autocrlf
atrue
sur Windows etinput
sur OS X. Le problème, c'est que si j'ai des fichiers binaires dans le référentiel qui.. :- ne sont pas correctement marqués comme binaires dans gitattributes, et
- contiennent à la fois des CRLF et des LF,
ils seront corrompus. Il est possible que mon référentiel contienne de tels fichiers.
Alors pourquoi ne pas désactiver la conversion de fin de ligne de Git ? Il y a beaucoup d'avertissements vagues sur le web à propos de l'utilisation de la conversion de fin de ligne. core.autocrlf
éteint causant des problèmes, mais très peu spécifique Les seuls que j'ai trouvés jusqu'à présent sont que kdiff3 ne peut pas gérer les fins de CRLF (pas un problème pour moi), et que certains éditeurs de texte ont des problèmes de fin de ligne (également pas un problème pour moi).
Le référentiel est interne à mon entreprise, et je n'ai donc pas à me soucier de le partager avec des personnes ayant des paramètres d'autocrlf ou des exigences de fin de ligne différents.
Existe-t-il d'autres problèmes liés au fait de laisser les fins de ligne telles quelles, dont je ne suis pas conscient ?
2 votes
stackoverflow.com/questions/2333424/ aide ? J'ai un lien vers les raisons spécifiques du départ
autocrlf
à faux.3 votes
@VonC Merci, mais je suis déjà en mesure de dicter que tous les utilisateurs de l'entreprise mettent <code>autocrlf</code> à false et je pense actuellement que c'est la meilleure option. Mais je veux savoir s'il y a des raisons pour lesquelles je ne devrait pas faire cela, parce que je peux trouver qu'il y a beaucoup de gens (par exemple GitHub) qui disent que je autocrlf debe mais pas de précisions quant à la raison.
4 votes
@VonC c'est-à-dire que je ne cherche pas de raisons pour mettre en place
autocrlf
à false. Je cherche des raisons de le mettre à true.0 votes
Ok (j'ai été induit en erreur par la dernière question "laisser les fins de lignes telles quelles", qui est "
autocrlf
réglé surfalse
). J'ai rédigé une réponse pour commencer à traiter le problème inverse (fixé àtrue
), mais rien de très définitif pour l'instant.13 votes
Pourquoi ne pas utiliser
autocrlf = input
Il s'agit d'une résolution parfaite entre les deux extrêmes : vous gardez votre repo propre et sans CRLF, et les développeurs Windows locaux peuvent utiliser ce qu'ils veulent sans que leurs fichiers locaux ne soient automatiquement modifiés. (Ils peuvent vouloir LF localement pour diverses raisons, alorstrue
est mauvais, à mon avis). Je ne vois pas d'inconvénients à l'utilisation deautocrlf = input
.1 votes
@iconoclast,
autocrlf = input
faitstash --patch
échoue avec "Impossible de supprimer les modifications de l'arbre de travail".0 votes
@PiotrFindeisen : très intéressant. Il y a donc bien un inconvénient. J'ai l'impression que c'est un bogue, cependant. Est-ce qu'il échoue uniquement lorsque Git traduit les fins de lignes pour vous, ou est-ce qu'il siempre échouent si vous utilisez
autocrlf = input
?0 votes
@iconoclast, je n'ai pas testé cela de manière approfondie. Aujourd'hui, j'ai seulement constaté que je ne peux pas mettre en cachette tant que je n'ai pas supprimé les éléments suivants
autocrlf
paramètre. Le fichier problématique a été stocké avec CRLF dans le repo - peut-être est-ce une combinaison non supportée ?0 votes
@PiotrFindeisen : vous ne pouvez pas cacher du tout con
autocrlf = input
ou simplement avec--patch
?0 votes
Je n'ai pas vérifié. Je ne peux pas vivre sans
--stash
interrupteur.7 votes
@iconclast, une raison que j'ai rencontrée est si vous construisez des distributions qui incluent à la fois des fichiers batch Windows et des scripts shell Unix. Vous voulez utiliser la terminaison de ligne correcte dans chaque cas, et c'est plus difficile à faire si Git mélange les choses même après que vous les ayez explicitement définies dans un sens ou dans l'autre.
0 votes
Nb. l'article GitHub si souvent cité aide.github.com/articles/traiter les fins de ligne est en fait basé sur une réponse du SO - stackoverflow.com/questions/1510798/ - ce qui explique en partie cette confusion auto-perpétuée.
0 votes
Mec, ça doit totalement dépendre du cas d'utilisation. @iconoclast je pense la même chose que toi, et je soutiens la décision d'utiliser
input
toujours, pour que les utilisateurs de win n'aient pas à s'inquiéter, et pour qu'il soit nettoyé sur commit sur mon mac. il cause des problèmes binaires majeurs sans.