Когда вы должны вступить?
При работе с системой SCM, когда вы должны вступить?
Ответы
Ответ 1
Существует несколько вариантов использования ветвления. Одним из наиболее распространенных применений является разделение проектов, которые когда-то имели общую базу кода. Это очень полезно для экспериментов с вашим кодом, не затрагивая основной багажник.
В общем, вы увидите два типа ветвей:
-
Филиал функций: если какая-то особенность настолько разрушительна, что вы не хотите, чтобы вся команда разработчиков была затронута на ранних этапах, вы можете создать ветку, на которой будет выполняться эта работа.
-
Фиксация разделов: пока процесс продолжения продолжается на основной магистрали, можно создать ветвь исправлений, чтобы сохранить исправления до последней выпущенной версии программного обеспечения.
Вам может быть интересно проверить следующую статью, в которой объясняются принципы ветвления и когда их использовать:
Ответ 2
В общем случае основной целью ветвления (функция VCS - Version Control System) является достижение кода изоляции.
У вас есть хотя бы одна ветвь, которой может быть достаточно для последовательной разработки, и используется для многих задач, которые записываются (фиксируются) на той же уникальной ветки.
Но эта модель быстро показывает свой предел:
Когда у вас есть усилия по разработке (рефакторинг, эволюция, исправления ошибок и т.д.), и вы понимаете, что вы не можете безопасно вносить эти изменения в одну ветвь, чем ваша текущая ветвь развития (потому что вы нарушаете API или вводите код это сломает все), тогда вам понадобится еще одна ветка.
(Чтобы изолировать этот новый код для устаревшего, даже если два набора кода будут объединены позже)
Итак, это ваш ответ прямо здесь:
Вы должны разветвляться, когда вы не можете продолжать и записывать две попытки развития в одной ветке.
(без сохранения ужасно сложной истории).
Ветвь может быть полезна, даже если вы работаете только с исходным кодом, если вас много.
Но вы не должны делать "один филиал на разработчика":
Цель "изоляции" заключается в том, чтобы изолировать усилия по разработке (задача, которая может быть такой же общей, как "разрешить разработку следующей версии нашего программного обеспечения" или как конкретная, как "позволить исправлять ошибку 23" )
не изолировать "ресурс" .
(ветвь "VonC" ничего не значит для другого разработчика: что, если "VonC" покидает проект? Что вы должны делать с ним?
ветвь под названием "bugfix_212" может быть интерпретирована, например, в контексте системы отслеживания ошибок, и любой разработчик может использовать ее, по крайней мере, с некоторым представлением о том, что он должен делать с ней)
Филиал не является тегом (SVN представляет собой Редакционную систему, которая пытается предложить версии, такие как ветвление и пометка через каталоги с дешевой копией файла: это не означает, что тег - это ветка)
Чтобы определить ветвь, также определите рабочий процесс слияния: вам нужно знать, где слить филиал, когда вы закончите с ним.
Для этого глава 7 Практического Перфора (Laura WINGERD - O'Reilly) - хорошее введение (агностик VCS) для объединения рабочего процесса между различными типами веток:
" Как развивается программное обеспечение" (pdf)
Он определяет термин codeline (ветвь, которая записывает важные этапы эволюции кода либо через теги в определенных точках, либо через важное слияние обратно к ветке)
В нем представлена основная модель (центральная кодовая линия для записи релизов) и описывается различные цели для ветвления:
- Активные потоки разработки: постоянная кодировка, когда происходят последовательные различные события.
- ветки задач: ветки коротких ветвей для более конкретной задачи (исправление ошибок является классическим, но вы также можете определить ветку для усилий слияния, которые, как вы знаете, сложны для завершения: вы может объединять, фиксировать и тестировать в этой ветке задачи без введения проблемы для основной ветки текущей разработки)
- промежуточная ветка: для подготовки выпуска с некоторыми предварительными данными или конфигурационными файлами.
- Частные ветки, специальные ветки и редкие ветки: для очень маленьких задач, просто чтобы иметь возможность совершить некоторую работу, не дожидаясь официального завершения или проверки.
Это позволяет "совершать ранние, фиксировать часто".
Другие интересные концепции вокруг VCS: Основные понятия
(о ClearCase изначально, но также действителен для любого VCS)
Ответ 3
Все SCM 21-го века говорят вам:
Отладка для каждой задачи, с которой вы должны работать, независимо от того, является ли это новой функцией, исправлением, тестом и т.д. Это называется ветвью темы, и она изменяет способ работы с вашим SCM.
Вы получаете:
- Улучшенная изоляция
- Лучшая отслеживаемость → вы связываете задачи с ветвями, а не с отдельными наборами изменений, что позволяет вам совершать столько раз, сколько вы хотите, и не накладывает ограничение, как "одна проверка на задание".
- Задачи независимы (обычно начиная с стабильной базовой линии, поэтому вы фокусируетесь только на своем коде, а не на исправлении ошибок у своих пользователей), и вы можете выбрать, хотите ли вы их интегрировать в какой-то момент или позже, всегда под контролем версий
- Вы можете легко просмотреть код (от контроля версий, а не до фиксации ерунды), прежде чем попасть в основную линию.
Инструменты, которые могут это сделать:
Инструменты, которые НЕ МОГУТ это сделать:
Ответ 4
Это также зависит от используемого инструмента SCM. Современные SCM (git, mercurial и т.д.) Делают все более легким создание и уничтожение ветвей, когда это необходимо. Это позволяет, например, сделать одну ветвь за ошибку, над которой вы работаете. Когда вы объедините свои результаты в туловище, вы отбрасываете ветку.
Другие SCM, например subversion и CVS, имеют гораздо более "тяжелую" ветвящую парадигму. Это означает, что ветка считается подходящей только для чего-то большего, чем патч с двадцатью словами. Там ветки классически используются для отслеживания всех дорожек разработки, таких как предыдущая или будущая версия продукта.
Ответ 5
Когда вам нужно внести существенные и/или экспериментальные изменения в вашу кодовую базу, особенно если вы хотите совершить промежуточные изменения, не затрагивая сундук.
Ответ 6
Это зависит от того, какой тип SCM вы используете.
В более новых распределенных версиях (например, git и mercurial) вы все равно создаете ветки и все равно можете их перевести. Я часто буду работать в отдельной ветке на некоторое время, просто потому, что кто-то сломал сборку на магистрали или из-за того, что сеть опустилась, а затем сменила изменения позже, когда она исправлена, и это так легко сделать, что это даже не раздражает.
Документ (короткий и читаемый), который помог мне понять, что происходит в распределенных системах: UnderstandingMercurial.
В старых системах с центральным репозиторием (например, CVS, SVN и ClearCase), это гораздо более серьезная проблема, которая должна решаться на уровне команды, и ответ должен больше напоминать "поддерживать старый релиз, позволяя продолжить развитие на главной линии" или "как часть крупного эксперимента".
Распределенная модель намного лучше, я думаю, и мне не хватает только хороших графических инструментов, чтобы стать доминирующей парадигмой. Однако это не так широко понято, а понятия разные, поэтому это может ввести в заблуждение для новых пользователей.
Ответ 7
Я нахожу, что совет Лауры Вингерд и Кристофера Сейвальда в Перфорсе очень кратки и полезны:
* Branch only when necessary.
* Don't copy when you mean to branch.
* Branch on incompatible policy.
* Branch late.
* Branch, instead of freeze.
См. http://www.perforce.com/sites/default/files/pdf/perforce-best-practices.pdf для подробного объяснения каждого из них и другой лучшей практики.
Ответ 8
Существуют различные цели для ветвления:
- Отличия/ветки ошибок. Динамические и активные ветки, которые возвращаются в багажник при завершении функции/исправления.
- Статические ветки (метки в Subversion, хотя в сущности это просто "нормальная ветвь" ). Они предоставляют статический снимок, например, релиз. Несмотря на то, что они могут работать, они остаются нетронутыми.
Ответ 9
См. статья Эрика Санка о ветвлении из Source Control How -в.
Ответ 10
Этот блестящий пост на nvie.com ответил на этот вопрос для меня.
Ответ 11
Если вам нужно внести изменения, основанные на вашей текущей ветке, не предназначенные для следующей версии из этой ветки (а не раньше).
Например, мы обычно работаем на туловище. Во время релиза кому-то понадобится внести изменения, которые нам не нужны в текущей версии (возможно, до релиза, на данный момент это обычно после выпуска). Это когда мы вступаем в ветки, чтобы выпустить релиз на его собственную ветку и продолжить разработку для следующей версии на тубе.
Ответ 12
Также может возникнуть необходимость в ветвлении:
если вы хотите предоставить исправление для конкретного клиента (например, важно), и вы не уверены, будет ли исправление частью будущих выпусков
Ответ 13
Оставив все технические возможности в стороне.....
Отладка, когда вы знаете, что ее легче слить!
Помните, что слияние всегда будет выполняться с тем, как работа выполняется в проекте.
Как только это достигнуто, все остальные третичные проблемы придут в игру.
Ответ 14
Всякий раз, когда вы чувствуете это.
Вы, вероятно, не очень часто будете работать с централизованным SCM, так как ветки являются частью официального репозитория, и на самом деле это не вызывает много экспериментов, не говоря уже о том, что слияния действительно пострадали.
OTOH, нет технической разницы между веткой и проверкой в распределенных SCM, и слияния намного проще. Вы будете чувствовать себя разветвленными гораздо чаще.
Ответ 15
Управление веткой Visual Studio TFS. Концепции применяются к любой системе управления версиями.
http://www.codeplex.com/BranchingGuidance