Git post-receive - как проверить, объединена ли нажатая ветвь с мастером

В нашей команде мы обычно помещаем все задачи в отдельные ветки, а после этого релиз-менеджер просматривает эти ветки и объединяет их в «главную» ветку.

Иногда члены команды забывают объединить свои ветки с основной веткой (перед отправкой) - поэтому я пытаюсь сделать это - вывести сообщение «Пожалуйста, объедините с мастером» после нажатия пользователем - я предполагаю, что мне нужно что-то проверить на пост- получить крючок на удаленном .. есть несколько примеров? .. или что я должен в основном делать?

обновление: основная причина этого - свести к минимуму количество потенциальных конфликтов (поскольку коммиттер (а не релиз-менеджер) будет их разрешать)


person Pydev UA    schedule 04.01.2010    source источник


Ответы (4)


Если git cherry new-branch master имеет какие-либо выходные данные, значит, кто-то не перебазировал перед отправкой.

person Dustin    schedule 04.01.2010

Я полагаю, что под «слиянием с мастером» вы на самом деле подразумеваете перебазировать поверх мастера.

Каждый разработчик должен:

  • тянуть мастер
  • перебазируйте свою ветку поверх мастера, прежде чем нажимать ее

для того, чтобы релиз-менеджер имел перемотку вперед только после просмотра ветки.
Если возникает какой-либо конфликт, тот же релиз-менеджер должен уведомить разработчика, попросив его (снова) вытащить мастер и сделать rebase.
Таким образом, только разработчик отвечает за решение конфликтов, а не релиз-менеджер.

См. раздел перебазирование и слияние.


Для автоматического процесса я бы выбрал центральный перехватчик обновлений, который попытается выполнить объединиться с мастером и проверить, является ли «ускоренная перемотка вперед» частью вывода команды. В противном случае хук завершится с ошибкой git send-email.
На данный момент у меня нет примера такого скрипта.

person VonC    schedule 04.01.2010
comment
Да, это то, что я пытаюсь сделать, НО главная проблема в том, что разработчики забывают вытащить master и rebase, поэтому я хочу, чтобы они получали уведомление о том, что забыли это сделать. - person Pydev UA; 04.01.2010

На самом деле нет хорошего способа сделать это. Есть довольно много сложностей, наиболее очевидная из которых заключается в том, что ваша операция rebase-from-master/push-to-master не является атомарной. т.е. кто-то может подтолкнуть что-то промежуточное. Я бы предпочел, чтобы вы посмотрели, например. Gitorious, что значительно упрощает работу менеджера по выпуску. Он может легко увидеть, что включает в себя коммит, и может легко принять/отклонить коммит.

Но вам может оказаться полезным git-wtf. В нем показано, как сравнить локальный репозиторий с удаленным, если вы все еще настаиваете на использовании автоматизированного решения.

person Makis    schedule 04.01.2010

Вы действительно не хотите продолжать пересекающиеся слияния. Либо тематические ветки должны быть объединены в главную ветку, либо ветки должны оставаться отдельными, будучи объединенными из главной ветки.

Возможно, вам нужно, чтобы ветка перед отправкой была перебазирована на master, чтобы свести к минимуму количество потенциальных конфликтов, поскольку участник уже разрешил большинство из них.

person Randal Schwartz    schedule 04.01.2010
comment
Именно - я хочу - свести к минимуму количество конфликтов - person Pydev UA; 04.01.2010