gitで環境別のコンフィグを管理するベストプラクティス
やりたいこと
- 接続系のコンフィグファイルを、ローカルで変更する(例えば"DB:localhost"とか)
- 当然commitには含めたくない
- だけどpullもされたくない
- でも、git管理はしたい(できればリモートには雛形かprodの状態で)
背景
- gitignoreすると、管理そのものがされなくなるので困る
- いちいちcommit/pullのときstashするのはめんどくさすぎるし、忘れた人がローカルをリモートにあげがち
- assume-unchangedすると、大元に変更があった時にconflictする
- なぜトーパルズは「gitignorelocal」を用意しなかったのか!
という問題に何度か遭遇して考えて自分の結論を出したので残しておく
(あとググってもそういう記事があんまりなかった)
答え
- 本来あるべき場所、正規パスのコンフィグファイルはgitignoreする
- このignoreはcommitに含めて各開発者が同様になるようにする
- config置き場を作り、そこにdev/stg/prodのファイルをおく
- デプロイの瞬間に対応するコンフィグを正規の場所に配置するようにする
- ローカル設定ファイルはそのまま自分の環境で正規のパスに置いておく
後書き
- もっといいやり方知っている人は教えてください
- 後からプロジェクトに参画したときはすでに開発者のコンフィグがcommitされている場合しかなかった
- トーパルズはいつも正しい。