2009-07-29 112 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是最新的,如果不帮助尝试威廉的想法。