バージョン管理下の構成ストレージ

次の状況があります。



プロジェクトにはsuper.configファイルがあります。 多くの異なるプロジェクト設定が含まれています。 たとえば、サードパーティのサービスとの対話の構成やログのレベル。 バージョン管理システム-git。



問題は何ですか:



  1. このファイルには「一般」設定が含まれているため、バージョン管理下にある必要があります。 さて、ファイル構造自体は貴重です。
  2. 各開発者は、必要に応じてロギングのレベルを変更しますが、これらの変更がコミットに陥るのを望まず、さらに統合リポジトリに陥ることを望みません。
  3. このファイルでは、一般的な設定が定期的に変更されており、開発者はそれらを受け取り( pull )、公開( commit )したい




可能な解決策:



  1. アプリケーションのソースコードとその構成を個別に保存します。 しかし、人生は痛みであり、常にできるとは限りません。 この理由は異なります:技術的なものから( 無能な人々 )管理者へ。
  2. 設定のダウンロードを試してください。 たとえば、バージョン管理下でdefault.super.configを保存し、 super.configを除外します 。 アプリケーションは最初にdefault.super.configからプロパティをロードし、次に、存在する場合はsuper.configからプロパティをロードする必要があります。 さらに、後者の値はデフォルトの値と重複しています。
  3. ローカル設定の変更をインデックスに追加しないでください。

    長所:

    • シンプル。
    • 設定への変更をコミットする必要がある場合、これは断片的に行われます( git add -p )。


    短所:

    • git addは実行しません
    • いくつかの変更を常に「迫ります」。 開発者は毎回それらを分析し、すべてがコミットされているかどうかを確認します。
    • 別の設定を使用したブランチへの切り替え( checkout )は、 -mスイッチまたはstashを介してのみ可能です( -fスイッチは作業コピーの変更を強制終了します)。
    • 構成の変更をプルすると、エラーが発生します。 変更を受け取る前に、ローカルの変更を棚に置く必要があります。


  4. バージョン管理から構成を除外します。

    動作しません。 バージョン管理から除外できるのは、追跡されていないファイルのみです。

  5. 構成ファイルが変更されないことをgitに確認してください。 方法:



    git update-index --assume-unchanged super.conf



    長所:

    • git add。 追加しすぎないでください。
    • 「純粋」ステータス。


    短所:

    • Gitは、別の設定でブランチに切り替えたり、設定の変更を受信またはコミットすることはできません。 同時に、コンソールのメッセージは誤解を招く可能性があります: git status「コミットするものがありません。作業ディレクトリはクリーンです」git pull「次のファイルへのローカル変更は...」 書き込みます

      この状況を解決するには、リバースコマンドgit update-index --no-assume-unchanged super.confで git eyesを開く必要があります。 とにかく、その後、棚を使用する必要があります。
    • git ls-files -vを使用して、 gitが目を閉じているものを確認できます。 grep -e "^ [hsmrck]" (そうではありませんが、それでも明らかです)。




私は何をしますか:



設定がめったに変更されない場合、 -assume-unchangedは適切なソリューションのように見えます。 そうでなければ、私は単に変更に注意を払っていなかっただろう。



一般に、設定を個別に保存する必要があります。



関連リソース






All Articles