2

「git merge」コマンドを使用して 2 つのブランチのコードを結合しようとしていますが、処理中に git がクラッシュします。これらのブランチをマージする別の方法を見つける必要があります。

マージ出力をデバッグ レベルまで上げるには、次のコマンドを実行しました。

    $ export GIT_MERGE_VERBOSITY=5

私は現在宛先ブランチにいます。git-status は、すべてがクリーンで明確に表示されます。ブランチをマージすると、これが表示されます (チェックイン コメントを %%%%%% に、ファイル名を ####### に置き換えました。これは、ビジネス上重要な場合があるためです)。

$ git merge origin/PH-RELEASE-146.0
Merging HEAD with origin/PH-RELEASE-146.0
Merging:
8399d82 %%%%%%
4f9dcfe %%%%%%
found 2 common ancestor(s):
e0a5fa1 %%%%%%
ce62bf1 %%%%%%
  Merging:
  e0a5fa1 %%%%%%
  ce62bf1 %%%%%%
  found 1 common ancestor(s):
  af34a07 %%%%%%
  Skipped ######## (merged same as existing)
  Removed ########
  Removed ########
  ...
  Removed ########
  Auto-merged build
  CONFLICT (submodule): Merge conflict in build - needs b3efae4855bc5eb83aa3167ce6c309a4503c3286
  There are unmerged index entries:
  1 build
  2 build
  3 build
Merge with strategy recursive failed.

この時点で、git-merge がクラッシュしたことが判明しました。どうすればこれを知ることができますか? - Cygwin で git を実行する場合:

$ git merge origin/PH-RELEASE-146.0

     11 [main] git 4352 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack)

Segmentation fault (core dumped)
  • Linux で git を実行する場合、「ulimit -c unlimited」を使用:
    $ ulimit -c 無制限; ls -l コア; git マージ元/PH-RELEASE-146.0; ls -l コア
    ls: コアにアクセスできません: そのようなファイルまたはディレクトリはありません
    HEAD と origin/PH-RELEASE-146.0 のマージ
    ...
    ...
    ストラテジー再帰とのマージに失敗しました。
    -rw------- 1 ユーザー グループ 1589248 7 月 29 日 12:48 コア
  • どちらの場合も、 .git/index.lock が残り、git コマンドが再び機能する前に手動で削除する必要があります。

    $ git status fatal: '.git/index.lock' を作成できません: ファイルが存在します

コミット ID を gitk ツリーの ID と比較して、上記のマージを手動で行いました。git が共通の祖先を探し、マージを分割して各祖先を再帰的に処理していることは明らかです。しかし、問題の原因は、コミット e0a5fa1 と ce62bf1 の間で「build」と呼ばれるサブモジュールへの「git-link」が変更されたことだと思います。

  • e0a5fa1 では、サブモジュールのビルドは 8dc84b6 になる予定です
  • ce62bf1 では、サブモジュールのビルドは b3efae4 になる予定です

したがって、明らかに競合があります。しかし、それは「部分的な」マージ中またはそれが呼ばれるものであり、最終的なものではありません。そして、gitはこれをうまく処理していないようです。

バグの可能性があります。バグ レポートを送信するにはどうすればよいですか?

しかし、ここで私が本当に心配しているのは、これら 2 つのブランチをマージできないという事実です。「マージ」コマンドを使用せずにこれらのブランチをまとめる別の方法を知っている人はいますか? マージプロセス全体でこのサブモジュールを完全に無視するように「git-merge」を取得できますか?

Linux git バージョン 1.6.0.4

Cygwin git バージョン 1.6.1.2

4

1 に答える 1

1

Linuxでgitをアップグレードしてみてください。それでもウィリアムのアイデアを試すのに役立たない場合は、1.6.3.3が最新です。

于 2009-07-29T01:57:54.853 に答える