4

質問

git のマージ プロセスにフックし、マージ時に次のマージ コンフリクトを自動的に解決するスクリプトを作成する方法はありますか?

シナリオ

git によってバージョン管理されたファイルがあります。このファイルには (とりわけ) 増分整数値を持つ必要がある定義が含まれています。

MY_CONSTANT = 0xB;
ANOTHER_CONSTANT = 0xC;

このファイルは複数の開発者が同時に編集することが多く、マージするのが面倒です:

開発者 1 は次のように追加します。

DEV1_CONSTANT = 0xD;

開発者 2 は次のように追加します。

DEV2_CONSTANT = 0xD;

マージすると、実際にはファイルが次のようになります。

MY_CONSTANT = 0xB;
ANOTHER_CONSTANT = 0xC;
DEV1_CONSTANT = 0xD;
DEV2_CONSTANT = 0xE;

(最後の行は0xEに変更されています。)

ただし、git は (予想どおり) マージの競合を生成します。代わりに、このファイルの競合を自動的に解決したいと考えています。

4

2 に答える 2

3

githookドキュメントを参照してください。post-mergeフックの説明を読んでください:

このフックは、競合によりマージが失敗した場合、git マージの結果に影響を与えることができず、実行されません。

gitの現在のバージョンでは、のようなものはありませんmerge-conflict-hook

ただし、独自のスクリプトを実装してこの問題を処理することはできます。擬似コードは次のようになります。

system('git fetch origin master')
status = system('git merge origin/master')
if status!=0 && check_enum_conflict()
  resolve_enum_conflict()
end

実際の実装は非常に複雑になります。必要がある:

  1. git コマンドを実行するスクリプトを作成します。
  2. マージの結果を確認します。enum ファイルが競合しているかどうかを確認します。
  3. enum ファイルを解析し、プログラムで競合を解決してみてください。
  4. 考えられるすべてのケースを処理します。元。他のファイルも競合する場合はどうなりますか?

これは非常に複雑な作業になります。価値があると思うならそうしてください。

于 2012-10-07T08:19:21.530 に答える
0

バージョン管理システムは、値がどこでも重要でないことを認識できないため、これらの競合を自動的に解決できません。

各定数が異なり、増加している限り、各定数にどの値が割り当てられているかは気にしないように思えます。これらの定数に列挙型を使用することを検討し、コンパイラがコンパイル時に列挙型定数の値を割り当てられるようにしましたか?

例を投稿したいのですが、使用しているプログラミング言語について言及していませんでした。

于 2012-10-05T11:37:23.933 に答える