2009-07-29 22 views
2

2つのブランチのコードを 'git merge'コマンドで結合しようとしていますが、処理中にgitがクラッシュしています。私は、これらのブランチをマージする別の方法を見つける必要があります。私は走ったデバッグレベルに出力をマージ高めるためgit segfaults on merge - submodule conflict

 
    $ 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を実行している場合: 'のulimit -c無制限' と

$ 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; ls -l core; git merge origin/PH-RELEASE-146.0; ls -l core 
    ls: cannot access core: No such file or directory 
    Merging HEAD with origin/PH-RELEASE-146.0 
    ... 
    ... 
    Merge with strategy recursive failed. 
    -rw------- 1 user group 1589248 Jul 29 12:48 core 
  • 、.git/index.lockは残っているので、gitコマンドを再度実行する前に手動で削除する必要があります:

    $ git status 致命的な:「.git/index.lock」を作成できません:ファイルは、私は手動で上記gitkツリー内のものとコミットIDを比較することにより、マージを歩いてきました

存在します。 gitは共通の祖先を探していて、それぞれの祖先を再帰的に扱い、マージを分割していることは明らかです。 8dc84b6であることを意味しているe0a5fa1サブモジュールのビルドに

  • :しかし、私は問題が発生していると思いますが「建てる」と呼ばれるサブモジュールに「gitのリンクは、」コミットe0a5fa1とce62bf1の間で変化しているということです
  • ce62bf1におけるサブモジュールのビルドは、だから、明らかに矛盾があります

をb3efae4ことを意味しています。しかし、それは "部分的な"マージやそれが呼び出されたものではなく、最終的なマージではありません。そしてgitはこれを全くうまく処理していないようです。

これはおそらくバグです。バグレポートを提出するにはどうしたらいいですか?

私が本当に心配しているのは、私がこれらの2つのブランチをマージできないという事実です。誰かが 'merge'コマンドを使わずにこれらのブランチを一緒にする別の方法を知っていますか?マージ処理中にこのサブモジュールを完全に無視するために 'git-merge'を得ることはできますか?

のLinux gitのバージョン1.6.0.4

Cygwinのgitのバージョン1.6.1.2

+0

マージの前に各ブランチからサブモジュールを削除してから、サブモジュールをマージ後に追加してみることもできます。 –

+0

私はそれを試みましたが、残念ながらうまくいきません。gitはサブモジュールが存在し、削除できないセカンダリ祖先にコミット履歴を戻すためです。 私は最後に、チェリーで、あるブランチから別のブランチへのコミットを選んだが、意図的にサブモジュールを更新したコミットをスキップすることで解決しました。 – meowsqueak

+0

幸いにも私たちのサブモジュールは、コミットの変更なしに常に更新されます!私がこれをしたら、 "git merge -s resolve origin/PH-RELEASE-146.0"を使って2つのブランチをまとめてみました(マージコミットの唯一の違いは欠落していたサブモジュールでした) – meowsqueak

答えて

1

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

+0

はい、1.6.3.3にこの問題が発生していないことを確認できます。マージはサブモジュールとの競合を正しく識別しますが、正しくクラッシュするのではなく、マージを続行して他のファイルをインデックスに追加します。 – meowsqueak