Подтвердить что ты не робот

Предотвращать прямые коммиты на главной ветке в репозитории git и принимать только слияния?

В моем репозитории git есть две ветки: 'master' и 'dev'.

Код, переданный в dev, проходит через процесс автоматической сборки до его тестирования. Код, который проходит это, затем объединяется в ветвь "master" .

Возможно ли, используя крючки или что-то еще, предотвратить нормальные прямые коммиты на ветке "master" и принимать только слияние с "dev" на "master" ?

4b9b3361

Ответ 1

Не прямой ответ: подумайте об использовании для этого репозиториев вместо ветвей. Представьте себе три репозитария: локальные, dev и благословенные. Local = ваше собственное репо, где вы работаете. Dev = репо, на которое вы нажимаете все свои коммиты, и тот, который ваш процесс сборки отслеживает для изменений. Блаженный = репо, от которого может двигаться только процесс сборки и от которого вы тянете. Таким образом, вы совершаете локальные изменения и нажимаете на dev. Auto-build делает все, что он проверяет, что вы нажимаете и добиваетесь успеха, подталкивает их к благословению. Затем вы (или кто-либо другой) можете забрать их от благословенных и продолжить работу оттуда.

Ответ 2

Возможно, вы захотите использовать крюк commit-msg, который проверяет, происходит ли в сообщении сообщение merge для пробной фиксации. Что-то вроде

grep -iq merge "$1" || exit 1

после проверки ветки. Вы можете сделать RE более строгим, чем это. Разумеется, это всего лишь эвристика, и любой, кто имеет доступ на запись к центральному репо, может обойти эту проверку.

Ответ 3

Если вы используете GitHub, у них есть функция защиты веток. Перейдите в настройки GitHub для репозитория, затем ответьте и увидите настройки защищенных ветвей.

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

См. https://help.github.com/articles/defining-the-mergeability-of-pull-requests/

Bitbucket предлагает аналогичную функцию.

Ответ 4

Рассмотрим использование уровня контроля доступа git, например gitolite

Ответ 5

Сделать локальную ветку

 command: git branch <branch name>

Перейдите к ветке через

Command: git checkout <branch name>     

Теперь ваша локальная работа сохраняет (через добавление и фиксацию) в ветвь, а затем нажимает на удаленный с помощью

command : git push origin <branch name>

после этого вы можете сделать запрос на загрузку для освоения и слияния для освоения. Это ответ, основанный на системной среде linux (Ubuntu).

Если какая-нибудь миссия сообщит мне?