scm development branch - stable trunk
От: Xentrax Россия http://www.lanovets.ru
Дата: 12.10.10 19:50
Оценка:
Есть много кода, который активно меняется.

Надоело краснеть за дурацкие баги в daily builds нестабильного trunk, к тому же из-за специфики проекта приходится много времени тратить на проверку багрепортов. Хочется для тестирования выкладывать что-то постабильнее.

Возникают вопросы.

Во-первых, так как многие задачи занимают месяцы, то напрашивается вывод, что стабильная и девелоперская ветки будут существовать параллельно по 6-12 месяцев (время между релизами). Не приведет ли это к глубокой дестабилизации девелоперской ветки? Как с этим бороться? Каждый месяц заводить новую девелоперскую ветку из стабильной?

Во-вторых, как организовать merging кода в стабильную ветку, а именно, каждый сливает свои коммиты, или это делает только специально обученный сотрудник?
Re: scm development branch - stable trunk
От: rlabs Россия  
Дата: 12.10.10 19:59
Оценка:
Здравствуйте, Xentrax, Вы писали:

X>Есть много кода, который активно меняется.

X>Во-первых, так как многие задачи занимают месяцы, то напрашивается вывод, что стабильная и девелоперская ветки будут существовать параллельно по 6-12 месяцев (время между релизами). Не приведет ли это к глубокой дестабилизации девелоперской ветки? Как с этим бороться? Каждый месяц заводить новую девелоперскую ветку из стабильной?

Код, который *весь* активно меняется — это из серии "Люблю, когда народ тусуется". Слона надо есть по кусочкам, всегда сохраняя стабильную часть.
Полгода на feature branch — многовато.

X>Во-вторых, как организовать merging кода в стабильную ветку, а именно, каждый сливает свои коммиты, или это делает только специально обученный сотрудник?


Вообще это зависит от существующей культуры и процессов в команде.

Полезные ссылки:
http://www.martinfowler.com/articles/continuousIntegration.html
http://www.perforce.com/perforce/bestpractices.html
Alex Nikulin
Yota Lab
Re: scm development branch - stable trunk
От: LF  
Дата: 13.10.10 06:29
Оценка:
Мне нравится идеология ветка на задачу.
Интеграция в транк делает тот, кто ответственен за приемку задачи и код ревью.
Таким образом в транке всегда проверенный и стабильный код ( более менее ).
Для тестов или отращивается ветка или просто помечается тегом(меткой) какая либо ревизия.
Re: scm development branch - stable trunk
От: maxim.ge Россия  
Дата: 13.10.10 06:52
Оценка: 17 (2)
Здравствуйте, Xentrax, Вы писали:

X>Во-первых, так как многие задачи занимают месяцы, то напрашивается вывод, что стабильная и девелоперская ветки будут существовать параллельно по 6-12 месяцев (время между релизами). Не приведет ли это к глубокой дестабилизации девелоперской ветки? Как с этим бороться? Каждый месяц заводить новую девелоперскую ветку из стабильной?


X>Во-вторых, как организовать merging кода в стабильную ветку, а именно, каждый сливает свои коммиты, или это делает только специально обученный сотрудник?


То, что Вы описываете, называется Fеature branch, ветка на каждую задачу.

Перевод хорошей статьи по поводу этого есть тут:
http://scm-notes.blogspot.com/2010/09/branch-per-task-workflow-explained.html
Там же можно почитать и "бодания" вокруг.

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

По своему опыту замечу, что длинные задачи вызывают проблемы со слиянием веток, чем длиннее задача, тем больше проблемы.

Поэтому мы предпочитаем работать в trunk по максимуму, делая ветки лишь по необходимости. Однако, у нас из методологий используются SCRUM + TDD, что означает:
1) Версии выпускаются часто
2) Задачи покрыты unit-тестами
3) Есть еще и интеграционные тесты.

Т.е. длинных задач в отдельных ветках у нас в принципе не бывает ( и вообще длинных задач в месяцы), в trunk, как правило, попадает только хорошее, сейчас вот введем практику Continious Integration и после каждого commit в trunk будет запускаться сборка с основными тестами, в случае ошибок будет происходить "раздача слонов", что, надеемся, еще более улучшит качество trunk.

Есть и критика практики Feature Branch, например
http://martinfowler.com/bliki/FeatureBranch.html

