2016-06-13 1 views
1

Мой вопрос не очень понятно (пока), и я, возможно, потребуется ваша обратная связь более понять, что я действительно ищет ...Какой гладкий рабочий процесс Git можно использовать для перехода от разработки к выпуску?

Во всяком случае, я прочитал довольно много о git-flow и другие потоки используются на Git и я все еще разделен о том, как решить мою ситуацию.

В настоящее время у меня есть ветка master, которая развивалась как для разработки, так и для выпуска. Это главным образом потому, что вся история была импортирована из нашего предыдущего SCM. Также мы разместили tag на каждом выпуске.

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

  1. Создать rc ветвь от master, на которых применяются горячие исправления. В конце концов слейте rc на ветке release, затем примените к ней тег.
  2. Создайте ветку develop от master, затем используйте master как ветвь rc. В конце концов примените tag на master и продолжите с develop в качестве основной ветки развития.

С решением (1) вопрос о создании ветви на первом выпуске, а затем о слиянии, весь следующий выпуск в нее открыт. Также теги должны быть перемещены также, что может ввести в заблуждение.

С решением (2) master считается веткой выпуска, не являющейся ветвью развития, как и должно быть.

Я не уверен в git-flow, который добавляет некоторую сложность. Я хочу, чтобы ветка master оставалась стволом проекта, но в этом случае я не знаю, какое решение наиболее адаптировано.

использования:

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

* some changes 
* v1.1.1 [v1.1.1] 
* hotfix 
* v1.1 [v1.1] 
* merged feature foo into master 
* changes 
* v1.0 [v1.0] 

Первое решение сохранить master ветвь развития, а затем создать release/v1.2rc филиал

* v1.2 [v1.2] (release/releases) 
| * merge next feature to master (master) 
* | changing version rc to release (release/v1.2rc) 
| * merged hotfix 
|/| 
* | hotfix 
|/ 
* some changes 
* v1.1.1 [v1.1.1] 
* hotfix 
* v1.1 [v1.1] 
* merged feature foo into master 
* changes 
* v1.0 [v1.0] 

Чтобы сохранить все релизы в release/releases отрасли, было бы полезно, чтобы сделать работу от начало:

* v1.2 [v1.2] (release/releases) 
    /| 
/| 
/* | merge next feature to master (master) 
* | | changing version rc to release (release/v1.2rc) 
| * | merged hotfix 
|/| | 
* | | hotfix 
|//
* * v1.1.1 [v1.1.1] 
*/| some changes 
* | v1.1.1 
| * v1.1 [v1.1] 
*/| hotfix 
* | v1.1 
* | merged feature foo into master 
* | changes 
| * v1.0 [v1.0] 
*/ 
* v1.0 

Это позволяет сделать git log release/releases

* v1.2 [v1.2] (release/releases) 
* v1.1.1 [v1.1.1] 
* v1.1 [v1.1] 
* v1.0 [v1.0] 

Однако, перемещая метки и релизы на отдельной ветке, мы теряем видимость на master. Кроме того, коррекция коррекции ошибок на предыдущем выпуске , то есть v1.1.2 не так легко сделать, и в конце концов мы получаем довольно тревожную release/releases журнал:

* v1.1.2 hotfix [v1.1.2] 
* v1.2 [v1.2] (release/releases) 
* v1.1.1 [v1.1.1] 
* v1.1 [v1.1] 
* v1.0 [v1.0] 

ответ

0

Вот один из возможных вариантов мы используем. Мы создаем теги релиза вместо ветвей выпуска.

git checkout master 
#make some commits 
git tag v1.0.0 
git push <remote> v1.0.0 

теперь сервер сборки может получить тег v1.0.0

mkdir buildspace 
cd buildspace 
git init 
git fetch <remote_url> v1.0.0 
git checkout FETCH_HEAD 
#run the build job 

Если дополнительные фиксаций необходимы для освобождения, мы можем выбирать и оформления заказа v1.0.0, сделать коммиты и обновить тег v1.0.0 в новый HEAD или просто создайте еще один тег, например v1.0.1, и нажмите его. После того, как релиз будет выполнен, мы сможем объединить тег, если это необходимо. В некоторых случаях коммиты для выпуска не нужны всем мастерам, и мы можем просто применить некоторые из них к мастеру с помощью git cherry-pick или git rebase. Тем временем мастеру не нужно замораживать. Мы можем сделать другие коммиты на master и нажать на удаленный мастер, который не имеет никакого отношения к выпуску.

Смежные вопросы