Слияние release-ветки
От: tdiff  
Дата: 10.12.15 16:21
Оценка:
Приветики,

Многим известно, что есть такой workflow, когда в определённый момент создаются т.н. "релизные" ветки, в них пушатся коммиты и в конце-концов всё это заканчивается релизом.
При этом полагается эту ветку затем влить в "develop" ветку.

У меня вопрос, как у вас организуется это слияние, если за время существования релизной ветки:
1. в релизную ветку пушится много коммитов большим числом людей;
2. в девел ветку пушится много коммитов таким же числом людей;
3. при попытке влить релизную в девел происходит большое число конфликтов, чтобы разрезолвить которые требуется так же большое число людей.
?
Re: Слияние release-ветки
От: Kolesiki  
Дата: 10.12.15 18:47
Оценка: +3
Здравствуйте, tdiff, Вы писали:

T>Многим известно, что есть такой workflow, когда в определённый момент создаются т.н. "релизные" ветки, в них пушатся коммиты и в конце-концов всё это заканчивается релизом.


Неверно. "Релизная ветка" создаётся наоборот — для ограждения от изменений! Делается ветвь, которая замораживается для внесения фич и принимает только багфиксы. В день релиза собирается бинарь и публикуется, ветка "забывается".
Когда находят критические изменения, "забытый релиз" тоже обновляется (по желанию).

T>3. при попытке влить релизную в девел происходит большое число конфликтов


Обычный бардак в команде. Разберитесь с ответственными за модули программы и не пилите всё хором.
Re[2]: Слияние release-ветки
От: · Великобритания  
Дата: 10.12.15 20:54
Оценка: +1
Здравствуйте, Kolesiki, Вы писали:

K> T>Многим известно, что есть такой workflow, когда в определённый момент создаются т.н. "релизные" ветки, в них пушатся коммиты и в конце-концов всё это заканчивается релизом.

K> Неверно. "Релизная ветка" создаётся наоборот — для ограждения от изменений! Делается ветвь, которая замораживается для внесения фич и принимает только багфиксы.
Можно добавить, что все запушенные в релизную ветку изменения желательно тут же мержить в девелоперскую ветку.
avalon/1.0.432
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Слияние release-ветки
От: Sergey J. A. Беларусь  
Дата: 11.12.15 05:05
Оценка:
T>У меня вопрос, как у вас организуется это слияние, если за время существования релизной ветки:
T>1. в релизную ветку пушится много коммитов большим числом людей;
T>2. в девел ветку пушится много коммитов таким же числом людей;
T>3. при попытке влить релизную в девел происходит большое число конфликтов, чтобы разрезолвить которые требуется так же большое число людей.
T>?

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

Но вообще, даже когда у нас случались массовые мержи, вполне справлялся один человек.
Re: Слияние release-ветки
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 11.12.15 06:08
Оценка:
Здравствуйте, tdiff, Вы писали:

T>Многим известно, что есть такой workflow, когда в определённый момент создаются т.н. "релизные" ветки, в них пушатся коммиты и в конце-концов всё это заканчивается релизом.

T>При этом полагается эту ветку затем влить в "develop" ветку.

Эээ, тут что-то не то. Релизы вообще-то отщепляются от основных веток разработки, а не наоборот. Зачем делать по вашей схеме? Что это даёт?
Или вы релизами назвали feature-ветки?

T>У меня вопрос, как у вас организуется это слияние, если за время существования релизной ветки:

T>1. в релизную ветку пушится много коммитов большим числом людей;
T>2. в девел ветку пушится много коммитов таким же числом людей;
T>3. при попытке влить релизную в девел происходит большое число конфликтов, чтобы разрезолвить которые требуется так же большое число людей.

Если само по себе возникает большое количество конфликтов — это вопрос организации самого кода и синхронизации изменений в нём и находится за пределами рассматриваемого (например, если в основной ветке пишут гуй на Qt, а в отдельной ветке на gtk, то это в принципе не мержится)

Если же вопрос стоит, что пока идут мержи, develop должна быть живой — то на это, после того, как релиз (в этой странной схеме) сделан, надо породить специальную ветку "мерж релиза X в develop", вкинуть в неё изменения из develop после форка, разгребая их (может быть, несколько раз), и только когда результат доказанно устойчив (проходит тесты и контрольные замеры) — рывком смержить в develop.
The God is real, unless declared integer.
Re: Слияние release-ветки
От: Sinix  
Дата: 11.12.15 06:32
Оценка:
Здравствуйте, tdiff, Вы писали:

