Subversion - Ветвление / Слияние

У меня есть базовые навыки ветвления и слияния в SVN. Вы ветвитесь, делайте что угодно, сливайтесь обратно в ствол.

Вы должны слить обратно в багажник?

Мой сценарий:

У меня есть небольшие приложения в ASP.NET MVC2, использующие Linq to SQL. С выходом MVC3 я собираюсь либо обновить его до MVC3, либо переделать с нуля (используя EF 4). В любом случае следующая "версия" будет сильно отличаться от той, что у меня есть сейчас.

Мне интересно, как я должен обрабатывать SVN часть. Должен ли я поместить его в SVN как ветвь текущего репозитория (/svn/project/trunk/mvc3) или запустить новый репозиторий (/svn/project_mvc3/trunk).

3 ответа

Решение

Храните его в том же хранилище. История исходного кода не относится к "версиям" (релизам) для людей.

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

Если вы хотите сохранить то, что у вас есть, но будете вносить значительные изменения, которые вы хотите использовать для продвижения вперед, я бы предложил создать ветку для вашего текущего проекта и поместить ваши новые изменения в транк. Например (/svn/project/branch /mvc2) может содержать ваш текущий проект, а (/svn/project/trunk) может быть MVC3, продвигающимся вперед.

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

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

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

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

Так что ответ на вопрос, вероятно, таков: "Это зависит". Что для вас делает контроль версий? Почему вы поставили приложение в первую очередь на контроль версий? Если ответы на эти вопросы по-прежнему применимы к новой версии и, что особенно важно, применимы к эволюции приложения от одной версии к следующей, то ответвление / слияние, вероятно, является правильным решением.

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

И последнее (хотя и немного тангенциальное) замечание: ветвь и ствол - это просто подпапки в Subversion. Вы можете объединить любой путь (от магистрали к ветви или от ветви к магистрали).

Другие вопросы по тегам