svn: внешние эффекты и теги, как объединить код между командами - PullRequest
5 голосов
/ 23 декабря 2009

В нашей компании мы работаем над продуктом, состоящим из различных модулей C / C ++. В идеале каждый уровень и модуль должны разрабатываться отдельно разными группами и тестироваться независимо. В настоящее время каждый модуль разделен на отдельную ветку: \

Модули:

\hid
  \branches
  \tags
  \trunk
\api
  \branches
  \tags
  \trunk
\ui
  \branches
  \tags
  \trunk

Отдельно релиз продукта создается путем объединения модулей и регулярной компиляции с использованием системы CI.

\productX
  \branches
    \5.0
      \hid-4.0 (svn:externs \hid\branches\4.0)
      \api-3.0 (svn:externs \api\branches\3.0)
      \ui-5.0  (svn:externs \ui\branches\5.0)
  \tags
  \trunk

Основная проблема, с которой мы сталкиваемся, связана с поведением тега svn в сочетании с externs. Текущие внешние ссылки ссылаются на HEAD - потому что мы хотели бы регулярно собирать последнюю версию, чтобы все модули работали вместе. Однако, если сборка прошла успешно, и мы приступили к выпуску, было бы неплохо, если бы был простой способ автоматически пометить все, включая версию, используемую в extern. В нынешнем виде мы должны создать теги для модулей, а затем обновить внешние атрибуты для этих тегов, затем добавить теги к продукту и, наконец, заменить его обратно на транк.

Есть ли более чистый способ сделать это? Не стесняйтесь также комментировать текущую структуру.

1 Ответ

3 голосов
/ 23 декабря 2009

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

Это соответствует наилучшей практике (предложенной в документации SVN), касающейся только явных изменений (а не HEAD) в svn:externals.

...