2009-07-29 108 views
2

我試圖將兩個分支上的代碼與'git merge'命令組合,但git在此過程中崩潰。我需要找到合併這些分支的另一種方法。混合git segfaults - 子模塊衝突

爲了提高合併輸出到調試級別我跑:

 
    $ 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無限':
 
    $ 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」:文件已存在

我已經通過手動合併走到上面由提交的ID用在gitk樹上的那些比較。在我看來很清楚git正在尋找共同的祖先,並將合併分解成碎片,遞歸地處理每個祖先。但我認爲已經造成的問題是,「混帳鏈接」到一個名爲「打造」子模塊已提交e0a5fa1和ce62bf1之間切換:在e0a5fa1子模塊構建

  • ,就是要8dc84b6
  • 在ce62bf1子模塊構建
  • ,就是要b3efae4

所以,很顯然有衝突。但這是在「部分」合併或任何它所謂的衝突,而不是最後一個。而git似乎並沒有處理得很好。

好吧,所以可能有一個錯誤 - 我將如何去提交錯誤報告?

但是我真正關心的是這個事實,我不能合併這兩個分支。是否有人知道另一種方法將這些分支結合在一起而不使用「合併」命令?我可以在整個合併過程中以某種方式忽略此子模塊,從而獲得'git-merge'嗎?

Linux的Git版本1.6.0.4

Cygwin的Git版本1.6.1.2

+0

您可以嘗試在合併之前從每個分支中刪除子模塊,然後在合併之後添加子模塊。 – 2009-07-29 01:20:52

+0

我試過了,但不幸的是它不起作用,因爲git會通過提交歷史返回到子模塊存在且無法刪除的輔助祖先。 我最終通過將提交從一個分支提交到另一個分支來解決這個問題,但是故意跳過任何提交子模塊的提交。 – meowsqueak 2009-07-29 07:21:31

回答

1

在Linux上嘗試升級混帳,1.6.3.3是最新的,如果不幫助嘗試威廉的想法。