git 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.
На этом этапе rerere подготовил резолюции, которые он запомнил, и никакого реального конфликта не существует. я могу бежать git commit
, затем продолжите, но мой сценарий сбора-тестирования-сборки видит ошибку. Я пытался добавить --rerere-autoupdate
в команду git merge, но ничего не меняется. Я настроил репо для включения и автоматического применения повторных матчей.
Как я могу попросить 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
должен быть внутри$()
если вы не хотите выходить из своей оболочки (угадайте, откуда я это знаю:-))