Вопрос

Я пытаюсь объединить код в двух ветвях с помощью команды 'git merge', но git выходит из строя во время процесса.Мне нужно найти альтернативный способ объединить эти ветви.

Чтобы увеличить вывод слияния до уровня отладки, я запустил:

    $ 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.Откуда я это знаю?- при запуске git под Cygwin:

$ 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)
  • при запуске git под Linux с "ulimit -c unlimited":
    $ 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 фатальный:не удалось создать '.git/index.lock'.:Файл существует

Я вручную прошел через описанное выше слияние, сравнив идентификаторы фиксации с идентификаторами в дереве gitk.Мне кажется очевидным, что git ищет общих предков и разбивает слияние на части, рекурсивно обрабатывая каждого предка.Но то, что, я думаю, вызвало проблему, заключается в том, что "git-link" на подмодуль под названием "build" изменился между фиксациями e0a5fa1 и ce62bf1:

  • в e0a5fa1 сборка подмодуля должна быть 8dc84b6
  • в ce62bf1 сборка подмодуля должна быть b3efae4

Так что очевидно, что существует конфликт.Но это конфликт во время "частичного" слияния или как там это называется, а не окончательный.И git, похоже, вообще не очень хорошо справляется с этим.

Хорошо, так что, вероятно, это ошибка - как мне поступить с отправкой отчета об ошибке?

Но что меня действительно беспокоит здесь, так это тот факт, что я не могу объединить эти две ветви.Кто-нибудь знает альтернативный способ объединить эти ветви без использования команды 'merge'?Могу ли я заставить 'git-merge' каким-то образом полностью игнорировать этот подмодуль в течение всего процесса слияния?

Linux git версии 1.6.0.4

Cygwin git версия 1.6.1.2

Это было полезно?

Решение

Попробуйте обновить git на Linux, 1.6.3.3 является последней версией, если это не поможет, попробуйте идею Уильяма.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top