Могу ли я применить ветвь только для слияния в git?


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

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

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

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

4 16

4 ответа:

Ну, вроде того. Но я не думаю, что ты захочешь туда идти.

Как сказал Джейсон, есть крючки, которые можно использовать для предотвращения определенного поведения. В этом случае мы могли бы использовать крюк pre commit, чтобы предотвратить запуск "git commit". Но это проблематично в нескольких отношениях:
  1. по различным причинам безопасности крючки git не распространяются вместе с репозиторием, поэтому вы не можете заставить людей использовать ваши крючки в своих репозиториях. Помните, что их хранилища являются их собственными, а не для вам решать, что они делают в своих хранилищах.
  2. Что происходит, когда вы делаете вытягивание или слияние и получаете конфликты? Для того, чтобы разрешить эти конфликты, вы должны иметь возможность использовать "git commit", который мы только что отключили.

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

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

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

Возможно, вы захотите проверить git flow для получения дополнительных идей об этом виде workflow.

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

Совсем недавно была создана структура для обеспечения соблюдения полномочий, гитолит, может помочь установить все виды политик, например, разрешить только тестеру объединяться в ветке " Testing".

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

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