T>У меня вопрос, как у вас организуется это слияние, если за время существования релизной ветки:


Если отбросить мегапроекты типа win/линукса, в которых понятие центральной ветки несколько размыто, то обычно делается так:

Для svn:
1. Есть транк, в котором идёт разработка.
2. При выпуске релиза от транка отрезается tag
3. Для выпуска патча от релизной метки отрезается очередная ветка, в которую переносятся изменения из транка. Это нужно, чтобы в будущем не было проблем с клиентами, которым нужен специфический хотфикс, но не нужен сам патч. В момент выпуска патча от ветки с патчем отрезается tag (по аналогии с п.2).
4. Для разработки большой мегафичи отрезается отдельная ветка, в которую периодически (не реже, чем два раза в неделю) мержится основная ветка. Это позволяет не тратить время на обратное слияние. После закрытия фичи ветку грохаем

Для гита:
http://nvie.com/posts/a-successful-git-branching-model/
с расширением для студии:
https://visualstudiogallery.msdn.microsoft.com/f5ae0a1d-005f-4a09-a19c-3f46ff30400a

Лично мне нравится первый вариант, но по факту, разумеется, работаем так, как удобней команде.
Re[2]: Слияние release-ветки
От: tdiff  
Дата: 11.12.15 10:56
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Неверно. "Релизная ветка" создаётся наоборот — для ограждения от изменений! Делается ветвь, которая замораживается для внесения фич и принимает только багфиксы. В день релиза собирается бинарь и публикуется, ветка "забывается".

K>Когда находят критические изменения, "забытый релиз" тоже обновляется (по желанию).

Вы предлагаете багфиксы в девел не мёржить обратно?
Re[2]: Слияние release-ветки
От: tdiff  
Дата: 11.12.15 11:22
Оценка:
Здравствуйте, netch80, Вы писали:

N>Эээ, тут что-то не то. Релизы вообще-то отщепляются от основных веток разработки, а не наоборот. Зачем делать по вашей схеме? Что это даёт?

N>Или вы релизами назвали feature-ветки?

Нет, под релизом я имел в виду имеено ветку из которой собираются бинарники в конце концов. В нашем случае такая ветка за неделю набирает ~50 коммитов. В то же время в devel идёт разработка будущих фичей.

N>Если же вопрос стоит, что пока идут мержи, develop должна быть живой — то на это, после того, как релиз (в этой странной схеме) сделан, надо породить специальную ветку "мерж релиза X в develop", вкинуть в неё изменения из develop после форка, разгребая их (может быть, несколько раз), и только когда результат доказанно устойчив (проходит тесты и контрольные замеры) — рывком смержить в develop.


Да, это вариант. Но сейчас мы делаем по-другому: черри-пикаем каждый фикс из релизной-ветки в devel в процессе их появления. Есть подозрение, что такой вариант проще, чем разово мёржить всю ветку.
Но, наверно, лучший подход зависит от степени "сложности" коммитов в релизной ветке. Если они нетривиальные, то, может быть, лучше их вмёржить один раз, а не генерировать дупликаты коммитов.
Отредактировано 11.12.2015 11:30 tdiff . Предыдущая версия .
Re[3]: Слияние release-ветки
От: Sinix  
Дата: 11.12.15 11:24
Оценка:
Здравствуйте, tdiff, Вы писали:

K>>Когда находят критические изменения, "забытый релиз" тоже обновляется (по желанию).

T>Вы предлагаете багфиксы в девел не мёржить обратно?
В GitFlow предлагают отрезать от релиза ветку с хотфиксами и мержить из неё и в основную и в релизную ветки.

Лично меня такой подход вымораживает, т.к. превращает простую и очевидную схему
http://wiki.ci.uchicago.edu/I2U2/NewReleaseProcess
в аццкий изврат типа такого:
http://yakiloo.com/getting-started-git-flow/
Re[2]: Слияние release-ветки
От: tdiff  
Дата: 11.12.15 11:28
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Больше похоже, что это не релизная ветка (в ней должно быть мало комитов, как тут уже заметили) а просто паралельная ветка.

У нас примерно 50 коммитов за неделю набирается

SJA>Но вообще, даже когда у нас случались массовые мержи, вполне справлялся один человек.

Это сильно зависит от осведомлённости всёй команды о всём коде и о том, что вообще происходит в проекте.
Легко представить себе ситуацию, когда человеку придётся мёржить изменения двух других людей в коде, о котором он вообще не имеет представления.
В таком случае, должно сработать, как предложил netch80: сначала постепенно вливаем devel в релизную ветвь, а затем разово мёржим всё обратно в devel. Таким образом можно разбить большой сложный мёрж на несколько маленьких, которые делают разные люди.
Re[4]: Слияние release-ветки
От: tdiff  
Дата: 11.12.15 11:44
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, tdiff, Вы писали:


