Запретить слияние в другую ветку, чем у вас? - PullRequest
0 голосов
/ 20 марта 2020

У нас есть репо, настроенный следующим образом:

master
--> project_branch
----> branch_of_project_branch
--> branch_of_master

IE, у нас есть несколько проектов, которые все являются ветвями из главной ветки.

Когда мы вносим изменения в мастер, мы делаем эти изменения в ветке вне мастера, а затем объединяем их обратно в мастер, а затем вытягиваем из мастера в каждую ветвь проекта.

Когда мы делаем изменения в проекте, мы делаем эти изменения в ветви этого проекта, а затем объединяем их обратно в эту ветку проекта.

Есть ли способ настроить git, чтобы запретить объединение изменений из ветка в ветку которая не была ее источником? IE, в приведенном выше примере я хотел бы запретить слияние branch_of_project_branch с master или аналогично запретить слияние branch_of_master с project_branch.

1 Ответ

1 голос
/ 20 марта 2020

Есть ли способ настроить git, чтобы мы не разрешали объединять изменения из ветви в ветку, которая не была ее источником?

Нет.

Названия веток в Git не имеют значения и не имеют отношения друг к другу. Каждый Git репозиторий имеет свои имена ветвей: если я клонирую ваш репозиторий, я могу изменить свой, чтобы иметь ветви maestro вместо master, dervish вместо develop и т.д. на. И все же, я все еще могу отправить ваши Git коммиты и сказать вашему Git использовать либо ваши имена, либо мои имена.

Каждое имя ветви у вас есть в вашем собственном Git хранилище позволяет вам установить еще одно имя, которое Git вызывает upstream , чтобы связать его с этой ветвью, но эта настройка восходящего потока является локальной и в основном удобной функцией. Другие части Git, такие как значение по умолчанию push.default, побуждают людей использовать origin/master в качестве восходящего потока ветви, локальное имя которой master, таким образом поощряет разумное использование ветви имена, но это нигде не применяется: любой может переопределить это в любое время.

В любом случае имена ветвей незначительны. В Git важны коммиты . Имя ветви просто служит для find commit.

Когда у вас есть сервер, на котором размещено хранилище Git, этот server получает возможность принять или отклонить git push операции. Вы можете написать свои собственные сценарии, которые проверяют входящие запросы pu sh. Эти сценарии имеют вид хуков , в данном случае pre-receive и update. Но эти хуки получают только несколько частей информации:

  • идентификатор ha sh входящего коммита;
  • имя, которое другой Git попросил Git использование; и
  • идентификатор ha sh, который в настоящее время связан с этим именем.

Человек, выполняющий операцию git push, может выбрать произвольное имя для отправки на ваш Git, чтобы попросите Git использовать, чтобы название ветви, которое вы видите здесь, не обязательно было названием ветви , которое они имеют в их Git. Но вам не нужно заботиться , какое имя ветки они имеют в своих Git: ваш Git никогда не видит их имен ветвей в любом случае. Ваш Git видит только ваши собственные имена веток и фиксирует хэши.

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

...