Предотвращать прямые коммиты на главной ветке в репозитории git и принимать только слияния?
В моем репозитории git есть две ветки: 'master' и 'dev'.
Код, переданный в dev, проходит через процесс автоматической сборки до его тестирования. Код, который проходит это, затем объединяется в ветвь "master" .
Возможно ли, используя крючки или что-то еще, предотвратить нормальные прямые коммиты на ветке "master" и принимать только слияние с "dev" на "master" ?
Ответы
Ответ 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).
Если какая-нибудь миссия сообщит мне?