2

我正在尝试将两个分支上的代码与“git merge”命令结合起来,但 git 在此过程中崩溃了。我需要找到一种替代方法来合并这些分支。

为了将合并输出增加到调试级别,我运行了:

    $ 出口 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 下使用 'ulimit -c unlimited' 运行 git 时:
    $ ulimit -c 无限;ls -l 核心;git 合并原点/PH-RELEASE-146.0;ls -l 核心
    ls:无法访问核心:没有这样的文件或目录
    将 HEAD 与 origin/PH-RELEASE-146.0 合并
    ...
    ...
    与策略递归合并失败。
    -rw------- 1 个用户组 1589248 Jul 29 12:48 core
  • 在这两种情况下, .git/index.lock 仍然存在,并且必须在任何 git 命令再次起作用之前手动删除:

    $ git status fatal: 无法创建 '.git/index.lock': 文件存在

我通过将提交 ID 与 gitk 树中的提交 ID 进行比较,手动完成了上述合并。我似乎很清楚 git 正在寻找共同的祖先并将合并分解成碎片,递归地处理每个祖先。但我认为导致问题的是“git-link”到名为“build”的子模块在提交 e0a5fa1 和 ce62bf1 之间发生了变化:

  • 在 e0a5fa1 中,子模块构建是 8dc84b6
  • 在 ce62bf1 中,子模块构建是 b3efae4

所以很明显有冲突。但这是“部分”合并或任何所谓的冲突期间的冲突,而不是最终的冲突。而 git 似乎根本不能很好地处理这个问题。

好的,所以可能有一个错误 - 我将如何提交错误报告?

但我在这里真正关心的是我无法合并这两个分支。有谁知道不使用“合并”命令将这些分支组合在一起的另一种方法?我可以让'git-merge'在整个合并过程中以某种方式完全忽略这个子模块吗?

Linux git 版本 1.6.0.4

Cygwin git 版本 1.6.1.2

4

1 回答 1

1

尝试在 linux 上升级 git,1.6.3.3 是最新的,如果这对尝试 William 的想法没有帮助。

于 2009-07-29T01:57:54.853 回答