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 должен быть внутри $() если вы не хотите выходить из своей оболочки (угадайте, откуда я это знаю:-))
Другие вопросы по тегам