S>В GitFlow предлагают отрезать от релиза ветку с хотфиксами и мержить из неё и в основную и в релизную ветки.


S>Лично меня такой подход вымораживает, т.к. превращает простую и очевидную схему

S>http://wiki.ci.uchicago.edu/I2U2/NewReleaseProcess
S> в аццкий изврат типа такого:
S>http://yakiloo.com/getting-started-git-flow/


Я не столько про хотфиксы после релиза, а в багфиксы, происходящие между отрезанием релизной ветки и релизом. Их тоже надо возвращать в основную ветку, вопрос как. В NewReleaseProcess, кстати, на этот вопрос вообще не отвечают.
Re[5]: Слияние release-ветки
От: Sinix  
Дата: 11.12.15 12:24
Оценка:
Здравствуйте, tdiff, Вы писали:

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

T>Их тоже надо возвращать в основную ветку, вопрос как. В NewReleaseProcess, кстати, на этот вопрос вообще не отвечают.

В неправильном направлении смотришь

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

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

В порядке исключения можно конечно смержить исправления из транка в ветку для релиза, я предпочитаю переотрезать ветку для релиза.
Re[6]: Слияние release-ветки
От: tdiff  
Дата: 11.12.15 13:09
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, tdiff, Вы писали:


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

T>>Их тоже надо возвращать в основную ветку, вопрос как. В NewReleaseProcess, кстати, на этот вопрос вообще не отвечают.

S>В неправильном направлении смотришь


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


Это интересный вопрос. У нас, например, транк (он же девелоп), естественно, собирается, проходит тесты и может быть задеплоен, но из него нельзя сходу делать релиз без дополнительного тестирования. Потому что qa физически не будет успевать проверять все коммиты с той скоростью, с какой они добавляются в devel. Отсюда растёт необходимость фиксов в релизных ветках.
Re[3]: Слияние release-ветки
От: · Великобритания  
Дата: 11.12.15 13:16
Оценка: +2
Здравствуйте, tdiff, Вы писали:

t> Да, это вариант. Но сейчас мы делаем по-другому: черри-пикаем каждый фикс из релизной-ветки в devel в процессе их появления. Есть подозрение, что такой вариант проще, чем разово мёржить всю ветку.

А зачем черри пик-то?? Почему не мерж? Разовый мерж да, сложнее. Но куда проще куча маленьких мержей. Если кто делает фикс в релиз, пушит, тут же делает и мерж в devel.

t> Но, наверно, лучший подход зависит от степени "сложности" коммитов в релизной ветке. Если они нетривиальные, то, может быть, лучше их вмёржить один раз, а не генерировать дупликаты коммитов.

Мелкие частые мержи — это то, что надо, собственно git под этот сценарий и заточен. Черри-пики и массовый мерж — конечно отстой.
avalon/1.0.432
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: Слияние release-ветки
От: · Великобритания  
Дата: 11.12.15 13:25
Оценка:
Здравствуйте, Sinix, Вы писали:

S> В GitFlow предлагают отрезать от релиза ветку с хотфиксами и мержить из неё и в основную и в релизную ветки.

А что в этом аццкого?

S> Лично меня такой подход вымораживает, т.к. превращает простую и очевидную схему

S> http://wiki.ci.uchicago.edu/I2U2/NewReleaseProcess
Это для 2007 года для SVN и прочих примитивных VCS может и нормально, ибо SVN мержить не умеет. В git, где мерж реализован, это бессмысленно, гораздо сложнее разбираться что где произошло.
avalon/1.0.432
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[7]: Слияние release-ветки
От: Sinix  
Дата: 11.12.15 13:41
Оценка:
Здравствуйте, tdiff, Вы писали:


T>Это интересный вопрос. У нас, например, транк (он же девелоп), естественно, собирается, проходит тесты и может быть задеплоен, но из него нельзя сходу делать релиз без дополнительного тестирования. Потому что qa физически не будет успевать проверять все коммиты с той скоростью, с какой они добавляются в devel. Отсюда растёт необходимость фиксов в релизных ветках.


А, так это тоже стандартная штука, aka тест-релиз.
Смысл в следующем: за две недели до собственно дедлайна отрезается промежуточная ветка, на ней гоняются тесты/мержатся исправления из транка и по итогам отрезается релиз.

