J'ai lu beaucoup de questions et de réponses différentes sur Stack Overflow ainsi que sur git la documentation sur la façon dont le core.autocrlf les travaux d'aménagement.
C'est ce que je comprends d'après ce que j'ai lu :
Les clients Unix et Mac OSX (les clients pré-OSX utilisent CR) utilisent des fins de ligne LF.
Les clients Windows utilisent des fins de ligne CRLF.
Lorsque core.autocrlf est défini à true sur le client, le dépôt git stocke toujours les fichiers au format de terminaison de ligne LF et les terminaisons de ligne dans les fichiers sur le client sont converties dans les deux sens lors du check out / commit pour les clients (c'est-à-dire Windows) qui utilisent des terminaisons de ligne non-LF, quel que soit le format des fichiers de terminaisons de ligne sur le client (ceci est en désaccord avec la définition de Tim Clem - voir la mise à jour ci-dessous).
Voici une matrice qui tente de documenter la même chose pour les paramètres 'input' et 'false' de core.autocrlf avec des points d'interrogation lorsque je ne suis pas sûr du comportement de conversion des fins de lignes.
Mes questions sont les suivantes :
- Que doivent être les points d'interrogation ?
- Cette matrice est-elle correcte pour les "points de non-question" ?
Je mettrai à jour les points d'interrogation des réponses au fur et à mesure qu'un consensus semble se former.
core.autocrlf value
true input false
----------------------------------------------------------
commit | convert ? ?
new | to LF (convert to LF?) (no conversion?)
commit | convert to ? no
existing | LF (convert to LF?) conversion
checkout | convert to ? no
existing | CRLF (no conversion?) conversion
Je ne cherche pas vraiment à obtenir des avis sur les avantages et les inconvénients des différents réglages. Je cherche simplement des données qui permettent de comprendre comment git doit fonctionner avec chacun de ces trois paramètres.
--
Mise à jour du 17 avril 2012 : Après avoir lu l'article de Tim Clem lié par JJD dans les commentaires, j'ai modifié certaines des valeurs dans les valeurs "inconnues" dans le tableau ci-dessus, ainsi que le changement de "checkout existing | true" pour convertir en CRLF au lieu de convertir en client". Voici les définitions qu'il donne, qui sont plus claires que tout ce que j'ai vu ailleurs :
core.autocrlf = false
Il s'agit de la valeur par défaut, mais la plupart des gens sont encouragés à la modifier. immédiatement. Le résultat de l'utilisation de false est que Git ne s'embarrasse jamais avec les fins de ligne de votre fichier. Vous pouvez archiver des fichiers avec LF ou CRLF ou CR ou un mélange aléatoire de ces trois éléments et Git ne s'en soucie pas. Ce Cela peut rendre les diffs plus difficiles à lire et les merges plus difficiles. La plupart des personnes La plupart des personnes travaillant dans le monde Unix/Linux utilisent cette valeur parce qu'elles problèmes de CRLF et n'ont pas besoin que Git fasse du travail supplémentaire à chaque fois que des fichiers sont écrits dans la base de données des objets ou dans le répertoire de travail.
core.autocrlf = true
Cela signifie que Git traitera tous les fichiers textes et s'assurera que les CRLF est remplacé par LF lors de l'écriture de ce fichier dans la base de données objet et transformera tous les LF en CRLF lors de l'écriture dans le répertoire de travail de travail. C'est la configuration recommandée sous Windows car elle garantit que votre référentiel peut être utilisé sur d'autres plates-formes tout en tout en conservant CRLF dans votre répertoire de travail.
core.autocrlf = entrée
Cela signifie que Git traitera tous les fichiers texte et s'assurera que les fichiers CRLF soit remplacé par LF lors de l'écriture de ce fichier dans la base de données d'objets. En revanche, il ne fera pas l'inverse. Lorsque vous lisez des fichiers de la base de données des objets et que vous les écrivez dans le répertoire de travail ils auront toujours des LF pour indiquer la fin de la ligne. Ceci Ce paramètre est généralement utilisé sur Unix/Linux/OS X pour empêcher les CRLFs d'être d'être écrits dans le référentiel. L'idée étant que si vous collez code depuis un navigateur web et que vous avez accidentellement mis des CRLFs dans un de vos fichiers, Git s'assurerait qu'ils soient remplacés par des LF lorsque vous écrivez dans la base de données objet.
L'article de Tim est excellent, la seule chose qui me semble manquer est qu'il suppose que le référentiel est au format LF, ce qui n'est pas forcément vrai, surtout pour les projets uniquement Windows.
En comparant l'article de Tim à celui qui a été le plus voté réponse à ce jour par jmlane montre un accord parfait sur les paramètres vrai et entrée et un désaccord sur le paramètre faux.
10 votes
En gardant
autocrlf
à faux semble tellement plus facile ;) stackoverflow.com/questions/2333424/0 votes
@VonC : J'ai lu ça et je pense le comprendre, mais je n'ai pas forcément le choix. Je travaille avec des dépôts git que je ne contrôle pas et qui exigent que je définisse la valeur d'une certaine manière.
0 votes
@Michael : et, selon la version du serveur Git, les règles concernant eol et autocrlf sont sur le point de changer dans la prochaine version 1.7.2 ! Voir article.gmane.org/gmane.linux.kernel/1007412
7 votes
Ce ne serait pas bien si Windows se normalisait en BF aussi ? Mac avait l'habitude d'être CR (avant la v10) mais est maintenant normalisé en LF.
5 votes
Je dois ajouter un lien vers l'excellent article de Timothy Clem - veuillez lire l'intégralité de Attention à l'extrémité de votre ligne .
2 votes
Scénario : Je suis un développeur mixte Linux/Windows. Je n'utilise que des éditeurs de texte capables de reconnaître les deux types de fin de ligne (vim, eclipse, etc.). J'ai seulement besoin (envie) de travailler avec des fichiers se terminant par LF. J'ai actuellement défini core.autocrlf=input dans ma configuration globale de git. Est-ce que je peux y aller ? Aurai-je un jour un conflit ?
1 votes
Il semble également aquí