(Для простоты) у меня есть master
ветка и dev
в моем репозитории Git. Я хочу, чтобы master
ветка всегда работала, поэтому вся моя работа должна выполняться в dev
ветке.
Однако, когда я объединяю свои изменения с помощью --no-ff
слияния, я обычно остаюсь в master
ветке и просто продолжаю работать в ней (потому что я забываю проверить свою dev
ветку).
Могу ли я установить правило для master
ветки, в котором говорится, что я не могу выполнять коммиты и слияния с быстрой перемоткой вперед, но только --no-ff
слияния из другой ветки?
Это должно работать для частных репозиториев (например, не GitHub и BitBucket).
git
merge
fast-forward
Расмус Бёкгаард
источник
источник
git commit
создание новых, быстрой перемотки вперед не происходит. Похоже, вы просто хотите запретить обычные коммиты, когда текущая ветка -master
и в этом случае загляните вpre-commit
ловушку.Ответы:
Да, это возможно. Вы должны создать ловушку перед фиксацией, которая отклоняет фиксации в главной ветке. Git не вызывает ловушку предварительной фиксации, когда вы вызываете команду слияния , поэтому эта ловушка будет отклонять только обычные коммиты.
Создайте файл .git / hooks / pre-commit со следующим содержимым:
Сделайте его исполняемым (не требуется в Windows ):
Чтобы отключить быструю перемотку вперед, вы также должны добавить следующую опцию в ваш .git / config файл:
Если вы хотите также защитить главную ветку на своем пульте дистанционного управления, проверьте этот ответ: Как ограничить доступ к главной ветке на git
источник
master
ветку в крючке предварительного нажатия. примерДля этого вы можете использовать утилиту предварительной фиксации . Он имеет встроенный
no-commit-to-branch
крючок, который можно использовать для предотвращения коммитов в одну или несколько веток.Настроить
Базовый процесс настройки:
.pre-commit-config.yaml
файл в корне вашего проекта (см. Ниже первый черновик)pre-commit install
.Базовый конфиг для защиты веток
Вот базовая конфигурация, которая включает только
no-commit-to-branch
перехватчик:repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.3.0 hooks: - id: no-commit-to-branch args: ['--branch', 'master']
Если вы хотите защитить несколько веток, вы можете включить несколько
--branch
аргументов в список аргументов:repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.3.0 hooks: - id: no-commit-to-branch args: ['--branch', 'master', '--branch', 'staging']
Разве это не перебор?
У предварительной фиксации есть много других встроенных хуков, а также большая коллекция созданных сообществом хуков , которые изменят способ очистки и проверки ваших коммитов. Я упоминаю об этом потому, что, хотя этот инструмент может быть излишним для простого предотвращения коммитов в защищенную ветку, у него есть много других функций, которые делают его неотразимым и простым дополнением к любому проекту git.
источник
Возможно, имеет смысл установить его глобально через
и переместив этот
pre-commit
файл в этот каталогисточник
master
вProduction
- можно ли сделать исключения?