異なるオフィスに複数のチームの開発者がいて、プロジェクトのweb.config
とapp.config
ファイルのいくつかの構成設定に異なる値が必要です。gitのweb.configとapp.configのマシン固有の設定
これらの設定ファイルをチェックしておくと、デフォルト値がわかります。trunk/masterブランチをチェックすると、設定ファイルを掘り下げる必要がなくなります。
歴史的には、Subversion、特にTortoiseSVNを使用しています。これにより、ローカルの変更を簡単に管理することができました。これらのファイルをTortoiseSVNの自動ignore-on-commit
チェンジリストに追加するだけです。これにより、これらのファイルが誤ってチェックインされるのを防ぐことができます。チェックイン時にそのファイルを指定する必要があります(ローカルの設定ノイズではなく、大幅な変更をチェックすることができます)。このアプローチの主な欠点は、設定ファイルが常に「変更された」ように見えるため、ローカルで変更があるかどうかを一目で知ることは不可能です。
私たちはGitに切り替えることを検討しています。私は最良の方法を見つけようとしています。
まず第一に、StackOverflowの他の回答であり、すでに何:
オプション1:xxx.sampleファイルにチェックして、実際の設定ファイルにを.gitignore:これはthis answerで、例えば、推奨されます。コミット者は.sample
ファイルに追加する必要がある変更を簡単に見逃す可能性があり、コンシューマ(特に継続的な統合サーバ)は簡単に変更できないことがあります.sample
ファイルからローカルの設定ファイルに組み込む必要がある変更がありません。基本的に、それは非常に良い解決策のようには見えません。
オプション2:持ってチェックインされたxxx.defaultsファイルとそれが定義する任意の設定を上書きします.gitignored xxx.local設定ファイル:これはアップ提供され、FRたとえば、here。私たちが標準の.Net設定プロバイダを使って作業しているという問題があります。Mirosoftが既にすべての作業を終えたときに、全く新しい設定ロードフレームワークを実装することは本当にありません。オプションのローカルオーバーライドファイルを参照するapp.configファイルとweb.configファイルを取得する方法を知っている人はいますか?
オプション3:開発者がローカルのブランチを維持しており、その後、彼らは常に、常にバイパス/地元の支店に不要なコミットを避けるために、マスターにチェリーピックやリベース支店にチェックインしている:これは可能性として提供されていますワークフローhereと、変更トラッキング(チェックインされたものすべて)の清潔さに感謝しますが、かなりの量のが必要です。すべてのチェックインには、オーバーヘッドが必要です。それは大きな痛みです!
オプション4:設定ファイルは、チェックインしましたが、それらは--assume-unchanged
が付いている:これは、可能なオプションhereとして提供されています。あなたがTortoiseSVNのチェンジリストignore-on-commit
と似ていますが、コミットプロセスでこれらの "隠された"変更されたファイルが表示されていないことを除けば、例えば、TortoiseGitは、ファイルに "変更された"アイコンオーバーレイを表示しますが、コミットダイアログではファイルはまったく表示されません。これはちょっと恐ろしいように思えますが、やはり変更を忘れてしまいます。
私が見つけたこれらすべてのオプションがあれば、チェックインされたapp.config/web.configファイルにローカルの設定ファイルをオプションで "含める"ことを望んでいますオプション2としてください。誰かがこれを行う方法、または私が行方不明の他のオプションを知っていますか? (私はかすかにカスタムXMLマージ前のビルドステップを検討するように誘惑されています...)
私は以前に説明したはずですが、私たちはまだVS2008にいるので、構成変換は利用できません。
UPDATE:(削除、平野間違っていた)
UPDATE 2:私は私の以前の更新との回答を削除した、それは愚かだった/動作しませんでした。私たちが "私たち"がマージした後、他の方向の次のマージがそれらのファイルの "元の"バージョンを戻す(ローカルブランチの変更を上書きする)ことはわかりませんでした。興味がある場合は編集履歴をご覧ください。この質問はこれまでどおりに開いています。
あなたはどのようなアプローチをとったのですか?ありがとう。 – Hewins
私たちは、数え切れないほど多くのフープを飛び越えずに共有できない内部ツールを構築しました。 「テンプレート」ファイル内のプレースホルダをサポートしているだけで、「最終」ファイルに変換されます。プレースホルダと値のマッピングは、チェックインされていない「デフォルト」のドキュメントとチェックインされていないローカルドキュメント(.gitignored)という単純なXmlドキュメントのペアに格納されます。テンプレートファイルはチェックインされますが、すべての出力ファイルは.gitignoredです。これは、 "矛盾の上書き"モード、または最終的な(例えばweb.config)ファイルを使用して対応するテンプレートを更新したい "矛盾の警告"モードで実行できます。 – Tao