2015-01-16 2 views
3

Я пишу сценарий bash для выполнения некоторой автоматизации. Часть скрипта включает в себя переход на локальное репо, переход на локальную ведущую ветвь, а затем потянув удаленный мастер, чтобы обновить локальную ведущую ветвь с помощью последнего кода.Git: Определите, находится ли ветка в состоянии конфликта слиянием

Кто-нибудь знает, есть ли способ, который я могу программно определить, вызвало ли притяжение конфликт слияния, чтобы я мог поручиться в этой точке и не выполнить оставшуюся часть скрипта?

Любая помощь/информация оценена, спасибо!

+1

Использовать '--ff-only' для принудительного слияния' '' '' '' за ошибку, если они вызовут конфликт (или иначе не могут быть перепрограммированы слиянием)? –

+0

Does -ff-only вызывать ненулевой возврат, который я могу проверить? Я должен поймать его, чтобы я мог освободиться от сценария, а не просто слияния. –

+1

Вы проверили страницу руководства? '--ff-only Отказаться от слияния и выхода с ненулевым статусом ...' –

ответ

7

Использование git ls-files -u. Он распечатывает несвязанные файлы. Если он ничего не печатает, нет никаких несвязанных файлов.

Однако, в то время как это прямой ответ на вопрос, который вы просили «как просили», используя git pull в сценарии немного рискованный: pull является удобство скрипт, который запускает fetch для вас, а затем (в зависимости от того, как прямой он и/или настроил ваше репо) работает либо merge, либо rebase для вас. Учитывая, что вы пишете сценарий, который имеет конкретную цель, вы, скорее всего, будете использовать команды нижнего уровня, которые будут делать более конкретные вещи. Например, вы можете использовать git fetch, за которым следует (как пояснил в комментариях Etan Reisner) git merge --ff-only, чтобы never попытался слить.

+0

Для чего работает скрипт, я не хочу избегать слияния, если есть конфликт. Я хочу, чтобы слияние произошло, а затем определить, был ли конфликт с объединением. –

+0

ОК, в этом случае я бы предложил сделать «git fetch» ​​и прямое «git merge»; вы можете проверить статус выхода шага слияния. Он не выглядит хорошо документированным, и я не уверен, что метод 'ls-files -u' может быть более безопасным, но' git merge' фактически выходит из 0 без конфликтов, 1 в конфликтах. – torek

Смежные вопросы