74 votes

Quel est le moyen le plus simple de gérer les fichiers de configuration de projet?

Il est très fréquent d'avoir au moins un fichier de configuration dans n'importe quel projet. Chaque fois que je la partage du projet avec git, j'ai le même problème avec:

  • des informations sensibles (à chaque développeur d'avoir différentes DB mots de passe, etc)
  • la tâche spécifique de l'information (lorsque le développeur travaille sur certaines tâches où l'on doit changer certains paramètres)

Évidemment, les configs doivent être ignorés en quelque sorte à empêcher les développeurs de données spécifiques à l'inondation de dépôt principal. Maintenant, il y a plusieurs façons j'ai l'habitude d'utiliser, chacune avec quelques défauts:

  • .gitignore les fichiers de configuration
    • la façon la plus simple
    • lorsque développeur clones repo, config fichier est manquant et on doit trouver où les configs ont été les recréer
  • fichier config n'est pas ignoré. Il contient quelques mannequin info et chaque développeur untracks et le met à son .git/info/exclude ou un ensemble git update-index --assume-unchanged ... le fichier
    • les fichiers sont disponibles pour n'importe qui qui des clones repo
    • il contient des avancées techniques qui pourraient confondre les gens qui travaillent avec git pour la première fois
    • quand quelqu'un commet des fichiers de configuration par accident, il ne sera pas permettre à des personnes à tirer/fetch (exclut ne fonctionnent pas de la même façon que .gitignore)
  • distribuer des fichiers de configuration suffixé avec, par exemple, _original , tout en ayant les fichiers réels, en .gitignore. Chaque développeur puis renomme les fichiers de vrais noms
    • les fichiers sont disponibles pour n'importe qui qui des clones repo
    • l'un est à la recherche pour toutes les configs tout au long de l'application et de les renommer

Existe-il des autres, peut-être, de meilleures façons de gérer cela? Je pense que je suis absent quelque chose, certains plugin au moins.

22voto

VonC Points 414372

Les pilotes de filtre sont les "automatique" de la mise en œuvre de l'option 3, comme détaillé dans "quand vous avez la clé secrète dans votre projet, comment peut pousser à GitHub est-elle possible?":

enter image description here

L' smudge script, à la caisse:

  • détecter le droit des fichiers de configuration à modifier
  • aller chercher les informations nécessaires (le mieux gardé à l'extérieur d'un repo Git) et à remplacer les valeurs de modèle par le réel.

À partir de là, les développeurs peuvent faire toute sorte de modification qu'ils veulent ces fichiers de configuration.
Il n'a pas d'importance, parce que l' clean script, lors de la validation, de restaurer le contenu du fichier d'origine (modèle) de la valeur. Pas accidentel y poussent.

17voto

plague Points 1610

Lors du dernier projet sur lequel j'ai travaillé, nous avions utilisé un fichier de configuration principal qui chargeait un fichier de configuration local des utilisateurs s'il était présent, ce qui pourrait écraser les valeurs par défaut définies dans le maître s'il était spécifié et déclarer ses propres informations de configuration s'il n'était pas présent. en maître. Le fichier local a été ajouté à gitignore. De cette façon, tous les éléments courants pourraient être partagés et certaines configurations toujours présentes, et chaque développeur peut modifier son emplacement local.

6voto

Pascal Points 8222

Depuis il m'a fallu un certain temps pour trouver une solution de travail avec @VonC 's conseils, voici un exemple complet de la façon d'ignorer les mots de passe avec un git nettoyer le filtre dans un Objectif-C fichier d'en-tête.

  1. Supposons que vous disposez d'une configuration par défaut script nommé Config.h contenant cette

    // Change "12345" to your password
    #define kPass @"12345"
    #define kConstant 42
    
  2. Créer un script hidepass.sh qui correspond à la ligne critique(s) et imprime la ligne par défaut à la place

    #!/bin/sh
    awk '{ if (/#define kPass/) print "#define kPass @\"12345\""; else print $0; }'
    exit 0
    
  3. Rendre le script exécutable et l'ajouter à la repo

  4. Indiquer à git pour filtrer votre fichier de configuration en ajoutant cette ligne à l' .gitattributes (également ajouter .gitattributes à votre repo)

    Config.h filter=hidepass
    
  5. Indiquer à git d'utiliser l' hidepass.sh script pour le hidepass filtre lors du nettoyage:

    git config filter.hidepass.clean ./hidepass.sh
    

Voilà, vous pouvez maintenant modifier le mot de passe dans Config.h mais git de ne commettre ce changement parce qu'il remplace toujours cette ligne avec la ligne par défaut sur l'enregistrement.

C'est une solution rapide pour une ligne de mot de passe, vous pouvez vous rendre fou et, par exemple, la fin de lignes à ignorer avec une chaîne de caractères spéciaux et de vérifier les lignes de cette chaîne.

3voto

manojlds Points 96599

Dans les projets que j'ai été, nous avons une configuration par défaut, et les développeurs ont leur propre config à un endroit situé à l'extérieur de contrôle de version ( convention over configuration ) - les valeurs à partir de celles-ci sont utilisées pour remplacer celles de l'ancien.

Nous avons commencé à utiliser le cryptage pour les données sensibles dans la config: Manipulation des mots de passe dans la production de config pour le déploiement automatisé

En cas de git, vous pouvez regarder git attributes filter attribute de faire les deux le remplacement des valeurs locales et de décryptage des valeurs sensibles de façon automatisée.

Vous pouvez également avoir des submodules qui ont dire l' production.yml et avec un accès restreint au sous-module des pensions.

2voto

pthurmond Points 1436

Une chose à laquelle je pense est similaire à la méthode 2 et la méthode 1 ci-dessus. Lorsque vous avez un répertoire où vous stockez des choses complexes qui sont uniques sur le site comme des répertoires pour les fichiers de configuration, l'utilisateur de télécharger des fichiers, etc.

Vous gardez juste le fichier de configuration lui-même hors du contrôle de version, mais alors vous avez un mannequin copie qui est nommé de façon un peu différente de ce que le site utilise réellement et ce fichier contient des instructions détaillées sur la configuration des paramètres et de faire une copie renommée.

Par exemple, disons que vous avez un "site_profile" répertoire. Dans ce répertoire que vous créez un fichier appelé "README.settings.php" avec une "fichiers" répertoire qui contient de l'utilisateur de télécharger des fichiers (à partir de deux admin et front-end des utilisateurs). Tout cela est sous contrôle de version.

Cependant, le site fonctionnera de ses paramètres à partir d' "settings.php" qui n'existe pas ici. Mais si vous renommez le "README.settings.php" "settings.php" ensuite, vous avez le fichier de configuration dont vous avez besoin (après que vous mettez dans vos paramètres personnalisés de cours).

Cela vous permettra de dire aux autres développeurs de ce qu'ils ont besoin de leur fichier de configuration, tout en gardant votre propre fichier de config le mix. Il suffit de régler votre fichier de config pour être ignoré ou jamais de faire une couverture de s'engager pour ce répertoire et inférieur.

Ses ce que nous faisons avec Drupal sites où je travaille et il fonctionne vraiment bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X