Примерно полгода назад мне было поручено провести исследование, чтобы ответить на этот вопрос. Вот резюме, основанное на изученных ссылках (перечисленных ниже)
http://msdn.microsoft.com/en-us/library/aa730834%28v=vs.80%29.aspx
... Выбор лучшей стратегии ветвления - это балансирование. Вы должны компенсировать рост производительности за счет увеличения риска. Один из способов проверки выбранной стратегии - рассмотреть сценарий изменения. Например, если вы решите выровнять ветви с архитектурой системы (например, ветвь представляет системный компонент) и ожидаете значительных архитектурных изменений, вам может потребоваться реструктурировать свои ветви и связанные процессы и политики с каждым изменением. Выбор неадекватной стратегии ветвления может привести к накладным расходам процесса и длительным циклам интеграции и выпуска, что приводит к разочарованию для всей команды ...
http://www.cmcrossroads.com/bradapp/acme/branching/
... Частая, постепенная интеграция является одним из признаков успеха, а ее отсутствие часто является признаком неудачи. Современные методы управления проектами имеют тенденцию избегать строгих моделей водопадов и охватывают спиралевидные модели итеративного / поэтапного развития и эволюционной доставки. Стратегии инкрементальной интеграции, такие как Merge Early и Часто и их варианты, представляют собой форму управления рисками, которая пытается избавиться от риска на ранних этапах жизненного цикла, когда есть больше времени для реагирования на него. Регулярность ритма между интеграциями рассматривается [Booch], [McCarthy] и [McConnell] в качестве ведущего показателя здоровья проекта (например, «пульс» или «сердцебиение»).
Мало того, что ранняя и частая интеграция раскрывает риск раньше и в меньших «кусках», она также сообщает об изменениях между товарищами по команде ...
http://www.codinghorror.com/blog/2007/10/software-branching-and-parallel-universes.html
... В большинстве систем контроля версий вы можете создавать сотни веток без каких-либо проблем с производительностью; это умственные затраты на отслеживание всех тех ветвей, о которых вам действительно нужно беспокоиться ... Ветвление - это сложный зверь. Есть десятки способов ветвления, и никто не может сказать вам, правильно вы это делаете или нет ...
http://www.lostechies.com/blogs/derickbailey/archive/2010/02/24/branching-strategies-when-to-branch-and-merge.aspx
... Есть много аспектов системы, которые следует учитывать при ветвлении вашего кода ... В конце концов, цель состоит в том, чтобы предоставить песочницу для контекста, в котором пишется код. Понимание доступных опций, когда каждый из них лучше всего подходит к текущей ситуации, и стоимость этих опций поможет вам решить, как и когда переходить ...
http://www.snuffybear.com/ucm_branch.htm
Обратите внимание, что с учетом других ссылок, перечисленных здесь, утверждение автора о том, что «в данной статье описываются три ключевые модели ветвления, используемые в проектах разработки программного обеспечения» , не выглядит оправданным. Используемая терминология не выглядит широко распространенной ( EFIX , Model-1,2,3 и т. Д.).
http://svn.haxx.se/users/archive-2007-10/att-0101/SCMBranchingModels-talkback.pdf В
справочном материале представлен интересный пример трудностей, связанных с передачей стратегий ветвления.
http://simpleprogrammer.com/2010/06/04/simple-branching-strategy-part-1-back-to-basics/
... Сохраняйте это простым. На мой взгляд, наилучшим подходом является работа непосредственно с багажника.
Это звучит почти как ересь, когда я на самом деле печатаю его на экране, но если вы на мгновение потерпите меня, я не только покажу вам, почему я считаю, что это важно для Agile-процесса, но я покажу вам, как заставить его работать ...
... Если бы мне пришлось основывать свои рассуждения на одном веском аргументе, это была бы ценность непрерывной интеграции. Я написал в блоге о значении КИ и лучших практиках в прошлом. Я довольно большой сторонник CI ...
... Вы действительно должны задать себе вопрос здесь: «Все ли накладные расходы, которые вы несете в результате выполнения своей сложной стратегии ветвления и слияния, приводят к реальной ценности, которой не существует по сравнению с более простой стратегией?» ...
.. Стратегия, которую я эффективно использовал в прошлом и развивалась с течением времени. Я кратко подведу итог здесь.
- Все работают от ствола.
- Ветвь, когда вы отпускаете код.
- Отключите выпуск, когда вам нужно создать исправление ошибки для уже выпущенного кода.
- Отделение для прототипов.
...
http://www.codelathe.com/blog/index.php/2009/07/02/a-svn-branching-strategy-that-works/
... Наконец, помните, что не существует идеальной стратегии ветвления и слияния. Это в значительной степени зависит от вашей уникальной среды разработки ...
http://blog.perforce.com/blog/?cat=62
... В худшем случае вы вводите проблему "семантического слияния", когда результат автоматического слияния неверен, но компилируется нормально и проходит мимо тестирование, возможно, даже длится достаточно долго, чтобы быть видимой клиентом ошибкой. Ик!
Добавляя оскорбление к травме, поскольку они могут дольше избежать обнаружения, проблемы с семантическим слиянием труднее исправить позже, поскольку изменение больше не является свежим в сознании разработчика, который создал это изменение. (Обычно лучше объединить изменения вскоре после их внесения, в идеале разработчиком, который инициировал изменение, если это целесообразно) ...
https://stackoverflow.com/questions/34975/branching-strategies
Члены сообщества делятся различным опытом в различных проектах с использованием различных стратегий ветвления. Нет согласованного консенсуса по «лучшему» или «худшему».
http://www.stickyminds.com/s.asp?F=S16454_COL_2
По существу, краткое изложение материала, представленного в http://oreilly.com/catalog/practicalperforce/chapter/ch07.pdf
- http://www.stickyminds.com/s.asp?F=S16511_COL_2
... Существует три распространенных подхода к решению, когда и как разветвляться:
- Создайте ветвь релиза, когда вы «полностью готовы», и планируйте исправлять проблемы, возникающие в последнюю минуту в этой строке кода. В этом случае ветвь релиза на самом деле представляет собой «строку кода подготовки к выпуску», как описано в шаблонах управления конфигурацией программного обеспечения , так как вы ожидаете, что еще предстоит проделать работу.
- Измените свой стиль работы, чтобы избежать окончательной интеграции, отработки активной линии разработки.
- Ветка для новой работы путем создания ветки задач и объединения этой работы в активную линию разработки после завершения выпуска.
... Обоснованием ветвления является изоляция кода в конце выпуска, чтобы он мог стабилизироваться. Изоляция посредством ветвления часто маскирует проблему качества, которая в конечном итоге проявляется в дополнительных затратах на поддержание параллельных потоков перед выпуском продукта. Ветвление легко. Скорее, это сложное объединение и когнитивные издержки понимания того, как происходят изменения между ветвями, поэтому важно выбрать процесс, который минимизирует стоимость ветвления и объединения ...
http://nvie.com/posts/a-successful-git-branching-model/ Git-ориентированная стратегия.
... Мы считаем origin / master основной ветвью, где исходный код HEAD всегда отражает состояние готовности к работе .
Мы считаем, что origin / development является основной ветвью, где исходный код HEAD всегда отражает состояние с последними внесенными изменениями разработки для следующего выпуска. Некоторые называют это «интеграционной ветвью». Это где любые автоматические ночные сборки строятся из ....
http://svnbook.red-bean.com/en/1.5/svn.branchmerge.html
... Политики проекта сильно различаются в зависимости от того, когда именно уместно создать ветку элементов. Некоторые проекты вообще никогда не используют ветви функций: коммиты на / trunk являются бесплатными для всех. Преимущество этой системы в том, что она проста - никому не нужно узнавать о ветвлении или слиянии. Недостатком является то, что транковый код часто нестабилен или непригоден для использования. Другие проекты используют ветвь до крайности: никаких изменений не всегда стремятся к стволу непосредственно. Даже самые тривиальные изменения создаются в недолгой ветке, тщательно проверяются и объединяются в ствол. Тогда ветка удаляется. Эта система гарантирует исключительно стабильную и пригодную для использования магистраль в любое время, но за счет огромныхнакладные расходы процесса.
Большинство проектов используют промежуточный подход. Они обычно настаивают на том, чтобы / trunk компилировал и проходил регрессионные тесты всегда. Функциональная ветвь требуется только тогда, когда изменение требует большого количества дестабилизирующих фиксаций. Хорошее практическое правило - задать этот вопрос: если разработчик работал в течение нескольких дней в изоляции, а затем совершил большое изменение сразу (так, чтобы / trunk никогда не был дестабилизирован), будет ли это слишком большим изменением для проверки? Если ответ на этот вопрос «да», изменение должно быть разработано в ветви функций. Поскольку разработчик вносит постепенные изменения в ветку, они могут быть легко просмотрены коллегами.
Наконец, возникает вопрос о том, как лучше поддерживать ветвь функции в «синхронизации» со стволом в процессе работы. Как мы упоминали ранее, существует большой риск работать на ветке в течение недель или месяцев; Изменения в стволе могут продолжать вливаться до такой степени, что две линии развития будут настолько сильно различаться, что это может стать кошмаром, пытаясь слить ветку обратно в ствол.
Эту ситуацию лучше всего избегать путем регулярного объединения изменений магистрали в ветку. Составьте политику: раз в неделю объединяйте изменения в магистрали за последнюю неделю с веткой ...
http://thedesignspace.net/MT2archives/000680.html
... Этот раздел учебника по Eclipse CVS основан на статье Пола Глезена на веб-сайте Eclipse: ветвление с Eclipse и CVS и используется с его разрешения в соответствии с условиями лицензия EPL. Изменения, которые я делаю в его версии, в основном заключаются в том, чтобы расширять ее, добавляя пошаговые изображения и объяснения, и интегрировать ее с моими собственными учебниками для начинающих, чтобы сделать ее более доступной для начинающих и дизайнеров. Опытные разработчики, вероятно, предпочтут работать с версией Пола ...
http://learnsoftwareprocesses.com/2007/12/29/common-branching-strategies/
... Вот некоторые из распространенных моделей ветвления:
- Модель ветвления за выпуском. Одной из наиболее распространенных стратегий ветвления является согласование веток с выпусками продукта. Филиал содержит все ресурсы для разработки программного обеспечения для одного выпуска. Иногда обновления должны быть объединены из одного выпуска в другой, но обычно они никогда не объединяются. Филиалы будут прекращены после выхода релиза.
- Ветвление на продвижение. Другой очень распространенный подход - это согласование веток с уровнями продвижения программного обеспечения. Конкретная версия разработки разветвляется на ветку Test, в которой выполняется вся интеграция и тестирование системы. После завершения тестирования ресурсы для разработки программного обеспечения разветвляются на производственную ветвь и в конечном итоге развертываются.
- Ветка на задачу. Чтобы избежать дублирования задач (или действий) и снижения производительности, вы можете изолировать их в отдельной ветке. Имейте в виду, что это краткосрочные ветви, которые должны быть объединены, как только задача будет выполнена, так как в противном случае требуемые усилия по объединению могут превысить преимущества в производительности, связанные с их созданием.
- Ветвь на компонент: вы можете выровнять каждую ветвь в соответствии с архитектурой системы. В этой стратегии вы разветвляете отдельные компоненты (или подсистемы). Затем каждая группа, разрабатывающая компонент, решает, когда объединить свой код обратно в линию разработки, которая служит в качестве ветви интеграции. Эта стратегия может хорошо работать, если имеется системная архитектура и отдельные компоненты имеют четко определенные интерфейсы. Тот факт, что вы разрабатываете компоненты в филиалах, позволяет более детально контролировать ресурсы разработки программного обеспечения.
- Ветвление на одну технологию: еще одна стратегия ветвления, согласованная с архитектурой системы. В этом случае ветви ориентированы на технологические платформы. Общий код управляется в отдельной ветке. Из-за уникальной природы активов разработки программного обеспечения, управляемых в филиалах, они, вероятно, никогда не сливаются ...
http://msdn.microsoft.com/en-us/library/bb668955.aspx
... См. рекомендации по ветвлению и слиянию в «Руководстве по управлению исходным кодом» в этом руководстве для получения краткого описания рекомендаций по ветвлению и слиянию. ... При ветвлении учитывайте следующее:
- Не выполняйте ветвление, если вашей команде разработчиков не нужно одновременно работать с одним и тем же набором файлов. Если вы не уверены в этом, вы можете пометить сборку и создать ветку из этой сборки на более позднем этапе. Объединение веток может быть трудоемким и сложным, особенно если между ними происходят значительные изменения.
- Структурируйте деревья ветвей так, чтобы вам нужно было объединяться только по иерархии (вверх и вниз по дереву ветвей), а не по иерархии. Ветвление по всей иерархии требует использования безосновательного слияния, которое требует более ручного разрешения конфликтов.
- Иерархия ветвлений основана на родительских ветвях и дочерних ветвях, которые могут отличаться от физической структуры исходного кода на диске. При планировании слияний учитывайте логическую структуру ветвей, а не физическую структуру на диске.
- Не разветвляйтесь слишком глубоко. Поскольку для выполнения каждого конфликта слияния и разрешения конфликтов требуется время, глубокая структура ветвления может означать, что изменения в дочерней ветви могут занять очень много времени для распространения на основную ветвь. Это может негативно повлиять на графики проекта и увеличить время на исправление ошибок.
- Ветка на высоком уровне и включает конфигурационные и исходные файлы.
- Развивайте свою ветвящуюся структуру со временем.
- Для слияния требуется, чтобы один или несколько разработчиков выполнили слияние и разрешили конфликты. Объединенный источник должен быть тщательно протестирован, потому что нередко принимаются неверные решения о слиянии, которые могут дестабилизировать сборку.
- Объединение по иерархии ветвей особенно сложно и требует от вас вручную обрабатывать многие конфликты, которые в противном случае могли бы быть обработаны автоматически.
Решение о создании ветви может быть сведено к тому, будет ли стоимость слияния конфликтов в реальном времени выше, чем накладные расходы на слияние конфликтов между ветвями ...
http://kashfarooq.wordpress.com/2009/11/23/bazaar-branching-strategy-with-a-subversion-trunk/
- http://kashfarooq.wordpress.com/2010/12/16/bazaar-branching-strategy-with-a-subversion-trunk-revised/
- http://kashfarooq.wordpress.com/2009/11/02/using-bazaar-feature-branches-with-a-subversion-trunk/
- http://kashfarooq.wordpress.com/2009/09/08/bazaar-or-git-moving-away-from-subversion/
... Любая из этих жалоб Subversion звучит знакомо?
- Вы случайно указали, что «вам нужно запустить обновление». Затем вы делаете обновление - которое занимает целую вечность. И, наконец, вы видите, что не было никаких изменений, которые нужно было загружать.
- Вы случайно получаете указание, что «вам нужно запустить очистку».
- У вас огромные проблемы слияния. Например, вы используете ReSharper для переименования класса, а некоторые еще обновили этот класс за это время. Затем вы видите ужасную ошибку конфликта дерева (дрожь). Или, что еще хуже, вы переименовываете все пространство имен и папку (двойная дрожь). Теперь вы действительно в мире боли.
- Ваши слияния имеют тенденцию быть все более и более ручным. Вам часто приходится использовать WinMerge, потому что Subversion не имеет понятия.
- Вы часто ждете, пока Tortoise обновит / проверит наличие каких-либо изменений.
У меня есть хранилище Subversion на USB-накопителе. Я получаю конфликты деревьев и сливаю проблемы с этим, и я единственный пользователь!
Основная проблема - слияние ...
- "Subversion Sucks" звучит знакомо. Время слушать Джоэла и Линуса ?
http://social.msdn.microsoft.com/Forums/en/tfsversioncontrol/thread/f127676c-8f05-410c-9a30-0eb43a26a9fa
обсуждение наилучшей практики для стратегии ветвления изоляции релизов в случае развивающихся систем.
http://branchingguidance.codeplex.com/
"Руководство по ветвлению на сервере Microsoft Team Foundation Server" - обширный и подробный документ с рекомендациями для разных проектов: здесь HTML-версия . Доказывает, что Microsoft не верит в универсальный подход к стратегиям ветвления.
https://stackoverflow.com/questions/597707/best-branching-strategy-when-doing-continuous-integration
Какую стратегию ветвления лучше использовать, если вы хотите осуществлять непрерывную интеграцию? ... Ответ зависит от размера вашей команды и качества исходного контроля и способности правильно объединять сложные наборы изменений ...
- http://www.zeroturnaround.com/blog/continuous-integration-and-feature-branches/
более детальный анализ взаимодействия ветвления с непрерывной интеграцией, основанный на конкретном опыте с Hudson / Jenkins - вместе с парой полезных ссылок
. Моим величайшим открытием было то, что, хотя КИ касается фиксации, подталкивания и получения обратной связи (т. Е. Кластер КИ предоставляет вам обратную связь, которую ваша рабочая станция никогда не сможет дать вам за такое же время), истинный пуристический КИ на самом деле имеет еще одно требование - что команда должна работать на той же базовой линии ...
Использованные материалы
http://codicesoftware.blogspot.com/2010/03/branching-strategies.html
... CVS и SVN не одобряли всю стратегию ветвления / слияния, поскольку они не могли этого сделать ... ... Простое правило: создайте ветку задач для каждой новой функции или исправления, которое вы хотите внедрить ... Для пользователей SVN / CVS это может показаться излишним, но вы знаете, что любой современный SCM позволит вам создавать ветки за секунду, так что никаких накладных расходов нет.
Важное примечание: если вы внимательно посмотрите на это, то увидите, что я говорю об использовании ветвей задач в качестве богатых списков изменений ...
http://publib.boulder.ibm.com/infocenter/cchelp/v7r0m1/index.jsp?topic=/com.ibm.rational.clearcase.cc_proj.doc/c_bntr_plnbrstrat.htm
... Политика ветвления зависит от разработки Цели проекта и обеспечивает механизм для управления развитием кодовой базы. Вариантов политики ветвления так же много, как и организаций, использующих систему управления версиями Rational ClearCase. Но есть также сходства, которые отражают общую приверженность лучшим практикам ...
http://blogs.open.collab.net/svn/2007/11/branching-strat.html
... Модель Subversion (или более общая модель с открытым исходным кодом) - это то, что показано в нестабильной модели соединительных линий. ,
http://en.wikipedia.org/wiki/Trunk_%28software%29
В области разработки программного обеспечения транк ссылается на неназванную ветвь (версию) файлового дерева под управлением ревизии . Магистраль, как правило, должна быть основой проекта, на котором развивается развитие. Если разработчики работают исключительно над стволом, он всегда содержит самую последнюю версию проекта, но, следовательно, также может быть самой нестабильной версией. Другой подход состоит в том, чтобы отделить ветвь от магистрали, внедрить изменения в этой ветке и объединить изменения обратно в ствол, когда ветвь доказала свою стабильность и работоспособность. В зависимости от режима разработки и коммитаПолитика транк может содержать наиболее стабильную или наименее стабильную версию или что-то промежуточное.
Часто основная работа разработчика происходит в транке, а стабильные версии разветвляются, а иногда исправления ошибок объединяются из веток в транк. Когда разработка будущих версий выполняется в ветвях, не являющихся магистральными, обычно это делается для проектов, которые не меняются часто, или когда изменение, как ожидается, займет много времени для разработки, пока оно не будет готово для включения в магистраль. ,
http://www.mcqueeney.com/roller/page/tom/20060919
... Это заметки из вебинара по передовым методам Subversion , проведенного 30 августа 2006 г. CollabNet. ... Две организационные стратегии: нестабильный ствол против стабильного ствола ... ... ПРЕДПОЧИТАЙТЕ нестабильный ствол, когда это возможно ...
https://stackoverflow.com/questions/153812/subversion-is-trunk-really-the-best-place-for-the-main-development
В SVN транк - рекомендуемое место для основной разработки, и я использую это соглашение для всех моих проектов. Тем не менее, это означает, что транк иногда нестабилен или даже сломан ... ... не лучше ли выполнять "дикую разработку" в некоторой ветке, такой как / branch / dev, и объединяться с транком только при разумной сборке твердое вещество?
- ... Ствол - это то место, где должно происходить текущее развитие. У вас действительно не должно быть проблем с «сломанным» кодом, если все проверяют свои изменения перед их фиксацией. Хорошее практическое правило - обновлять (получать весь последний код из репозиториев) после того, как вы закодировали свои изменения. Затем соберите и проведите несколько юнит-тестов. Если все построено и работает, вам следует проверить это ...
- ... Нету багажник не лучшее место. В нашей организации мы всегда придерживаемся такого подхода: Trunk содержит код выпуска, поэтому он всегда компилируется. С каждым новым выпуском / вехой мы открываем новую ветку. Всякий раз, когда разработчик владеет элементом, он / она создает новую ветвь для этой ветки выпуска и объединяет ее в ветку выпуска только после тестирования. Ветвь релиза объединяется в транк после тестирования системы ...
http://blog.yclian.com/2009/03/working-on-branches-and-stable-trunk.html
... Я работал над стволом, потому что для всех проектов, над которыми я работал, это либо я единственный разработчик или команда гарантировали, что каждая регистрация кода прошла локальные тесты. В противном случае мы создали (мы все еще) ветки для исправления ошибок, большой код для новых функций и т. Д.
Около 2 месяцев назад у меня была короткая сессия с Камалом, и он поделился со мной идеей истории / ветки . И так как моя команда начала расти с большим количеством разработчиков, я чувствую необходимость поощрять больше ветвлений, и теперь это стало правилом. Для проекта с автоматическими тестами, определенными с настройкой CI, стабильная магистраль гарантирована, и эта практика может очень хорошо в нее вписаться.
Мы используем не git, а Subversion, потому что так мы начинали, и сейчас мы по-прежнему довольны им (большую часть времени) ...
http://www.ericsink.com/scm/scm_branches.html
Это часть онлайновой книги под названием Source Control HOWTO , руководство по передовым методам управления исходным кодом, контроля версий и управления конфигурацией ...
... Предпочитаемое ветвление Эрика Тренируйтесь ... Держите "в основном нестабильный" багажник. Активно развивайтесь в стволе, стабильность которого возрастает по мере приближения к релизу. После отправки создайте ветку обслуживания и всегда сохраняйте ее очень стабильной ...
... В следующей главе я углублюсь в тему объединения веток ...
http://marc.info/?l=forrest-dev&m=112504297928196&w=2
Начальная почта потока, обсуждающего стратегии ветвления для проекта Apache Forrest
- Обратите внимание, что в настоящее время проект использует нестабильную модель ствола с ветвями релиза:
- «Работа по разработке выполняется на магистрали SVN ... Существуют« ветки релизов »SVN, например, forrest_07_branch». ( руководство проекта )
- «Создание пакетов-релизов-кандидатов ... 17. Создание ветки обслуживания в SVN ...» ( Как выпустить )
Документы о ветвлении CVS O'Reilly:
http://commons.oreilly.com/wiki/index.php/Essential_CVS/Using_CVS/Tagging_and_Branching#Basically_stable
- ... Принципиально стабильная ветвление утверждает, что ствол должен содержать данные проекта, которые всегда близки к готовности к выпуску ... ... Более мягкие варианты этой философии позволяют объединить все, что проходит модульное тестирование разработчика, с багажник. Такой непринужденный подход требует, чтобы кандидат на релиз был разветвлен и прошел полный анализ качества перед публикацией ...
- ... Принципиально нестабильная философия утверждает, что транк должен содержать самый последний код, независимо от его стабильности, и что кандидаты на выпуск должны быть разветвлены для обеспечения качества.
... Более мягкие вариации также позволяют создавать ветки для экспериментального кода, рефакторинга и другого кода для особых случаев. Объединение филиала обратно в ствол осуществляется менеджерами филиала. ...
- Примечание выше ресурс не появился ни в одном из выполненных мной поисков (рекомендации, связанные с CVS, больше не популярны?)
Лучшие практики в SCM (статья о выполнении) по адресу
http://www.perforce.com/perforce/papers/bestpractices.html
... шесть общих областей развертывания SCM и некоторые грубые лучшие практики в каждой из этих областей. В следующих главах объясняется каждый элемент ...
Рабочие пространства, Строки кода, Ветвление, Распространение изменений, Сборки, Процесс ...