Предотвращение git слияния для ветвления

Я использую ветвление для создания и развертывания пользовательских экземпляров вне платформы. Эти экземпляры обычно начинаются как ветка из ветки "master", немного настраиваются, развертываются в процессе тестирования и производства и, наконец, архивируются.

Если в мастер добавлены новые функции или исправления ошибок, я хотел бы получить/объединить их в свои экземпляры проектов (ветки), но я почти никогда не хочу объединять обратно изменения от ветвей к главному. Это произошло недавно по ошибке и вызвало серьезные головные боли. A git pull для обновления репозитория объединил все в главную ветвь, а затем был возвращен в основное репо.

Есть ли простой способ запретить слияние обратно в мастер? Или, по крайней мере, требующий какого-то флага -force?

Ответ 1

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

Ответ 2

Git очень рад работать с несколькими удаленными репозиториями.

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

Чтобы обновить "настраиваемый экземпляр" с исправлениями ошибок с вашего "главного пульта", вы должны ввести что-то вроде

git checkout <custom-branch>
git fetch main
git merge main/master

где main - это удаленный репозиторий, на который вы ссылаетесь как master (я изменил имя, чтобы избежать путаницы между веткой и удаленным)

Для ваших локальных ветвей не указывайте main как ветку удаленного отслеживания, а укажите конкретный экземпляр. то есть один удаленный репозиторий для каждого настраиваемого экземпляра.

Чтобы внести изменения в свой собственный экземпляр, используйте

git push

В редком случае, когда вам нужно нажать изменения вверх по течению к ветке "master", используйте

git push main

Ответ 3

Если вы просто хотите избежать слияния с мастером, вы можете использовать pre-merge hook, чтобы запретить его.