web-dev-qa-db-fra.com

Recommandation définitive pour les paramètres git autocrlf

J'utilise Windows, Mac OS X et linux au quotidien. J'utilise git dans tous ces environnements, en tirant des dépôts qui sont utilisés par des gens avec des choix différents pour les fins de ligne.

Existe-t-il une recommandation définitive pour définir core.autocrlf dans ma situation?

46
rbellamy

Je recommanderais, comme je l'ai fait dans ce SO question , de le mettre à faux.

Si vous pouvez éviter de modifier un eol (avec votre éditeur), il serait préférable de repousser votre travail avec ces eol inchangés (c'est-à-dire "tels que vous les avez trouvés").

35
VonC

Un problème qui n'est souvent pas mentionné dans ces discussions: si vous développez des scripts Shell sur Windows (par exemple, dans cygwin) et les validez avec CRLF (autocrlf = false), ils se bloqueront sur les boîtes * nix avec des messages d'erreur inutiles. (Il peut y avoir des cas similaires avec d'autres langages de script.) Après vous être gratté la tête pendant une demi-heure, vous vous souviendrez, puis dos2unix les petits coquins. Si vous travaillez dans un environnement mixte (par exemple, le déploiement de Windows vers un serveur Linux) et que vous souhaitez absolument définir autocrlf sur false, assurez-vous que tous vos éditeurs Windows utilisent des fins de ligne unix (lf). Sinon, définissez autocrlf pour entrer (et prier). La plupart des programmes Windows du 21e siècle sont confortables sans les imprimantes CR du début des années 1980, c'est donc une bonne idée de définir vos fins de ligne sur LF (unix) de toute façon.

15
John Broglio

GIT n'aurait PAS de SHA1 communs pour deux fichiers texte avec identique texte mais différent mécanismes de fin de ligne (EOL) à l'intérieur de la représentation binaire. Le contenu est stocké sous forme de blob, qui est réutilisé si une autre copie identique est déposée dans le repositionnement (gain de place!)

Le choix par défaut (des) GIT (concepteurs) est d'utiliser le caractère EOL de style * nix (LF uniquement) chaque fois que possible, de sorte que pour le même texte conten vous obtenez le même SHA1. (probablement une considération importante ;-)

Parce que le contenu/blob ne se souvient plus du choix EOL d'origine de l'utilisateur (rappelez-vous qu'il est peut-être maintenant dans un référentiel distant), Git doit faire quelques suppositions (en fonction des options) sur la façon de recréer le fichier de l'utilisateur d'origine (était-ce CRLF ou était-ce simplement LF) d'une manière que vous (et vos outils) pouvez utiliser.

La recommandation normale est que chaque utilisateur localement (a) convertit en * nix LF terminaisons lors de la validation dans un blob (donc tous verront les noms de blob SHA1 communs)) (a/k/a la bonne chose ) et (b) définissez localement l'option de recréation sur leur configuration système locale, par exemple * nix (LF) ou Windows (CRLF), etc.

Définissez des normes locales pour vos utilisateurs et ayez le seul grand "EOL/LF/CRLF & Whitespace Correction commit", et tout ira bien (ainsi que la formation de recyclage des nouveaux utilisateurs)

Vous pouvez également vous assurer que vous (chaque utilisateur) utilisez un paramètre de réglage d'espace blanc commun afin que les tabulations v espaces et les espaces blancs de fin ne causent pas plus d'inconvénients diff!

13
Philip Oakley