我试图将两个分支上的代码与'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
您可以尝试在合并之前从每个分支中删除子模块,然后在合并之后添加子模块。 – 2009-07-29 01:20:52
我试过了,但不幸的是它不起作用,因为git会通过提交历史返回到子模块存在且无法删除的辅助祖先。 我最终通过将提交从一个分支提交到另一个分支来解决这个问题,但是故意跳过任何提交子模块的提交。 – meowsqueak 2009-07-29 07:21:31