config.php
ブランチごとに内容が異なると思われるものがあります。例:testing
とmaster
。
私は別の質問(マスターからのファイルをGitでマージしないようにする)で、このファイルがマージされないようにする方法を尋ねました。
しかし、私は疑問に思っています、これはそうするための正しい方法ですか?
これは、さまざまな環境でさまざまな構成ファイルを使用する非常に一般的なユースケースであり、構成を追跡したいのですが、そうですか?
config.php
ブランチごとに内容が異なると思われるものがあります。例:testing
とmaster
。
私は別の質問(マスターからのファイルをGitでマージしないようにする)で、このファイルがマージされないようにする方法を尋ねました。
しかし、私は疑問に思っています、これはそうするための正しい方法ですか?
これは、さまざまな環境でさまざまな構成ファイルを使用する非常に一般的なユースケースであり、構成を追跡したいのですが、そうですか?
構成ファイルの場合、1 つの解決策は、バージョンを設定しないことです (そうすれば、マージの問題は発生しません!)
コンテンツ フィルター ドライバーを使用します。
バージョン:
master
環境用)dev
環境用)@PORT_NUMBER@
含む)smudge
' スクリプトは、現在のブランチに基づいて、チェックアウトされたファイル(ここではテンプレート ファイル) の内容に基づいて、実際の構成ファイル ('プライベート' のまま、つまりバージョン管理されない) を生成できます。clean
' スクリプトは、プライベート構成ファイル内の値の変更を検出し、それらの変更された値を (バージョン管理された) 値ファイルに戻すことができます。これを行う古典的な方法は、config.yml-distというデフォルトの構成ファイルを用意することです (元のファイルがconfig.ymlと呼ばれているとしましょう) ; 元のファイルを .gitignore に追加し、distファイルのみをバージョン管理します。
アプリをデプロイしたり、プロジェクトを再クローンしたりした後、必要cp config.yml-dist config.yml
な設定を変更するだけです。
このメソッドは、私が PHP業界で出会った多くの人々によって使用されています。
しかし、私がもっと気に入っていて、よりクリーンだと思うものがあります。それは、環境変数を使用することです。例:
username: <%= ENV['MONGOID_USERNAME'] %>
password: <%= ENV['MONGOID_PASSWORD'] %>
database: <%= ENV['MONGOID_DATABASE'] %>
このようにして、1 つのバージョン管理された構成ファイルが作成され、1 つの構成ファイルを編集する必要がなくなります。
マスター ブランチにそのファイルを含めずに、ブランチにのみ含めることができます。これが最も簡単な方法です。
または、マスター構成がかなり安定していると仮定するか、そうでなければこれは大きな苦痛になるでしょう-config.php
各ブランチで変更をコミットし、変更を取得するときに常にリベースでプルしmaster
て、構成の変更が毎回再適用されるようにします。
すべての環境固有の構成ファイルをメイン リポジトリに保存しないのはなぜですか? 次に、ビルドまたは展開プロセス中に、関連する構成ファイルをすべて取得します。ビルド/展開ツールに応じて、さまざまな実装方法がありますが、どの方法でも、ブランチに配置するよりも優れていると思います。
私の意見では、構成ファイルをバージョン管理に保存し、展開ツールを使用して展開することを確実に望んでいるので、更新の不足や手動エラーが原因で古いバージョンがぶらぶらすることはありません.
通常、次のようなフォルダー構造が存在します
/configurations/test/properties/
/configurations/prod/properties/
展開ツールは、要求に応じて環境ごとにそれらを使用します。パスワードなどの機密情報は、ハッシュ化または暗号化することができます。ansible Vault などの技術は、これを直接サポートしています。