Приблизно півроку тому мені було призначено виконати дослідження, щоб відповісти на це питання. Ось резюме на основі вивчених посилань (перелічено нижче)
http://msdn.microsoft.com/en-us/library/aa730834%28v=vs.80%29.aspx
... Визначення найкращої стратегії розгалуження є актом врівноваження. Ви повинні торгувати підвищенням продуктивності проти підвищеного ризику. Одним із способів підтвердження обраної стратегії є розгляд сценарію змін. Наприклад, якщо ви вирішили вирівняти гілки з архітектурою системи (наприклад, гілка являє собою системний компонент), і ви очікуєте значних архітектурних змін, можливо, вам доведеться реструктурувати свої гілки та пов'язані з ними процеси та політики з кожною зміною. Вибір неадекватної стратегії розгалуження може спричинити накладні витрати та тривалі цикли інтеграції та випуску, які виявляють розчарування для всієї команди ...
http://www.cmcrossroads.com/bradapp/acme/branching/
... Часта, поступова інтеграція є одним із знаків успіху, і її відсутність часто є характеристикою невдач. Сучасні методи управління проектами, як правило, уникають суворих моделей водоспадів та охоплюють спіралеподібні моделі ітеративного / поступового розвитку та еволюційного забезпечення. Стратегії поступової інтеграції, як-от Раннє і часто злиття та його варіанти, є формою управління ризиками, яка намагається вивести ризик на початку життєвого циклу, коли на це більше часу відповісти. Регулярність ритму між інтеграціями розглядають [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 процесу, але я покажу тобі, як щоб змусити його працювати ...
... Якби мені довелося базувати свої міркування на одному твердому аргументі, це було б значенням безперервної інтеграції. Я обговорював цінність ІС та найкращі практики в минулому. Я досить великий прихильник КІ ...
... Ви справді повинні задати собі запитання тут: "Чи все, що ви накладаєте на себе, виконуючи ваші складні стратегії розгалуження та об'єднання, призводять до справжнього значення, яке не існує для більш простої стратегії?" ...
.. .Стратегія, яку я ефективно використовував у минулому і розроблялася з часом. Я коротко підсумую тут.
- Кожен працює з багажника.
- Відділіться, коли ви випустите код.
- Відключіть випуск, коли вам потрібно створити виправлення помилок для вже випущеного коду.
- Відділення для прототипів.
...
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.
... Ми вважаємо , походженням / господаря бути основною галуззю , де вихідний код КЕРІВНИКА завжди відображає готове стан.
Ми вважаємо походження / розробку головною гілкою, де вихідний код HEAD завжди відображає стан із останніми внесеними змінами розвитку для наступного випуску. Дехто назвав би це "галуззю інтеграції". Тут будуються будь-які автоматичні нічні побудови з ....
http://svnbook.red-bean.com/en/1.5/svn.branchmerge.html
... Політика проектів значною мірою залежить від того, коли саме доцільно створити гілку функцій. Деякі проекти взагалі ніколи не використовують гілки функцій: комісії до / trunk є безкоштовними для всіх. Перевага цієї системи полягає в тому, що вона проста - нікому не потрібно дізнаватися про розгалуження або злиття. Недоліком є те, що код магістралі часто нестабільний або непридатний для використання. Інші проекти вкрай використовують гілки: жодна зміна ніколи не здійснюється безпосередньо магістралі. Навіть найтривітніші зміни створюються на короткочасній гілці, ретельно переглядаються і зливаються в стовбур. Потім гілку видаляють. Ця система гарантує надзвичайно стабільний та зручний багажник у будь-який час, але ціною величезноюобробляти накладні витрати.
Більшість проектів мають підхід в середині дороги. Вони зазвичай наполягають на тому, що / магістраль збирається та проходить регресійні тести в усі часи. Гілка функції потрібна лише тоді, коли для зміни потрібна велика кількість дестабілізуючих комітетів. Добре правило - задати це питання: якби розробник працював цілими днями в ізоляції, а потім здійснив велику зміну всі відразу (щоб / багажник ніколи не дестабілізувався), чи було б це занадто великою зміною для перегляду? Якщо відповідь на це запитання - «так», зміна має бути розроблена на функції функції. Оскільки розробник здійснює додаткові зміни у галузі, вони можуть бути легко переглянуті однолітками.
Нарешті, виникає питання про те, як найкраще утримувати гілку функції в "синхронізації" зі стовбуром у міру прогресування роботи. Як ми вже згадували раніше, існує великий ризик працювати у філії тижнями чи місяцями; Зміни стовбура можуть продовжуватись розливатися до того моменту, коли дві лінії розвитку настільки сильно відрізняються, що це може стати кошмаром, який намагається злити гілку назад до стовбура.
Такої ситуації найкраще уникати шляхом регулярного злиття змін стовбура до гілки. Складіть політику: один раз на тиждень об'єднуйте варті зміни стовбура минулого тижня у галузь ...
http://thedesignspace.net/MT2archives/000680.html
... Цей розділ підручника CVS Eclipse базується на статті Пола Глізена на веб-сайті Eclipse: Розгалуження з Eclipse та CVS та використовується з його дозволу на умовах ліцензія EPL Зміни, які я вношу до його версії, полягають головним чином у тому, щоб розширити її більш покроковими зображеннями та поясненнями та інтегрувати їх у власні підручники для початківців, намагаючись зробити її більш доступною для початківців та дизайнерів. Досвідчені розробники, мабуть, віддадуть перевагу роботі з версії Пола ...
http://learnsoftwareprocess.com/2007/12/29/common-branching-strategies/
... Ось деякі поширені моделі розгалуження:
- Модель відгалуження до випуску: Однією з найпоширеніших стратегій розгалуження є вирівнювання гілок з випусками продуктів. Філія зберігає всі засоби розробки програмного забезпечення для одного випуску. Іноді оновлення потрібно об'єднувати від одного випуску до іншого, але вони зазвичай ніколи не зливаються. Гілки будуть припинені, коли випуск буде звільнено.
- Відділення за акцією: Ще один дуже поширений підхід - узгодження гілок із рівнями просування програмних активів. Конкретна версія розробки розгалужена на тестову гілку, в якій виконується вся інтеграція та тестування системи. Після завершення тестування активи розробки програмного забезпечення розгалужуються у виробничій галузі та врешті-решт розгортаються.
- Відділення за завданням: Щоб уникнути перекриття завдань (або видів діяльності) та втрати продуктивності, можна виділити їх на окрему гілку. Майте на увазі, що це короткострокові гілки, які слід об'єднати, як тільки завдання буде виконано, бо в іншому випадку необхідні зусилля для злиття можуть в першу чергу перевищити переваги продуктивності їх створення.
- Відділення на компонент: Ви можете вирівняти кожну гілку з архітектурою системи. У цій стратегії ви розгалужуєте окремі компоненти (або підсистеми). Потім кожна команда, що розробляє компонент, вирішує, коли об'єднати свій код назад у лінію розробки, яка служить гілкою інтеграції. Ця стратегія може добре працювати, якщо є системна архітектура та окремі компоненти мають чітко визначені інтерфейси. Те, що ви розробляєте компоненти у галузях, дає змогу більш детально контролювати засоби розробки програмного забезпечення.
- Відділення за технологією: Ще одна стратегія розгалуження, узгоджена з архітектурою системи. У цьому випадку гілки вирівнюються до технологічних платформ. Загальним кодом керує окрема гілка. Завдяки унікальній природі активів розробки програмного забезпечення, що управляються у галузях, вони, ймовірно, ніколи не зливаються ...
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-revision/
- 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 не має поняття.
- Ви часто чекаєте, коли Черепаха оновлюється / перевіряє на зміни / що-небудь.
На моєму USB-накопичувачі є сховище для підривної роботи. У мене виникають конфлікти з деревами і зливаються з цим проблеми, і я єдиний користувач!
Основна проблема - це злиття ...
- "підривна смоктання" звучить звично. Час слухати Джоела та Лінуса ?
http://social.msdn.microsoft.com/Forums/en/tfsversioncontrol/thread/f127676c-8f05-410c-9a30-0eb43a26a9fa
обговорення кращої практики для випуску стратегії гілки ізоляції у випадку розвиваються систем.
http://branchingguidance.codeplex.com/
"Посібник з розгалуження сервера корпорації Microsoft Team Foundation" - величезний і детальний документ з рекомендаціями, пристосованими до різних проектів: тут розміщена HTML версія . Доводить, що Microsoft не вірить у стратегії розгалуження wrt одного типу, що підходить для всіх.
https://stackoverflow.com/questions/597707/best-branching-strategy-when-doing-continuous-integration
Яку найкращу стратегію розгалуження слід використовувати, коли ви хочете робити постійну інтеграцію? ... Відповідь залежить від розміру вашої команди та якості вашого джерела управління та здатності правильно об'єднати складні набори змін ...
- http://www.zeroturnaround.com/blog/continuous-integration-and-feature-branches/
Детальніший аналіз розгалуження взаємодії з постійною інтеграцією, заснований на конкретному досвіді з Хадсоном / Дженкінсом - разом з парою корисних посилань
.. . Моїм найбільшим відкриттям було те, що хоча CI збирається робити, натискати та отримувати зворотній зв'язок часто (тобто кластер CI надає вам зворотній зв'язок, що ваша робоча станція ніколи не може дати вам за той же час), справжній пуристський CI насправді має ще одну вимогу - що команді потрібно працювати на одній базовій лінії ...
Використовувані матеріали
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 магістраль є рекомендованим місцем для основної розробки, і я використовую цю конвенцію для всіх моїх проектів. Однак це означає, що стовбур іноді нестабільний або навіть зламаний ... ... чи не було б краще робити "дику розробку" на такій гілці, як / гілка / dev, і зливатися лише з магістральним, коли збірка розумно твердий?
- ... Стовбур - це місце, де має відбуватися постійний розвиток. У вас дійсно не повинно виникнути проблем із "зламаним" кодом, якщо кожен перевіряє свої зміни, перш ніж зробити їх. Добре правило - зробити оновлення (отримати весь останній код з репостів) після того, як ви зашифрували свої зміни. Потім складіть і зробіть тестування. Якщо все створюється і працює, вам слід добре перевірити це ...
- ... Нічний багажник - не найкраще місце. У нашій організації ми завжди дотримуємось такого підходу: Trunk містить код випуску, тому він завжди компілюється. З кожним новим випуском / віхою ми відкриваємо нове відділення. Щоразу, коли розробник володіє елементом, він / вона створює нову гілку до цієї гілки випуску та об’єднує її у гілку випуску лише після її тестування. Гілка випуску об'єднується в магістраль після тестування системи ...
http://blog.yclian.com/2009/03/working-on-branches-and-stable-trunk.html
... Раніше я працював на магістралі, оскільки для всіх проектів, над якими я працював, це я або був єдиний розробник або команда гарантували, що всі реєстрації коду пройшли місцеві тести. Інакше ми створили (ми все ще) гілки для виправлення помилок, великий код нових функцій тощо.
Близько 2 місяців тому я провів короткий сеанс git з Камалем, і він поділився зі мною ідеєю історії / гілки . І коли моя команда почала зростати з більшою кількістю хлопців-розробників, я відчував потребу заохочувати більше розгалуження, і тепер це стало правилом. Для проекту з автоматизованими тестами, визначеними за допомогою встановленого інтерфейсу, гарантується стабільний магістраль, і ця практика може дуже добре вписатися в нього.
Ми не використовуємо git, але Subversion, тому що так ми почали, і нам все ще зручно з цим зараз (більшість часу) ...
http://www.ericsink.com/scm/scm_branches.html
Це частина онлайн-книги під назвою Control Source HOWTO , посібник з передового досвіду управління джерелами, управління версіями та управління конфігурацією ...
... Краще відділення Еріка Практика ... Зберігайте "в основному нестабільний" багажник. Робіть свій активний розвиток в магістралі, стабільність якої зростає по мірі наближення до випуску. Після відправки створіть відділення технічного обслуговування і завжди тримайте його дуже стабільним ...
... У наступному розділі я детально розгледімо тему об'єднання гілок ...
http://marc.info/?l=forrest-dev&m=112504297928196&w=2
Початкова пошта теми, що обговорює стратегії розгалуження для проекту Apache Forrest
- Зверніть увагу, що зараз, здається, проект використовує нестабільну модель магістралі з гілками випуску:
- "Робота з розробки виконується на магістралі SVN ... Є" гілки випуску "SVN, наприклад, forrest_07_branch." ( керівництво проектом )
- "Створення пакетів кандидатів до випуску ... 17. Створіть відділення технічного обслуговування у SVN ..." ( Як випустити )
Документи з розгалуженнями O'Reilly CVS:
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, а також деякі найкращі практики грубозернистості у кожній з цих областей. У наступних главах пояснюється кожен елемент ...
Робочі простори, коди, розгалуження, зміна розповсюдження, побудови, процес ...