Git rerere не выполняет автоматическое согласование разрешенных слияний
Я пытаюсь использовать общий кеш rerere для автоматизации отложенных интеграционных/тестовых ветвей.
Идея заключается в том, что кеш-ререйер должен быть обновлен, когда ветвь будет нажата, чтобы эти слияния всегда проходили. Однако они не делают:
>>> git merge --no-ff invoicing
Staged 'analysisrequest.py' using previous resolution.
Staged '__init__.py' using previous resolution.
Auto-merging __init__.py
CONFLICT (content): Merge conflict in __init__.py
Auto-merging analysisrequest.py
CONFLICT (content): Merge conflict in analysisrequest.py
Automatic merge failed; fix conflicts and then commit the result.
В этот момент ререр поставил резолюции, которые он помнил, и никаких реальных конфликтов не существует. Я могу запустить git commit
, а затем продолжить, но моя интеграция-test-build script видит ошибку. Я попытался добавить --rerere-autoupdate
в команду git merge, но ничего не меняется. Я настроил репо для включения и автоматического применения совпадений reerere.
Как я могу попросить git merge использовать мои предыдущие разрешения и продолжать без сбоев, если они достаточны?
Ответы
Ответ 1
Даже с флагом --rerere-autoupdate
git merge
, похоже, неохотно автоматически завершает слияние без какого-либо человеческого ввода. В этом случае он выполняется со статусом ошибки, и ваш инструмент интеграции отказывается продолжать.
Я не знаю, как происходит автоматическое слияние, а именно, если вы можете изменить команду git, которая выполняется. Если вы можете, вы можете выполнить следующие команды.
git merge --no-ff branch-to-merge --rerere-autoupdate
if [[ $(git rerere diff) ]]
then
git commit --no-edit
else
$(exit 1)
fi
-
git rerere diff
файлы списка, которые необходимо разрешить после rerere
-
--no-edit
необходимо предотвратить открытие редактора сообщений фиксации
- В случае, если
rerere
не смог полностью слить все изменения, этот оператор все равно будет выполняться со статусом ошибки, и слияние не будет выполнено.
- Сообщение о фиксации по-прежнему будет содержать конфликтующие файлы
-
exit 1
должен находиться внутри $()
, если вы не хотите выйти из своей оболочки (угадайте, как я знаю это: -))