ошибки git при слиянии - конфликт подмодулей
-
20-09-2019 - |
Вопрос
Я пытаюсь объединить код в двух ветвях с помощью команды '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 является последней версией, если это не поможет, попробуйте идею Уильяма.