Могу ли я применить ветку только для слияния в git? - PullRequest
18 голосов
/ 03 ноября 2010

Я использую git и настраиваю следующие ветви для поддержки моего рабочего процесса:

  • релиз, который содержит только выпущенное программное обеспечение,
  • тестирование, которое содержит программное обеспечение, выпущенное для группы тестирования,
  • развивайся, где и происходит развитие
  • some_topic_branch, где добавляются функции и т. Д.

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

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

Ответы [ 4 ]

11 голосов
/ 31 мая 2011

Ну, вроде как. Но я не думаю, что вы хотите туда пойти.

Как сказал Джейсон, есть крючки, которые вы можете использовать для предотвращения определенного поведения. В этом случае мы могли бы использовать ловушку pre commit, чтобы никто не запустил «git commit». Но это проблематично по нескольким причинам:

  1. По разным причинам безопасности git-хуки не распространяются вместе с репозиторием, поэтому вы не можете заставить людей использовать ваши хуки в своих репозиториях. Помните, что их хранилища принадлежат им самим, а не вам решать, что они делают в своих хранилищах.
  2. Что происходит, когда вы выполняете вытягивание или слияние и получаете конфликты? Чтобы разрешить эти конфликты, вы должны иметь возможность использовать «git commit», который мы только что отключили.

Это просто создает больше проблем, чем решает.

Однако вы можете решить эту проблему другими способами. Вы можете создать рабочий процесс, который обеспечивает соблюдение этих принципов. Например, представьте, что у вас есть человек, отвечающий за слияние из тестовой ветви в ветку релиза. Если вы позволите только этому человеку быть в состоянии отправить изменения в центральный репозиторий (или этот репозиторий сотрудников является «центральным» репозиторием), он / она может получить изменения из тестовой ветви тестового репозитория или тестовой ветви тестер Б (используйте свое воображение).

Здесь важно осознать, что вы можете применять политику, разрабатывая способы обмена изменениями друг с другом. Не каждый должен иметь возможность отправить свои изменения в один репозиторий. Черт, им даже не нужно продвигать свои изменения вообще. Люди, участвующие в тесте, могут получать изменения от разработчиков, как только они захотят что-то протестировать, и таким образом вы можете позволить тесту решать, когда они будут готовы внести новые изменения, а не позволять разработчикам решать, когда тестировщики должны получить свои тесты. вещи. Тот же принцип.

4 голосов
/ 31 мая 2011

Возможно, вы захотите проверить Git flow , чтобы узнать больше о таком виде workflow

2 голосов
/ 03 ноября 2010

Вы должны быть в состоянии применить это, используя некоторые из хитов git.

0 голосов
/ 04 октября 2012

В последнее время платформа, созданная для обеспечения авторизации, gitolite , может помочь внедрить все виды политик, например, чтобы позволить только тестеру объединяться в "Testing "ветвь.

Кроме того, Gitolite предлагает с VREFs (объяснено в" Gitolite Update Hook исключить репозиторий") возможность определять много" ловушек обновления ""который будет контролировать коммиты, которые передаются в репо, управляемое gitolite.

Но все эти элементы управления предназначены для" центрального "репо, а не для all репозиториев нижестоящих версий, клонированных на различных разработчиках.рабочие станции.

...