Запретить прямые коммиты на ветке master в репозитории git и принимать только слияния? - PullRequest
32 голосов
/ 13 августа 2011

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

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

Можно ли с помощью хуков или чего-то другого предотвратить обычные прямые коммиты на ветке 'master' и принимать слияния только от 'dev' до 'master'?

Ответы [ 5 ]

9 голосов
/ 13 августа 2011

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

4 голосов
/ 19 ноября 2015

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

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

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

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

4 голосов
/ 13 августа 2011

Возможно, вы захотите использовать commit-msg ловушку, которая проверяет, встречается ли в сообщении слово merge для предварительного подтверждения.Что-то вроде

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

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

1 голос
/ 14 августа 2011

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

0 голосов
/ 09 декабря 2016

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

 command: git branch <branch name>

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

Command: git checkout <branch name>     

Теперь все ваши локальные работы сохраняются (через add. & Commit) в ветке, а затем нажимают надистанционно через

command : git push origin <branch name>

, после чего вы можете сделать запрос на передачу мастеру и объединиться с мастером.Это ответ, основанный на системной среде Linux (Ubuntu).

Если что-то пропустит, дайте мне знать?

...