Авто слияние на пульте, если нет конфликтов
Есть ли способ автоматически принять и объединить push, если нет конфликтов?
Я знаю, что это плохая практика, но я имею в виду особый случай, когда периферийные git-репо обновляются ботами
1 ответ
Есть ли способ автоматически принять и объединить push, если нет конфликтов?
Поток рассуждений должен быть обращен вспять - вы можете знать, что нет никаких конфликтов после попытки слияния. Объединение необходимо, когда локальные и удаленные деревья расходятся - и это расхождение обнаруживается на удаленном устройстве только после того, как вы попытаетесь протолкнуть, то есть после того, как вы перенесете свое локальное дерево на удаленное устройство. В этом случае для git на удаленной стороне было бы обычным отклонять push, чтобы позволить вам разобраться в различиях - вы находитесь в лучшем положении для этого на стороне клиента, а не на удаленной стороне.
Если вы уверены, что нет никаких конфликтов, вы можете довериться git pull
- он сливается с FETCH_HEAD в режиме по умолчанию. Например,
git pull --no-edit
git push
--no-edit
Опция не приветствуется, но позволит избежать выгрузки в редактор, принимая сообщение о слиянии по умолчанию. Вы можете использовать псевдонимы "две в одну", которые не будут выполнены, если слияние не будет успешно выполнено,
git config alias.merge-n-push '!f() { git pull --no-edit && git push; }; f'
Я не могу гарантировать, что в то время как я сделаю тянуть и слить, ничего не изменится на удаленном
Конечно, вы не можете, git - это распределенная система контроля версий, и такая гонка присуща и даже желательна. Подход, который каким-то образом блокирует пульт, пока он решает, что и как объединять, не будет идиотским. Вы должны просто толкать и тянуть и толкать, пока вы не добьетесь успеха. И на практике это редко является проблемой, так как в худшем случае вы можете попросить своих пиров подождать, пока вы закончите сложное объединение / пуш.
Тем не менее, вы можете несколько смягчить это, проверив пульт: Как узнать, что локальное репо отличается от удаленного репо без извлечения?