2017-11-28 16 views
0

特定のレイアウトのテキストファイルの種類のカスタムマージドライバがあります。 (これは基本的にgit-merge-changelogと同じ問題を解決します:物事が同じ場所に追加されたとき、それらを置く順序を決めるルールがあります)Gitカスタムマージドライバを組み込みドライバに置き換えます

このマージドライバは経験則に基づいており、複雑すぎる。失敗したら、gitのデフォルトのテキストファイルの処理に戻りたいと思います。

私は.gitattributesを設定している:

myfile merge=my-driver 

.gitconfig

[merge "my-driver"] 
    name = My merge driver for myfile 
    driver = my-merge-driver %O %A %B 

私のカスタムドライバは競合を解決することができますマージするときこれが細かいです。ドライバプログラムが競合を解決できないときは、0以外のコードを返し、%Aは変更しません。これによりgitは矛盾を報告しますが、現在のバージョンのファイルをそのまま残します。代わりに、gitに組み込みのテキストマージドライバを実行させます。

カスタムマージドライバはどのように使用できますか?失敗した場合は、組み込みドライバをフォールバックとして使用しますか? (少なくとも、「通常」の双方向マージ用)

答えて

0

部分的な解決策:

driver = my-merge-driver %O %A %B || git-merge-file -q --marker-size=%L %A %O %B 

これは、テキストのマージを行い、衝突マーカを生成することで動作します。残念なことに、競合マーカーにはブランチ名の代わりに一時ファイル名(<<<<<<< .merge_file_xxxxxx)があります。私はブランチ名を持つことを好むでしょう。

これは、How to retrieve branch names in a custom Git merge driver?(現在未回答)と同じ方法で解決される可能性があります。

+0

これは正しい方法です。これは文書化されておらず、タコのマージを実行している場合は落とし穴があります。なぜなら、それぞれの頭に1つずつ、複数の環境変数が存在するからです。他の質問にも私は答えます。 – torek

関連する問題