web-dev-qa-db-fra.com

Comment désactiver la fin de ligne Git (CRLF à LF) sur tous les clones / machines?

Comme on peut glaner deautremessages , la normalisation de fin de ligne de Git a ses avantages et ses inconvénients. J'ai un projet Windows uniquement où je pense que la meilleure chose à faire est de désactiver complètement la normalisation de fin de ligne. C'est-à-dire que je veux laisser toutes les nouvelles lignes (dont la plupart sont CRLF) intactes, plutôt que de les faire normaliser à LF- uniquement dans les coulisses, et je veux que ce changement affecte tous clones du référentiel sur toutes les machines. La question est le moyen le plus efficace de le faire.

La plupart des discussions sur la normalisation de fin de ligne de Git portent sur core.autocrlf, et je pourrais atteindre mon objectif en définissant core.autocrlf=false. Cependant, c'est un paramètre git-config, et je pense qu'il faut le définir séparément sur chaque machine par machine. Si cela est vrai, cela semble sujet aux erreurs, d'autant plus que le programme d'installation msysgit guide l'utilisateur dans le paramétrage de core.autocrlf=true.

64
Chris

Le meilleur moyen d'éviter d'avoir à définir core.autocrlf séparément sur chaque machine semble vérifier un .gitattributes fichier dans le référentiel contenant la ligne unique

* -text

Ou, si vous avez une ancienne version de Git,

* -crlf

Cela indique à Git que, pour tous les chemins (donc le *), la normalisation de fin de ligne ne doit pas être tentée. Pour autant que je sache, cela ne devrait pas avoir d'autres effets secondaires. En particulier, il ne devrait pas modifier la façon dont les différences sont générées (cela a un attribut distinct diff/-diff) ou comment les fusions sont gérées (cela a un attribut distinct merge/-merge).

Pour plus de détails, je suggère ces ressources:

  1. La documentation de gitattributes (git help attributes ou ne copie en ligne ), qui décrit en détail à la fois le fonctionnement de la normalisation de fin de ligne et les effets particuliers des différents attributs. (Probablement les plus pertinents sont text, crlf, diff, merge et binary.)
  2. Git mailing list thread L'attribut "text" est-il destiné uniquement à spécifier le comportement de normalisation de fin de ligne, ou a-t-il des implications plus larges ? (30 mars 2012), qui développe la signification des différents attributs et précise que -text ne signifie pas simplement "ceci est un fichier binaire".
109
Chris