2017-07-15 7 views
2

私はconfig.yamlファイルを含むモジュール名configのpythonプロジェクトAを持っています。 このプロジェクトは、必要に応じてconfig.yamlを使用して更新するためのテンプレートとして使用されます。 これらのユーザーに私のgitプロジェクトをフォークしてフォーク上で更新させ、利用可能な場合にはそのテンプレートを更新できるようにします。 しかし、私はマスタープロジェクトからフォークに変更をプルするときにconfigファイルを上書きしたくありません。 これを解決するには?gitでpythonプロジェクトをどのように整理するのですか?

My_app 
    MyConfigModule 
    __init__.py 
    config_helper.py 
    config.yaml 
    myAppModule 
    __init__.py 
    myModule.py 
+0

答えをhttps://stackoverflow.com/a/45114943/7976758 – phd

答えて

0

まず、コードと構成を分けます。コード全体はMy_appにあり、開発者だけがユーザーに触れてはいけませんが、構成はルートディレクトリに置くことができます。

あなたがデフォルトと実際の構成を分離する方法、複数のオプションがあります。

は、デフォルトの設定を持っており、ユーザーは自分のローカル設定を設定することができます。ユーザーはconfig.yamlファイルを作成する必要があります。たとえば、bash(および他の多くのプログラム)は、設定を/etc/bash.bashrcから読み込み、~/.bashrcから更新を取得します。このアプローチの欠点は、構成のマージメカニズムを実装する必要があることです。設定の一部がかなり静的/複雑(プログラム設定や変換ルールなど)しているが、別の部分を上書きする必要がある(ユーザ名/電子メールアドレス)場合は、これが良い考えです。

コピーconfig.default.yamlconfig.yamlをユーザに要求する。プログラムのインストール時またはconfig.yamlが存在しないときの実行時には、コピー方法の説明でエラーをスローするか、デフォルト設定に戻すか、またはデフォルト設定をconfig.yamlにコピーしてから続行することができます。デフォルトの設定には多くの文書を入れることができますが、欠点は長い設定ファイルになります。たとえば、php's default configurationは2000行です。

最も重要な(またはすべての)設定オプションをユーザにプロンプ​​トし、debianのdebconfのような小さな設定ファイルを作成します。プログラムにインタラクティブなUIがある場合は、これが良い考えです。


あなたは最も重要なオプションをユーザーに要求し、デフォルトの設定に依存している、またはユーザーを促すメッセージが表示されたあとわずかな変更で、長いデフォルトの設定をコピーたとえば、これらのオプションを混在させることができます。

これらのすべてのケースでは、gitignoreconfig.yamlを含める必要があります。チェックインしないでください。デフォルトの設定ファイルは、手動でコピーすると思われる場合はリポジトリの最上位に配置する必要があります。

+0

から見る私はconfig.sample.yamlのアイデアが好きであり、ユーザーにconfig.yamlとしてコピーを作成させることを強く勧めます。 –

関連する問題