Когда подходящее время для ветвления и когда не то время? - PullRequest
2 голосов
/ 17 февраля 2010

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

Наша команда разработчиков иногда работает над долгосрочной и более краткосрочной функциями одновременно. Это означает, что мы в конечном итоге:

Магистральные -Ответ A (краткосрочный) Ветвь Б (Долгосрочная)

После того, как они завершены, мы должны объединить A в ствол, затем объединить изменения в ствол обратно в B, чтобы убедиться, что эти изменения все еще функционируют. Это грязно.

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

Какие правила вы используете, чтобы решить, когда переходить?

Ответы [ 5 ]

1 голос
/ 17 февраля 2010

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

Чтобы свести к минимуму необходимость ветвления, можно использовать новую функцию в самой соединительной линии, ограничивая код новой функции в пределах флагов времени компиляции или выполнения. Этот подход также позволяет позднее отключить функцию, если она не нужна, провести эксперименты по разделению A / B-тестирования с этой функцией и т. Д.

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

1 голос
/ 17 февраля 2010

Одним из способов уменьшения ветвления является внедрение новых функций (особенно небольших) непосредственно в транке. Вот как мы это делаем:

  • небольшие функции, которые гарантированно будут завершены до следующего выпуска, реализованы в транке
  • для более крупных объектов, мы создаем ветвь объектов (в вашем примере - «Ветвь B»)
  • как только мы готовы создать релиз, мы создаем ветку релиза (из ствола), например, названный "отделения / 2.x". Затем эта ветвь используется для тестирования и завершения выпуска.
  • после сборки релиза мы помечаем соответствующую ревизию из ветки релиза (например, tags / 2.0.0).
  • нормальное развитие затем продолжается по стволу. ветвь релиза используется для обслуживания линейки 2.x продукта (например, исправления ошибок объединяются из магистрали или внедряются непосредственно в этой ветке)
0 голосов
/ 02 мая 2017

Обычно плохая практика развиваться против магистрали или магистрали. Магистраль должна использоваться как основной набор кодов и должна отражать код, который в настоящее время представляет производство. Если вы еще не в производстве, он должен представлять золотую копию и всегда должен собираться и подвергаться автоматическим регрессионным тестам. Это не должно использоваться, чтобы показать статус развития или деятельность. Защитите свой ствол от изменений и не поддавайтесь искушению, чтобы разработчики могли проверять и блокировать код на стволе. Единственные обновления, на мой взгляд, должны быть через процесс слияния, когда вы готовы вернуть свой код на основную линию. При ветвлении следует учитывать цель, сложность и продолжительность разработки. • Это для поддержки команды разработчиков, работающих над новой функцией или существенной частью разработки? • Используете ли вы традиционные процессы или различные гибкие ароматы, которые существуют? • Это приспособлено для разработки патча или исправления для производства? • Какую разработку и, в частности, тестирование вы проведете в ветке и будете ли вы сохранять ветку до тех пор, пока производные артефакты не будут созданы, протестированы и будут признаны доступными?

Существует много моделей, но лишь немногие уделяют достаточное внимание процессу «сборки» и последствиям восстановления ваших высвобождаемых артефактов.

Предположим, у вас есть следующий жизненный цикл: DEV-> SYSTEM-INTEGRATIONTEST-> UAT-> PRE-PROD-> PRODUCTION. Предположим, вы создаете ветку от основной линии, чтобы приспособить процессы разработки и сборки. Ваш цикл разработки \ сборки \ тестирования продолжается вплоть до UAT. Артефакты, произведенные из этой ветки, были подвергнуты достаточному тестированию, чтобы посчитать их потенциально подходящими для выпуска. Вы можете утверждать, что артефакты, подписанные пользователями, также подвергались системному и интеграционному тестированию.

Некоторые люди рекомендуют в этот момент объединить исходный код со стволом и рекомендуют вам создать ветвь RELEASE после успешного перестроения ствола. Для меня это нормально, если решение стабильно и не требует каких-либо дальнейших изменений до начала производства, иначе вы рискуете распространить ошибки в другом месте. В переменную его нужно будет поменять.

Если вы обнаружите проблемы в PRE_PROD, где эти изменения «Fix» будут сделаны? Многие предполагают, что вы можете вносить изменения в код непосредственно в ветке релиза. Если вы продолжите, эта модификация создаст новую сборку и новый набор артефактов. Вы можете отправить эти артефакты обратно через PRE_PROD и запустить в производство, поскольку базовый код был проверен в ходе предыдущих испытаний, а изменения, внесенные для стабилизации выпуска, считаются безрисковыми? Но у вас есть проблема.

Вы не можете утверждать, что исполняемые файлы \ артефакты, выпущенные для pre-prod и впоследствии производства, были протестированы в ваших более низких средах. Несмотря на высокую степень достоверности, выходные данные из сборки ветки релиза отличаются от тех, которые получены из сборок разработки. Это может не пройти аудит.

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

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

0 голосов
/ 17 февраля 2010

Это зависит от VCS, который вы используете. Если вы используете инструмент, который имеет хорошую поддержку для слияния, то вам следует переходить в любое удобное для вас время. Если есть сомнения, создайте новую ветку. Если время эпохи UNIX четное, то вам следует перейти. Если это странно, вам следует подождать секунду, а затем перейти. Если вы используете инструмент, который не поддерживает слияние, вам следует подумать о смене инструментов. Другими словами, прекратите использовать инструмент, который заставляет задать этот вопрос.

0 голосов
/ 17 февраля 2010

Во-первых, это зависит от используемого вами инструмента. В Subversion ветки дороже, чем в Mercurial или git, потому что слияния сложнее сделать. С другой стороны, это зависит от вашего проекта / организации: у вас должна быть хотя бы одна ветка на поддерживаемую версию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...