Les meilleures pratiques pour git config multi-plateforme?
-
22-09-2019 - |
Question
Contexte
Un certain nombre de mes applications les fichiers de configuration de l'utilisateur sont conservés dans un dépôt git pour faciliter le partage entre plusieurs machines et de multiples plates-formes. Parmi ces fichiers de configuration est .gitconfig
qui contient les paramètres suivants pour la manipulation des caractères retour chariot de saut de ligne
[core]
autocrlf = true
safecrlf = false
Problème
Ces paramètres obtient également appliqués sur une plate-forme GNU / Linux qui provoque des erreurs obscures.
Question
Quelles sont les meilleures pratiques pour le traitement de ces différences spécifiques de la plate-forme dans les fichiers de configuration?
Solution proposée
Je me rends compte ce problème pourrait être résolu en ayant une branche pour chaque plate-forme et de garder les choses communes dans le maître et la fusion avec la branche de la plate-forme lorsque maître se déplace vers l'avant. Je me demande s'il y a des plus facile solutions à ce problème?
La solution
J'ai examiné ce genre de paramètre de configuration (crlf
) largement dans la question:
distribution configuration git avec le code .
La conclusion était:
- / vérification .gitattributes fichiers
- liste de tous les types qui ont besoin explicitement ce genre de conversion.
Par exemple:
*.java +crlf *.txt +crlf ...
- éviter de faire toute sorte de conversion de type de fichiers qui ne ont pas besoin, en raison de divers effet secondaire d'une telle conversion sur les fusions,
git status
, environnement shell etsvn import
(voir « distributing configuration git avec le code » pour les liens et les références). - éviter toute conversion de
crlf
tout à fait si vous le pouvez.
Maintenant, en ce qui concerne la question spécifique de Paramètres par plates-formes , la branche n'est pas toujours l'outil, en particulier pour les données non liées au programme (c.-à-; ces paramètres ne sont pas liés à ce que vous développez , pour le stockage VCS l'histoire de votre développement)
Comme indiqué dans la question Git: Comment entretenir deux branches d'un projet et fusionner des données partagées uniquement :
votre vie sera beaucoup plus simple si vous mettez le code dépendant du système dans des répertoires différents et de traiter avec les dépendances inter-plate-forme dans le système de construction (Makefile ou tout ce que vous utilisez).
Dans ce cas, alors que les branches pourraient être utilisé pour le code dépendant du système, je recommande le répertoire des outils d'aide à paramètres dépendant du système, avec un script capable de construire le fichier .gitattributes
approprié d'appliquer le bon réglage en fonction du déploiement repo la plate-forme.
Autres conseils
Ne jamais tourner autocrlf
sur, il provoque rien d'autre que des maux de tête et douleurs.
Il n'y a aucune excuse à utiliser \r\n
sur les fenêtres, tous les éditeurs décents (par définition) peut gérer \n
.
Je pense que vous devriez avoir le .gitconfig dépendent du système d'exploitation, l'utilisateur utilise. Les utilisateurs de Windows ne ont pas besoin autocrlf du tout alors que les utilisateurs de Linux font. Par exemple. enregistrer les fichiers texte avec CRLF et Git convertir les fichiers automatiquement et en arrière pour les utilisateurs de Linux.
Vous pouvez également consulter .gitattributes , qui vous permet de définir quels fichiers sont convertis et qui ne sont pas. Si vous avez les fichiers de configuration dans un seul endroit, vous pouvez définir que la conversion ne se fait dans ce répertoire juste pour être du bon côté.