Git pre-merge hooks?

Для своего репозитория я использую Git и Stash. В конце Stash я ограничил (только чтение) доступ к мастеру, так что любой пользователь может разветвляться от основной ветки для функций/веток, но не может сливаться с мастером напрямую, если это не делается с помощью запроса на извлечение.

Но как пользователь я могу случайно объединить свою функциональную ветку с основной веткой и попытаться отправить основную ветку.

Хорошо то, что push не разрешен и ограничен Stash, но мне было интересно, есть ли способ запретить пользователю объединять любые ветки с мастером локально с помощью некоторых хуков.

Я пробовал хуки перед фиксацией, и они великолепны, мне было интересно, есть ли что-то похожее на них, например хуки перед слиянием.


person Dexter    schedule 17.12.2014    source источник
comment
кто-нибудь может прокомментировать, почему этот вопрос имеет отрицательный голос? Есть проблемы с контентом?   -  person Dexter    schedule 18.12.2014
comment
Почему бы не запретить коммит на master полностью?   -  person Sascha Wolf    schedule 18.12.2014
comment
Вы знаете, что нет встроенного способа предоставить локальные хуки для клонированного репозитория? Каждый пользователь, клонирующий репозиторий, должен будет сам добавить хуки.   -  person Sascha Wolf    schedule 18.12.2014
comment
Хороший вопрос...   -  person Alex Harvey    schedule 29.06.2017
comment
Git 2.24 (4 квартал 2019 г.) включает хук pre-merge-commit, который может быть полезно здесь.   -  person VonC    schedule 19.09.2019


Ответы (2)


Мне было интересно, есть ли способ запретить пользователю объединять любые ветки с мастером локально с помощью некоторых хуков.

Бывший разработчик Stash (не то, чтобы это имело значение).

Как упомянул @Zeeker, вам нужно, чтобы каждый разработчик добавлял хуки в свой локальный репозиторий. А на самом деле все еще хуже. Допустим, вы делаете следующее:

git checkout -b this-is-not-master
...
git commit -m "This is not on master"

Но тогда вы делаете это:

git push origin this-is-not-master:master

В какой момент пользователь был "включен" master? По сути, вы не можете этого сделать — локальные ветки не имеют ничего общего с удаленными ветками, за исключением того, что нам иногда удобно использовать одно и то же имя. Если вам нужно/хотите ограничить эти вещи, я бы добавил хуки в Stash.

person charleso    schedule 18.12.2014
comment
Я надеюсь, что я не казался слишком пренебрежительным/бесполезным. :( - person charleso; 20.12.2014

Для этого вы можете написать pre-commit или pre-push hook. Я бы предпочел предварительную отправку, поскольку вы можете использовать фиксацию для объединения функциональной ветки с основной в вашей локальной сети и тестирования изменений интеграции перед запросом на включение.

Чтобы создать pre-push hook, вы можете либо попросить разработчиков создавать pre-push hook каждый раз, когда они клонируют репозиторий, что является очень повторяющейся задачей. Вместо этого создайте хук pre-push в каталоге hooks, где установлены ваши двоичные файлы git, и это гарантирует, что разработчики всегда получат хуки, независимо от того, сколько раз они клонируют или инициализируют репозиторий.

person Biswajit_86    schedule 22.03.2015