У нас есть два веб-сайта для того же клиента (основной www сайт и другой для сайта электронной коммерции, который находится на отдельном сервере), что использование совместно использовало часть кода (различные функции/стили/JavaScript и т.д.). Мы в настоящее время управляем этим при наличии общего кода как отдельные проекты (в том же repos) в SVN и использовании svn:externals для получения по запросу ответвления каждого из них в два проекта веб-сайта.
Мы только что создали два ответвления выпуска, один каждый для этих двух сайтов. Все передается для транкинга для каждого из сайтов как нормальные при работе и когда "готовый к живому" мы объединяем его в ответвление выпуска для того сайта. Работают обработка кроме сегодня, мы изменили часть общего кода и заметили, что ответвление выпуска втянуло его немедленно, когда мы сделали обновление на ответвлении выпуска. Это не то, что мы хотели :(
Так любые идеи, как мы можем сгладить эту проблему. Мы использовали внешний облик для высушивания совместного использования кода, но там иначе? Заметьте, что в этом вопросе (Как я могу перейти в SVN и иметь его ответвление мои svn:external папки также?) они упоминают, что внешний облик плох, и мы должны использовать другой процесс сборки, но никакое упоминание о том, каково это должно быть.
Мы имеем CruiseControl.net, выполняющий наши сборки, и стремимся взломать эту гайку. У кого-либо есть какие-либо идеи о лучшем процессе?
Удачи
Pete
ОБНОВЛЕНИЕ: мы с тех пор переместились в использование Подвижного (Печь для обжига Fogcreek) для нашего управления исходным кодом. Подвижный также имеет идею sub-repos, таким образом, мы следовали за тем маршрутом с нашим проектом там также. Однако это прибывает в стоимость, ветвление сделано действительно трудным, как отмечает и просто совершенствует все. Наш последний метод должен принести оба проекта в один repos включая весь общий repos также. Это дает нам один "мега проект", который замедляет время клона (выезд в SVN), но мы делаем это так редко, что усиления не необходимости иметь дело с sub-repos делают его определенно стоящим в то время как. Мы теперь используем функцию, switching/toggling вместо того, чтобы перейти, который также упрощает нашу разработку значительно.
Если я правильно понимаю, у вас есть примерно такая структура:
svn: externals library svn: // repo / library
) svn: externals library svn: // repo / library
) svn: externals library svn: // repo / library
) svn: externals library svn: // repo / library
) 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
Вероятно, лучше Таким образом можно было бы использовать теги для общей библиотеки и ссылаться на конкретный тег. В этом случае вы получите следующую структуру репозитория:
svn: externals library svn: // repo / library / tags / version3
) svn: externals library svn: // repo / library / tags / version1
) svn: externals library svn: // repo / library / tags / version2
) svn: externals library svn: // repo / library / tags / version2
) svn: externals library svn: // repo / library / tags / version1
) Вы можете выполнить svn update --ignore-externals
, если не хотите, чтобы внешние элементы обновлялись.
Да , можно использовать внешние элементы, указывающие на конкретную ревизию или тег. Вы можете легко узнать это, просто прочитав руководство по svn по внешнему виду ... RFD! кроме того, занимает около одной страницы ... :)