Ну или тот же вариант, только наизнанку:
За те же две недели до релиза разработка переходит в режим закрытия технического долга, чинится только мелочёвка, новые фичи уезжают в отдельные ветки.
Re[8]: Слияние release-ветки
От: tdiff  
Дата: 11.12.15 13:57
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, tdiff, Вы писали:



T>>Это интересный вопрос. У нас, например, транк (он же девелоп), естественно, собирается, проходит тесты и может быть задеплоен, но из него нельзя сходу делать релиз без дополнительного тестирования. Потому что qa физически не будет успевать проверять все коммиты с той скоростью, с какой они добавляются в devel. Отсюда растёт необходимость фиксов в релизных ветках.


S>За те же две недели до релиза разработка переходит в режим закрытия технического долга, чинится только мелочёвка, новые фичи уезжают в отдельные ветки.


Вот именно это я и называю "релизной веткой". Вопрос был про то, когда мёржить из неё в транк: каждый коммит отдельно или в конце всё вместе.
Если второе — то как это организуется технически, потому что там потенциально могут быть конфликты в разных частях кода, которые должны мёржить разные люди. В принципе, netch80 предложил нормальный вариант, как мне кажется.
Re[4]: Слияние release-ветки
От: tdiff  
Дата: 11.12.15 14:00
Оценка:
Здравствуйте, ·, Вы писали:

·>А зачем черри пик-то?? Почему не мерж? Разовый мерж да, сложнее. Но куда проще куча маленьких мержей. Если кто делает фикс в релиз, пушит, тут же делает и мерж в devel.

·>Мелкие частые мержи — это то, что надо, собственно git под этот сценарий и заточен. Черри-пики и массовый мерж — конечно отстой.

Мы в целом у себя стараемся делать как можно меньше мёржей. Не потому, что не умеем или боимся, а для того, чтобы как можно проще и линейней была история в репозитории. Но то, что так можно делать, в принципе, я согласен.
Re[5]: Слияние release-ветки
От: · Великобритания  
Дата: 11.12.15 14:06
Оценка:
Здравствуйте, tdiff, Вы писали:

t> ·>А зачем черри пик-то?? Почему не мерж? Разовый мерж да, сложнее. Но куда проще куча маленьких мержей. Если кто делает фикс в релиз, пушит, тут же делает и мерж в devel.

t> ·>Мелкие частые мержи — это то, что надо, собственно git под этот сценарий и заточен. Черри-пики и массовый мерж — конечно отстой.

t> Мы в целом у себя стараемся делать как можно меньше мёржей. Не потому, что не умеем или боимся, а для того, чтобы как можно проще и линейней была история в репозитории. Но то, что так можно делать, в принципе, я согласен.

А почему же? Сложные и страшные мержи "а тут у нас всё вдруг поменялось" не делают историю проще.
Линейность истории тоже не самоцель. Если история и в самом деле нелинейная по своей природе... зачем её насильно линеаризовать?
avalon/1.0.432
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: Слияние release-ветки
От: Sinix  
Дата: 11.12.15 14:12
Оценка:
Здравствуйте, ·, Вы писали:

S>> В GitFlow предлагают отрезать от релиза ветку с хотфиксами и мержить из неё и в основную и в релизную ветки.

_>А что в этом аццкого?

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

Вариант с общим сторилайном, когда все исправления сначала попадают в основную ветку, там проверяются и уже потом переносятся в ветку (ветки) для хотфикса, выглядит гораздо логичней, чем обратный подход, когда у нас история скачет
dev -> master -> release -> hotfix -> dev

Я честно не могу понять особой необходимость в таких приседаниях для локально разрабатываемого проекта.

Ну и ещё, почти везде одновременно с введением gitflow пытаются ещё и отказаться от регулярных мержей из основной ветки в ветки для feature. Я честно не знаю откуда оно пошло, тем более, что в самом GitFlow про подхват изменений емнип ничего не сказано, но тынденция такая определённо есть

S>> http://wiki.ci.uchicago.edu/I2U2/NewReleaseProcess

_>Это для 2007 года для SVN и прочих примитивных VCS может и нормально, ибо SVN мержить не умеет. В git, где мерж реализован, это бессмысленно, гораздо сложнее разбираться что где произошло.

В смысле? Там просто ветки для фич пропущены, ибо они никак не влияют на процесс выпуска релиза. Мерж транк<>feature в svn где-то с 1.7 проблем никаких не вызывает, вот со всеми остальными сценариями — всё та же боль-печаль, да.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.