Я бы рекомендовал, если будете использовать Feature Branch
1) по мере возможности укоротить задачи, почаще интегрируясь со стабильной веткой. Т.е. длинная задача бьется на подзадачи, подзадачи по мере стабилизации сбрасываются в trunk, и их ветки удаляются.
2) Внедрить тестирование по commit в стабильную ветку. Или хотя бы компиляцию и сборку всего проекта.
Re: scm development branch - stable trunk
От: Aquary Россия https://wmspanel.com/
Дата: 13.10.10 10:52
Оценка:
Здравствуйте, Xentrax, Вы писали:

X>Возникают вопросы.


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

http://scm-notes.blogspot.com/p/software-configuration-management.html

Ну просто всё, что можно было бы здесь написать — там уже есть.
Две первые ссылки, когда перейдешь по указанной ссылке — это статьи на самом RSDN, так что далеко ходить не надо
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming
https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
http://scm-notes.blogspot.com/ — Блог об управлении конфигурацией
Re: scm development branch - stable trunk
От: Аноним  
Дата: 14.10.10 00:45
Оценка:
Здравствуйте, Xentrax, Вы писали:

X>Есть много кода, который активно меняется.


X>Надоело краснеть за дурацкие баги в daily builds нестабильного trunk, к тому же из-за специфики проекта приходится много времени тратить на проверку багрепортов. Хочется для тестирования выкладывать что-то постабильнее.


X>Возникают вопросы.


X>Во-первых, так как многие задачи занимают месяцы, то напрашивается вывод, что стабильная и девелоперская ветки будут существовать параллельно по 6-12 месяцев (время между релизами). Не приведет ли это к глубокой дестабилизации девелоперской ветки? Как с этим бороться? Каждый месяц заводить новую девелоперскую ветку из стабильной?


X>Во-вторых, как организовать merging кода в стабильную ветку, а именно, каждый сливает свои коммиты, или это делает только специально обученный сотрудник?


Возмите GIT и делайте rebase почаще.
Re: scm development branch - stable trunk
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.10.10 05:47
Оценка: 7 (1)
Здравствуйте, Xentrax, Вы писали:

X>Надоело краснеть за дурацкие баги в daily builds нестабильного trunk, к тому же из-за специфики проекта приходится много времени тратить на проверку багрепортов. Хочется для тестирования выкладывать что-то постабильнее.


Надоело — не краснейте. Как говорится, глупый пингвин робко прячет, умный — смело достаёт. Транк — на то и транк, чтобы в нём ловилось всё, что нужно, без необходимости краснеть. Краснеть надо уже за стабильные ветки.

"Много времени на проверку багрепортов" часто означает, что плохо устроено тестирование в своей среде. Больше используйте юниттесты, локальные и групповые функциональные тесты, интеграционные тесты. В идеале, каждый найденный баг должен быть обложен на будущее тестом какого-то из этих видов. Это же позволит и как можно раньше ловить "дурацкие баги", потому что простое make blackbox или make functest в проекте позволит выловить их заметную часть.

X>Во-первых, так как многие задачи занимают месяцы, то напрашивается вывод, что стабильная и девелоперская ветки будут существовать параллельно по 6-12 месяцев (время между релизами). Не приведет ли это к глубокой дестабилизации девелоперской ветки? Как с этим бороться? Каждый месяц заводить новую девелоперскую ветку из стабильной?


Бороться — административно и технически. Крупные изменения должны быть специально проверены и явно одобрены перед включением в девелоперские ветки; они должны быть разработаны в своих ветках и добавлены в общие только по какому-то явному успеху. Не надо бояться полного разноса, но надо периодически "освежать" такие целевые ветки общими изменениями — чтобы заранее выявлять логические и кодовые конфликты.

X>Во-вторых, как организовать merging кода в стабильную ветку, а именно, каждый сливает свои коммиты, или это делает только специально обученный сотрудник?


Лучше — каждый. Потому что он лучше знает, с чем и как может конфликтовать его коммит, нужно ли для слияния сделать что-то специфическое. Но решать, что можно и когда сливать, должен менеджер.

