2016-11-07 2 views
14

(Для простоты) У меня есть филиал master и dev в моем Git-repo. Я хочу, чтобы ветка master всегда работала, поэтому вся работа, которую я делаю, должна быть в ветке dev.Git: Предотвращает фиксации в мастер-ветке

Однако, когда я объединить свои изменения в с --no-ff слияния, я, как правило, остаются в master отрасли, а просто продолжать работать в нем (потому что я забыл в кассу dev филиал).

Могу ли я установить правило для ветви master, в которой говорится, что я не могу совершать коммиты и ускоренные слияния, но только --no-ff сливается с другой ветки?

Это должно работать для частных размещенных репозиториев (ergo not GitHub и BitBucket).

+3

«быстро вперед совершившее» не вещь. Commits только коммиты, 'git commit' делает новый, нет быстрого пересылки. Похоже, вы просто хотите запретить обычные коммиты, когда текущая ветка «master», и в этом случае загляните в «pre-commit». – torek

+0

Возможный дубликат [Как ограничить доступ к главной ветке на git] (http://stackoverflow.com/questions/38864405/how-to-restrict-access-to-master-branch-on-git) – 1615903

ответ

29

Да, это возможно. Вы должны создать крюк pre-commit, который отклоняет фиксации для мастер-ветви. Git не вызывает привязку до фиксации при вызове команды merge, поэтому этот крючок будет отклонять только обычные фиксации.

  1. Перейдите в ваш репозиторий.
  2. Создать файл .git/крюки/зафиксироваться с следующим содержанием:

    #!/bin/sh 
    
    branch="$(git rev-parse --abbrev-ref HEAD)" 
    
    if [ "$branch" = "master" ]; then 
        echo "You can't commit directly to master branch" 
        exit 1 
    fi 
    
  3. сделать его исполняемым (не требуется Окна):

    $ chmod +x .git/hooks/pre-commit 
    

Чтобы отключить слияние fast-forwad, вы также должны добавить следующий параметр для своего .git/конфигурационный файл:

[branch "master"] 
    mergeoptions = --no-ff 

Если вы хотите также защитить мастер ветви на пульте дистанционного управления, проверить этот ответ: How to restrict access to master branch on git

+0

Это выглядит точно как то, что мне нужно - это тоже работает в Windows? –

+2

@ RasmusBækgaard да это будет: скрипт bash для hook будет интерпретирован Git bash, включенным в Git для Windows. (Вам просто не нужен шаг chmod). – VonC

+0

примечание: вы также можете не допустить, чтобы вы нажали на удаленную ветвь 'master' в предтолкающем крюке. ex: https://gist.github.com/aaronhoffman/ffbfd36928f9336be2436cffe39feaec –

Смежные вопросы