Соглашение об именах SVN: хранилище, ветки, теги - PullRequest
21 голосов
/ 26 мая 2010

Просто любопытно, каковы ваши соглашения об именах для:

Имя хранилища ветви Метки

Сейчас мы используем следующие стандарты с SVN, но хотели бы улучшить их:

  1. У каждого проекта есть свой репозиторий
  2. Каждый репозиторий имеет набор каталогов: теги, ветки, ствол
  3. Теги являются неизменяемыми копиями дерева (релиз, бета, rc и т. Д.)
  4. Ветви, как правило, являются функциональными ветвями
  5. Багажник находится в стадии разработки (быстрые добавления, исправления ошибок и т. Д.)

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

Итак, если ваш проект похож на Backyard Baseball for Youngins, как вы справитесь с этим?

  • backyardBaseballForYoungins
  • backyard_baseball_for_youngins
  • BackyardBaseballForYoungins
  • backyardbaseballforyoungins

Это кажется довольно тривиальным, но это вопрос.

Если вы придерживаетесь парадигмы ветвей функций, как вы называете свои ветви функций? После самой функции на простом английском? Какая-то схема управления версиями? То есть Допустим, вы хотите добавить в приложение Backyard Baseball функциональность, позволяющую пользователям добавлять собственную статистику. Как бы вы назвали свою ветку?

  • {repoName} / филиалов / пользователь-адд-статистика
  • {repoName} / ветви / userAddStatistics * +1041 *
  • {repoName} / ветви / user_add_statistics * +1043 *

и т.д.

Или:

  • {repoName} /branches/1.1.0.1

Если вы идете по маршруту версии, как вы соотносите номера версий? Похоже, что ветви функций не получили бы много пользы от схемы управления версиями, поскольку один разработчик мог работать над функциональностью «добавление статистики пользователем», а другой разработчик мог бы работать над функциональностью «добавление статистики администратора». Как называются эти версии веток? Им лучше быть:

  • {repoName} /branches/1.1.0.1 - статистика добавления пользователей
  • {repoName} /branches/1.1.0.2 - администратор добавляет статистику

И как только они объединятся в ствол, ствол может увеличиться соответствующим образом?

Похоже, что теги больше всего выиграют от номеров версий.

С учетом сказанного, как вы соотносите версии для своего проекта (будь то ствол, ветвь, тег и т. Д.) С SVN? То есть Как вы, как разработчик, знаете, что в версии 1.1.1 администратор добавляет статистику и пользователь добавляет функциональность статистики? Как они описательны и связаны? Для тегов имеет смысл иметь примечания к выпуску в каждом теге, поскольку они неизменяемы.

Но, да, какова ваша политика в отношении SVN?

Ответы [ 4 ]

6 голосов
/ 26 мая 2010

Я использую ствол, метки, ветки модель.

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

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

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

1 голос
/ 26 мая 2010

верблюжий? Нет, мы не накладываем никаких ограничений на имена, за исключением того, что пробелы, как правило, не приветствуются. Главное - это содержание, а не презентация. Пока в названии четко определено, что оно делает, мы счастливы.

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

Мы не используем каталоги веток или тегов, так как у нас много сотен проектов, каждый из которых разделен на группы версий (то есть у нас есть базовая платформа с версиями и множество плагинов, которые находятся под каждым номером базовой версии)

Например:

base v1
  +--- moduleA
  +----moduleB
base v2
  +--- moduleA
  +----moduleB

Мы думали о том, чтобы разместить ветку тегов под каждым из каталогов модулей, но мы почти всегда имеем дело с головной версией, поэтому для нас это не проблема. Мы регулярно объединяем изменения из более старых модулей базовой версии в новые - например, вносим изменения в модуль A для базы v1, изменения объединяются в модуль A базы v2. Мы не идем назад, если в этом нет необходимости.

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

Мы также не используем ветвления, так как мы склонны работать над головной версией каждого модуля, если нам нужен ветвь для основного набора изменений, мы будем ветвиться на базовом уровне, поэтому мы создадим ветка "base v2 - performance" и ветка всё. Это позволяет легко сгруппировать множество изменений, так как это лучше всего подходит для нас. Разветвление отдельных модулей может привести к слишком большому количеству помех в репо - поскольку у нас есть пара сотен, было бы легко потерять их, если бы у нас было разветвлений на модуль.

Да, мы вносим изменения в ствол, но это нормально для нашего рабочего процесса - вещи не фиксируются, пока они не готовы к работе. Все изменения, внесенные в более старые базовые версии, являются только исправлениями ошибок, и у нас слишком много модулей, чтобы управлять ими в полном цикле dev-test-release. Мы исправляем, если это окажется плохим исправлением, мы исправляем снова. Иногда мы меняем этот подход для более крупных разработок и создаем ветку в папке веток (вне корня). Путь ветвления воссоздает путь к исходному модулю (поэтому легко определить, какой он, а объединение обратно так же просто, как изменить / переходы на / trunk в начале пути).

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

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

1 голос
/ 26 мая 2010

У меня есть ствол , ветви , теги и рабочих пространств под корнем хранилища.

  • багажник - не используется, чтобы избежать путаницы
  • ветки - ветки выпуска, срок действия одного выпуска - около года, названные сокращением названия продукта и текущим годом (LDN_FSHCHPS_REL_2010)
  • tags - неизменяемые метки релиза / патча (сделано с svn copy ), автоматически генерируется из метки времени (LBL_20100526180134 = 2010-05-26 18:01:34), релизы версии генерируются из той же временной метки, что и v10.05.26.180134, поэтому легко сопоставить метку с версией
  • рабочих пространств - функция / отдельные ветви разработчика, растущие из веток / LDN_FSHCHPS_REL_2010 для новой разработки или из тегов / LBL_20100526180134 для исправления, ветвление выполняется с помощью svn copy , обратное слияние - с svn merge , реинтеграция выполняется с помощью svn merge --reintegrate . Рабочие пространства именуются так же, как WS_, где автоматически генерируется скриптом (как в автоинкременте)

Все в одном репозитории с почасовым / ежедневным / и т. Д. резервное копирование. Все этапы, такие как разветвление, маркировка, слияние и построение, написаны для удобства и стабильности в сценариях (сценарии проверяют согласованность репозитория).

Разветвление / слияние разрешено только для каталогов второго уровня и только для полных слияний, но не для отдельных файлов / каталогов (скажем, branch / LDN_FSHCHPS_REL_2010 -> workspaces / WS_345), чтобы включить автоматическое слияние и избежать проблем с информацией о слиянии поддеревьев (и также для облегчения возникновения проблем слияния, когда они возникают)

0 голосов
/ 26 мая 2010

В настоящее время мы используем следующие стандарты с SVN ...

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

Итак, если ваш проект похож на Backyard Baseball for Youngins, как вы справитесь с этим?

Мы магазин Java, поэтому все наши проекты называются gov.bop.project. :-) Subversion работает с любыми именами.

Если вы придерживаетесь парадигмы ветви функций, как вы называете свои ветви функций?

Мы используем номер, сгенерированный нашей системой оповещения об инцидентах. Это помогает проверяемости.

Похоже, что теги больше всего выиграют от номеров версий.

Мы обнаружили, что даты ггггммдд работают лучше в течение длительного периода времени.

...