Стабильные ветки от своего рождения должны получать политику, что в них можно делать. Наиболее простой и практичный метод — ограничение активности по времени. На одной из моих работ это называется — зелёная, жёлтая и красная зона. Во FreeBSD, например, жёлтая — это code slush, красная — code freeze. Смысл в том, что в жёлтой зоне запрещены мержи новых фич, можно только лечить баги; в момент начала жёлтой зоны для ветки на неё напускается полный цикл тестов QA отдела (это не те тесты, что у программистов, это именно полевые испытания на живых установках). Красная зона — разрешаются только фатальные фиксы функциональности и фиксы защиты, при этом каждый коммит должен быть одобрен менеджером. По выпуску релиза на ветке она размораживается, но это не значит, что можно мержить всё подряд — в конце концов, ветки релизов значат не только внутреннее устройство, но и внешние связи, которые ломать без предупреждения — значит вредить всем.

Энное количество хороших статей по управлению ветками разработки есть, например, на хабре.
The God is real, unless declared integer.
Re[2]: scm development branch - stable trunk
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.10.10 05:49
Оценка:
Здравствуйте, rlabs, Вы писали:

R>Код, который *весь* активно меняется — это из серии "Люблю, когда народ тусуется". Слона надо есть по кусочкам, всегда сохраняя стабильную часть.

R>Полгода на feature branch — многовато.

У меня была фича, которая тянулась года два. Но таки да, ели по кусочкам — собирались логические микрореформы и затем они выливались в общие ветки, а в этой ветке готовилась следующая реформа.
The God is real, unless declared integer.
Re[3]: scm development branch - stable trunk
От: Aquary Россия https://wmspanel.com/
Дата: 14.10.10 06:02
Оценка:
Здравствуйте, netch80, Вы писали:

N>У меня была фича, которая тянулась года два. Но таки да, ели по кусочкам — собирались логические микрореформы и затем они выливались в общие ветки, а в этой ветке готовилась следующая реформа.


Пардон, а что такое "реформа" в данном случае? Релиз? Стабильная конфигурация? Baseline? Впервые слышу подобный термин в разрезе управления конфигурацией
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming
https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
http://scm-notes.blogspot.com/ — Блог об управлении конфигурацией
Re[4]: scm development branch - stable trunk
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.10.10 06:06
Оценка:
Здравствуйте, Aquary, Вы писали:

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


N>>У меня была фича, которая тянулась года два. Но таки да, ели по кусочкам — собирались логические микрореформы и затем они выливались в общие ветки, а в этой ветке готовилась следующая реформа.


A>Пардон, а что такое "реформа" в данном случае? Релиз? Стабильная конфигурация? Baseline? Впервые слышу подобный термин в разрезе управления конфигурацией


Реформа — это крупная переделка. Например, рефакторинг с выворотом логики наизнанку.
К управлению конфигурацией это действительно не имеет отношения.
The God is real, unless declared integer.
Re[2]: scm development branch - stable trunk
От: maxim.ge Россия  
Дата: 14.10.10 10:23
Оценка:
Здравствуйте, netch80, Вы писали:

N>Бороться — административно и технически. Крупные изменения должны быть специально проверены и явно одобрены перед включением в девелоперские ветки; они должны быть разработаны в своих ветках и добавлены в общие только по какому-то явному успеху. Не надо бояться полного разноса, но надо периодически "освежать" такие целевые ветки общими изменениями — чтобы заранее выявлять логические и кодовые конфликты.


Не очень понятно, откуда их освежать, если общие изменения сидят по целевым веткам и ждут явного успеха ?
Re[3]: scm development branch - stable trunk
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.10.10 10:55
Оценка:
Здравствуйте, maxim.ge, Вы писали:

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


N>>Бороться — административно и технически. Крупные изменения должны быть специально проверены и явно одобрены перед включением в девелоперские ветки; они должны быть разработаны в своих ветках и добавлены в общие только по какому-то явному успеху. Не надо бояться полного разноса, но надо периодически "освежать" такие целевые ветки общими изменениями — чтобы заранее выявлять логические и кодовые конфликты.


MG>Не очень понятно, откуда их освежать, если общие изменения сидят по целевым веткам и ждут явного успеха ?


Ну некоторые-то уже смержены в общие ветки? Вот их и надо в остальные целевые, чтобы ловить текстовые и логические конфликты.
The God is real, unless declared integer.
Re[4]: scm development branch - stable trunk
От: maxim.ge Россия  
Дата: 14.10.10 11:32
Оценка:
Здравствуйте, netch80, Вы писали:

