Как GitHub проверяет, могут ли две ветви быть автоматически объединены? - PullRequest
3 голосов
/ 16 сентября 2011

Я использую pygit2 (оболочка libgit2 для python) и перед созданием коммита слияния - т.е. коммитить с двумя родителями - я хотел бы сделать GitHub-подобную проверку пробного прогона, чтобы убедиться, что ветки действительно могут быть автоматически объединены.

Очевидный подход состоит в том, чтобы обойти все коммиты, начиная с точки ветвления, и построчно проверять наличие конфликтов. Но я думаю (надеюсь?) Может быть лучший подход.

1 Ответ

2 голосов
/ 08 ноября 2011

GitHub делает это, я полагаю, выполняя команду git merge some_branch и проверяя статус возврата; для конфликтующего слияния команда git merge возвращает 1.

$ git merge test1 
Auto-merging HELLO
CONFLICT (content): Merge conflict in HELLO
Automatic merge failed; fix conflicts and then commit the result.
$ echo $?
1

Сделайте это в одноразовой ветке, отталкивая то, что станет базой слияния.

Редактировать: Параметр merge.verbosity, установленный на «0», также может быть полезным (не уверен, как вы можете применить это к pygit без выделения):

Управляет количеством вывода, показанным стратегией рекурсивного слияния. Уровень 0 не выводит ничего, кроме окончательного сообщения об ошибке, если конфликты были обнаружено. Уровень 1 выводит только конфликты, 2 выводит конфликты и файл изменения. Уровень 5 и выше выводит отладочную информацию. По умолчанию уровень 2. Может быть переопределен средой GIT_MERGE_VERBOSITY переменная.

См. Раздел «Конфигурация» справочной страницы на git merge в http://linux.die.net/man/1/git-merge.

...