Вопрос

Когда я впервые начал использовать системы контроля версий, такие как Резюме и SVN, Я действительно не понимал понятий "магистрали", ветвления, слияния и пометки.Сейчас я начинаю понимать эти концепции и действительно осознаю важность и мощь, стоящие за ними.

Итак, я начинаю делать это правильно.По крайней мере, я так думаю...Это то, что я понимаю до сих пор:Последний выпуск / стабильная версия вашего кода должна находиться в /trunk/ , в то время как бета-версии или расширяющиеся версии находятся внутри каталога /branches/ в виде разных каталогов для каждого бета-релиза, а затем объединяются в trunk при выпуске.

Не слишком ли упрощенный взгляд на вещи?Какие макеты репозиториев вы, ребята, рекомендуете?Если это что-то изменит, я использую Subversion.

Это было полезно?

Решение

Смотрите эти два вопроса на SO для получения дополнительной информации:

Другие советы

То, что я делаю и обычно рассматриваю в качестве стандарта, это:

Магистраль должна содержать вашу основную линию разработки, вашу нестабильную версию.Вы должны создать ветви выпуска для своих релизов.

Что -то вроде:

/trunk (здесь вы разрабатываете версию 2.0) /branches/RB-1.0 (это ветка выпуска 1.0) /branches /RB-1.5

Когда вы обнаруживаете ошибку в 1.5, вы исправляете ее в ветке RB, а затем объединяете с магистралью.

Я также рекомендую эта книга.

У Эрика есть отличная серия статей об использовании системы управления версиями и лучших организационных практиках.Глава 7 посвящена филиалам (и да, он рекомендует каталоги /trunk/ и /branches /, которые вы предлагаете).

Я использую Perforce в течение длительного времени, и поэтому мои комментарии могут быть немного навязчивыми, но основные принципы применимы к любому программному обеспечению SCM, которое имеет хотя бы наполовину приличное ветвление.Я очень твердо верю в использование разветвленных методов разработки.У меня есть "main" (он же "mainline"), который представляет кодовую базу от настоящего момента до вечности.Цель состоит в том, чтобы в большинстве случаев это было стабильно, и, если понадобится, вы могли бы в любое время выпустить релиз, который отражал бы текущую функциональность системы.Эти надоедливые продавцы продолжают спрашивать....

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

Наконец, у вас есть строка ВЫПУСКА, в которой доступны разные ветки для разных выпусков.Существует несколько вариантов в зависимости от возможностей маркировки вашего программного обеспечения SCM и того, насколько разными могут быть основные / второстепенные версии.Таким образом, вы можете выбрать, например, ветку выпуска для каждого точечного выпуска или только для основного номера версии.Ваш пробег может отличаться.

Как правило, переходите от MAIN к release как можно позже.Исправления ошибок и изменения в последнюю минуту могут быть либо сразу включены в РЕЛИЗ для последующей интеграции в MAIN, либо в MAIN для немедленной резервной интеграции.Нет жесткого правила - делай то, что работает лучше всего.Однако, если у вас есть изменения, которые могут быть отправлены в MAIN (напримериз ветки разработчиков или "небольшие настройки" кем-то из MAIN), затем выполните первое.Это зависит от того, как работает ваша команда, каковы ваши циклы выпуска и т.д.

Например.У меня было бы что-то вроде этого:

//MYPROJECT/MAIN/... - the top level folder for a complete build of all the product in main.
//MYPROJECT/DEV/ArseKickingFeature/... - a branch from MAIN where developers work.
//MYPROJECT/RELEASE/1.0/...
//MYPROJECT/RELEASE/2.0/...

Нетривиальный проект, вероятно, будет иметь несколько активных ветвей разработки одновременно.Когда разработка будет интегрирована в MAIN, так что теперь она является частью основного проекта, уничтожьте старую ветку разработки как можно скорее.Многие инженеры будут относиться к ветке разработки как к своему личному пространству и со временем будут использовать ее для различных функций.Препятствуйте этому.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top