N>Ну некоторые-то уже смержены в общие ветки? Вот их и надо в остальные целевые, чтобы ловить текстовые и логические конфликты.


Вот тут возникает вопрос — если есть юниттесты, локальные и групповые функциональные тесты, то почему бы их срабатывание не считать признаком "явного успеха" ? Т.е. написал код, прогнал тесты, получил "зелень" => слился со стабильной веткой. И то же самое делают остальные целевые, чтобы ловить текстовые и логические конфликты. Вот так, иными словами

Re[5]: scm development branch - stable trunk
От: Aquary Россия https://wmspanel.com/
Дата: 14.10.10 11:55
Оценка:
Здравствуйте, maxim.ge, Вы писали:


MG> Вот так, иными словами


Не забываем, что цитируемый Фаулер — приверженец continuous integration. Стало быть, не всем его аргументы подойдут.
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming
https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
http://scm-notes.blogspot.com/ — Блог об управлении конфигурацией
Re[6]: scm development branch - stable trunk
От: maxim.ge Россия  
Дата: 14.10.10 12:06
Оценка:
Здравствуйте, Aquary, Вы писали:

A>Не забываем, что цитируемый Фаулер — приверженец continuous integration. Стало быть, не всем его аргументы подойдут.


Совершенно согласен. Однако, если имеются озвученные "юниттесты, локальные и групповые функциональные тесты, интеграционные тесты" то применение практики CI прямо-таки напрашивается.
Re[5]: scm development branch - stable trunk
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 15.10.10 09:20
Оценка:
Здравствуйте, maxim.ge, Вы писали:

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


N>>Ну некоторые-то уже смержены в общие ветки? Вот их и надо в остальные целевые, чтобы ловить текстовые и логические конфликты.


MG>Вот тут возникает вопрос — если есть юниттесты, локальные и групповые функциональные тесты, то почему бы их срабатывание не считать признаком "явного успеха" ? Т.е. написал код, прогнал тесты, получил "зелень" => слился со стабильной веткой. И то же самое делают остальные целевые, чтобы ловить текстовые и логические конфликты. Вот так, иными словами


В общем-то обычно так и делается — реализованная и проверенная тестами фича вливается в общий поток. По крайней мере везде, где я работал, было именно так. Есть административный вопрос — какие тесты считать достаточными — но он решается относительно легко.

Проблема возникает дальше — когда у тебя возникает вести необходимость формально у одной версии вести несколько "потоков" разработки с разными свойствами — обычно это называется trains (и как это блин перевести?). Например, этим сильно отличилась Cisco: у Cisco IOS есть обычный трейн (типа по умолчанию), T, T1, T2 (эти тестовые для новых фич), S, SX, SR... — эти, наоборот, ориентированы на стабильность (S — от service provider)... Основная проблема — в разделении изменений — какие из них можно "оторвать" от прочих в ветке, выделить отдельно и протестировать. Тут регулярно натыкаешься на недоработки и взаимовлияния, приходится догонять другими вещами, которые не планировались... вот тут собственно нужно умение выделить логические связи и избежать лишнего.
The God is real, unless declared integer.
Re[6]: scm development branch - stable trunk
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 15.10.10 09:22
Оценка:
Здравствуйте, Aquary, Вы писали:

A>Здравствуйте, maxim.ge, Вы писали:


MG>> Вот так, иными словами


A>Не забываем, что цитируемый Фаулер — приверженец continuous integration. Стало быть, не всем его аргументы подойдут.


Так не требуется доводить применение чужих техник до абсурда. Вообще, по отношению к любой подобной методике работает один общий метод — проверить на соответствие задаче... может, она вообще из другого мира (по Joel'у)
The God is real, unless declared integer.
Re[7]: scm development branch - stable trunk
От: Aquary Россия https://wmspanel.com/
Дата: 15.10.10 11:16
Оценка:
Здравствуйте, netch80, Вы писали:

N>Так не требуется доводить применение чужих техник до абсурда. Вообще, по отношению к любой подобной методике работает один общий метод — проверить на соответствие задаче... может, она вообще из другого мира (по Joel'у)


Тут с ним согласен. Сам не устаю повторять — инструмент и процесс всегда выбираются под задачу.
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming
https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
http://scm-notes.blogspot.com/ — Блог об управлении конфигурацией
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.