共通のマスターブランチと、各インストールに1つずつある多数の並列ブランチを持つWebアプリケーションを保守し、それぞれに特定の変更はほとんどありません。ソースコードはgitで管理されており、機能とバグ修正をmasterブランチからパラレルブランチに転送する必要がある場合に最適なツールです。しかし、機密性が高く、自動マージが通常悪い結果をもたらすファイルはほとんどありません。そのため、何らかの方法でマークを付けることができ、マージのたびに手動マージを必要とする競合が発生する場合、マージははるかに簡単になります。
私は答えを探しました:
edit:バリアント4.説明
オプション5のカスタムマージドライバーは、おそらく必要なものに最も近い方法です。驚くほど簡単です。以下は、あなたが望む行動にかなり近づけるべきだと思うものの例です。
まず、merge-and-verify-driver
という名前のマージドライバースクリプトを作成します。実行可能にし、適切な場所に配置します(リポジトリの構成ファイルは依存しているため、このスクリプトをリポジトリにチェックインすることを検討することをお勧めします)。 Gitはこのシェルスクリプトを実行して、機密ファイルのマージを実行します。
#!/bin/bash
git merge-file "${1}" "${2}" "${3}"
exit 1
これは、Git自体が通常行うデフォルトのマージ動作を行うだけです。主な違いは、スクリプトが常にゼロ以外を返すことです(マージが競合なしで実際に解決された場合でも、競合があったことを示します)。
次に、カスタムマージドライバーの存在をGitに伝える必要があります。リポジトリの設定ファイル(.git/config
)でこれを行います:
[merge "verify"]
name = merge and verify driver
driver = ./merge-and-verify-driver %A %O %B
この例では、merge-and-verify-driver
をリポジトリの最上位ディレクトリ(./
)に配置しました。それに応じて、スクリプトへのパスを指定する必要があります。
ここで、これらのファイルをマージするときにカスタムマージドライバーが使用されるように、機密ファイルに適切な属性を与える必要があります。これを.gitattributes
ファイルに追加します。
*.sensitive merge=verify
ここで、パターン*.sensitive
に一致する名前のファイルにはカスタムマージドライバーを使用する必要があることをGitに伝えました。明らかに、ファイルに適したパターンを使用する必要があります。
これらの2つのコマンドは、カスタムマージドライバーを使用するのと同じ効果があるようです。
git merge --no-commit your_target_branch
git checkout --conflict merge . (do not forget the . and run it in the top dir of the repository)
最初のコマンドはマージコミットの作成前にマージを停止し、2番目のコマンドは2つのブランチで変更されたすべてのファイルを競合としてマークし、元々競合がなかったとしても解決します。
注:この記事「 POファイルのgitマージドライバーの作成 」は、ファイルを手動でマージするときに実行できる操作の種類を示しています。手動マージで特定のデータ準備完了。
git merge-file
は、たとえば マージ前にファイルをDECRYPT(および再暗号化) (!)に使用できます
あなたの場合、0以外のステータスでマージドライバを終了すると、マージが手動のものになります。