Git - требует слияния коммитов от мастера, прежде чем разрешить пуш в ветки - PullRequest
0 голосов
/ 20 марта 2019

Мы хотели бы предотвратить длительные конфликты слияния между ветвями разработки, требуя, чтобы эти ветви извлекали / объединяли из основной ветви, прежде чем разрешить толчок в ветку разработки (если есть какие-либо изменения в основной ветви). Возможно ли это применить?

1 Ответ

2 голосов
/ 20 марта 2019

Да, в зависимости от того, как размещен ваш центральный репозиторий. Если он размещен на чем-то вроде GitHub или GitLab.com, это, вероятно, будет невозможно, поскольку провайдеры такого типа не позволяют вам предоставлять свой собственный код для проверки push-сообщений (вы можете настроить некоторые ограничения через их веб-интерфейс, но я не я думаю, что то, что ты хочешь, возможно там).

Для собственного размещения репозитория вы можете сделать это с помощью update hook (см. Документацию для hooks ). Вот пример, который я на самом деле не проверял:

#!/bin/sh
if [ "$1" = "refs/heads/development" -a "$(git rev-list $3..master)" ]; then
  echo "ERROR: master is not merged into development, please try again" >&2
  exit 1
fi

По сути, это проверяет, что «ничего не осталось», если вы вычесть набор коммитов из нового состояния development из набора коммитов на master. Если вы объединились, development будет иметь все коммиты master, поэтому результатом будет пустой набор.

Это довольно просто, но имеет несколько незначительных недостатков:

  • Если то же нажатие также обновляет master, проверка в этом хуке может еще не знать о новых изменениях в master, поэтому в этом случае вы можете получить ложный отрицательный результат (незакрытые изменения, но push проходит) .
  • Если последняя (и единственная) новая вещь, произошедшая на master, была слиянием с development, хук выдаст ложный положительный результат, потому что master будет иметь этот коммит слияния, в то время как development выиграл ' т. Конечно, мы знаем, что это несущественное различие между двумя ветвями, но простая арифметика в хуке не понимает этих различий.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...