Как проверить, действительно ли git merge произвело слияние в bash-скрипте с несколькими репо - PullRequest
0 голосов
/ 05 декабря 2018

Итак, я делаю скрипт, который выбирает последний тег из основного удаленного репозитория и объединяет его с моими локальными репозиториями с моими пользовательскими изменениями (примерно 10-20 репо) в одном скрипте.Часть слияния выглядит примерно так:

git fetch -q https://android.googlesource.com/platform/$REPO_PATH $TAG
git merge -q --no-ff FETCH_HEAD
if [ $? -eq 0 ]; then
    echo -e "$REPO_PATH merged succesfully"
else
    echo -e "\n$REPO_PATH has merge conflict(s)\n"
fi

Суть в том, что я хочу знать, какие все коммиты успешно слились (и нужно нажать на мой пользовательский git).Но иногда репозитории уже обновлены (т. Е. Новый тег в удаленном репо без каких-либо новых коммитов), и в этом случае отображается сообщение «успешно слит», хотя на самом деле ничего не было слито.

Я только хочу знать, какие репозитории подверглись слиянию, и их нужно отправить в мой мерзавец, а также узнать, какие из них имеют конфликты слияния (хотя в моем сценарии это прекрасно работает).Все, что я заметил, это то, что когда git выполняет реальное слияние, он открывает nano, запрашивая сообщение commit.Но я понятия не имею, как обнаружить слияния, используя это.Заранее спасибо.

1 Ответ

0 голосов
/ 05 декабря 2018

Перед началом слияния сохраните хэш текущего заголовка ветви:

git rev-parse HEAD

Затем проверьте снова после запуска команды слияния, если они одинаковые, слияние не удалось завершить.

Вы также можете определить статус, проверив код состояния:

  | Match      | No Match                    |
  --------------------------------------------
0 | Up to Date | Merged                      |
  --------------------------------------------
1 | Conflict   | Something is horribly wrong |
  --------------------------------------------
...