SVN: ответвление Выпуска и внешний облик?

У нас есть два веб-сайта для того же клиента (основной www сайт и другой для сайта электронной коммерции, который находится на отдельном сервере), что использование совместно использовало часть кода (различные функции/стили/JavaScript и т.д.). Мы в настоящее время управляем этим при наличии общего кода как отдельные проекты (в том же repos) в SVN и использовании svn:externals для получения по запросу ответвления каждого из них в два проекта веб-сайта.

Мы только что создали два ответвления выпуска, один каждый для этих двух сайтов. Все передается для транкинга для каждого из сайтов как нормальные при работе и когда "готовый к живому" мы объединяем его в ответвление выпуска для того сайта. Работают обработка кроме сегодня, мы изменили часть общего кода и заметили, что ответвление выпуска втянуло его немедленно, когда мы сделали обновление на ответвлении выпуска. Это не то, что мы хотели :(

Так любые идеи, как мы можем сгладить эту проблему. Мы использовали внешний облик для высушивания совместного использования кода, но там иначе? Заметьте, что в этом вопросе (Как я могу перейти в SVN и иметь его ответвление мои svn:external папки также?) они упоминают, что внешний облик плох, и мы должны использовать другой процесс сборки, но никакое упоминание о том, каково это должно быть.

Мы имеем CruiseControl.net, выполняющий наши сборки, и стремимся взломать эту гайку. У кого-либо есть какие-либо идеи о лучшем процессе?

Удачи

Pete

ОБНОВЛЕНИЕ: мы с тех пор переместились в использование Подвижного (Печь для обжига Fogcreek) для нашего управления исходным кодом. Подвижный также имеет идею sub-repos, таким образом, мы следовали за тем маршрутом с нашим проектом там также. Однако это прибывает в стоимость, ветвление сделано действительно трудным, как отмечает и просто совершенствует все. Наш последний метод должен принести оба проекта в один repos включая весь общий repos также. Это дает нам один "мега проект", который замедляет время клона (выезд в SVN), но мы делаем это так редко, что усиления не необходимости иметь дело с sub-repos делают его определенно стоящим в то время как. Мы теперь используем функцию, switching/toggling вместо того, чтобы перейти, который также упрощает нашу разработку значительно.

16
задан Community 23 May 2017 в 12:13
поделиться

3 ответа

Если я правильно понимаю, у вас есть примерно такая структура:

  • project1
    • trunk {{ 1}}
      • библиотека (через svn: externals library svn: // repo / library )
    • ветки
      • release1
        • библиотека (через svn: externals library svn: // repo / library )
      • release2
        • библиотека (через svn: externals library svn: // repo / library )
  • project2
    • trunk
      • библиотека (через svn: externals library svn: // repo / library )
    • ветки
      • release1 {{1 }}
        • библиотека (через svn: externals library svn: // repo / library )
  • библиотека

Я предполагаю, что вы используете настройки svn: externals на / проект1 / транк в / библиотеку.Если вы затем объедините ревизию с svn: externals в / project1 / branch / release1 и обновите эту ветку, вы автоматически получите последнюю версию из библиотеки. По умолчанию svn: externals получит версию HEAD ссылки.

Вы можете определить svn: externals для ссылки на конкретную ревизию, например: svn: externals -r123 library svn: // repo / library . Это означает, что внешняя ссылка всегда будет указывать на эту конкретную ревизию. Таким образом, вы можете безопасно использовать этот тип ссылки svn: externals в своей ветке выпуска, не беспокоясь о том, что код разделяемой библиотеки когда-либо будет обновлен, если вы вручную не измените svn: externals

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

  • project1
    • trunk
      • библиотека (через svn: externals library svn: // repo / library / tags / version3 )
    • ветки
      • release1
        • библиотека (через svn: externals library svn: // repo / library / tags / version1 )
      • release2
        • library (через svn: externals library svn: // repo / library / tags / version2 )
  • project2
    • trunk
      • библиотека (через svn: externals library svn: // repo / library / tags / version2 )
    • ветки
      • release1 { {1}}
        • библиотека (через svn: externals library svn: // repo / library / tags / version1 )
  • библиотека
    • теги
      • версия1
      • версия2
      • версия3
19
ответ дан 30 November 2019 в 21:45
поделиться

Вы можете выполнить svn update --ignore-externals , если не хотите, чтобы внешние элементы обновлялись.

1
ответ дан 30 November 2019 в 21:45
поделиться

Да , можно использовать внешние элементы, указывающие на конкретную ревизию или тег. Вы можете легко узнать это, просто прочитав руководство по svn по внешнему виду ... RFD! кроме того, занимает около одной страницы ... :)

http://svnbook.red-bean.com/en/1.0/ch07s03.html

1
ответ дан 30 November 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: