Помощь в понимании SVN Externals - PullRequest
       28

Помощь в понимании SVN Externals

5 голосов
/ 08 октября 2009

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

Я немного прочитал о том, как они работают сейчас, и я думаю, что понимаю концепцию ОК. Я не уверен на 100%, как разные ревизии нескольких репозиториев соединяются вместе.

Допустим, у меня есть Продукт и Библиотека. Продукт построен на основе библиотеки, поэтому его репозиторий имеет свойство svn: externals, которое ссылается на источник библиотеки. При отсутствии конкретной версии в определении svn: externals, когда я проверяю заголовок продукта, я также получаю заголовок библиотеки.

За последние годы я создал несколько версий Продукта, каждый раз ссылаясь на последнюю версию Библиотеки. Однажды я должен вернуться и проверить версию продукта 1, вручную выбрав правильную версию. Когда я это сделаю, какую версию библиотеки я получу, HEAD или ревизию, которую я использовал, когда собрал ее в первый раз?

Надеюсь, я был хорошим разработчиком и помнил, чтобы пометить каждую версию продукта, которую я выпускаю. Когда я применяю свой тег 'Product-1-0-0' к хранилищу, помечается ли верная версия хранилища библиотеки тоже? Если я позже проверю продукт на основе тега «Продукт-1-0-0», будет ли проверена правильная версия библиотеки?

Ответы [ 5 ]

6 голосов
/ 08 октября 2009

То, что вы должны остерегаться с помощью svn:externals, - это то, что вам нужно явно указать ревизию, если вы хотите что-то иное, чем транк. Google "закрепление SVN: внешние" для деталей. Если вы используете довольно современную версию, 1.5 или более новую IIRC, то относительные внешние по крайней мере поддерживаются. Более старые версии, такие как та, которую я сейчас использую, требуют от нас явного закрепления версии с помощью опции -rNNNNN в свойстве svn:externals для каждой проклятой папки .

В итоге мы использовали модификацию perl-скрипта с именем svncopy.pl от tigris.org для выполнения всех наших ветвлений и тегов. Это не так уж плохо, но я хотел бы, чтобы мы знали, сколько это было работы, прежде чем мы решили использовать их так интенсивно.

5 голосов
/ 08 октября 2009

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

Мы сделали это для инструмента, который запускает PC-Lint; нам нравится запускать его в каждой ревизии, чтобы мы могли различать результаты.

Это немного неприятно в своей реализации - мы:

  • определить, на какой оборот находится рабочая копия (используя svnversion)
  • определить, на какой скорости находится ГОЛОВКА (используя svn info)
  • захватывает метки времени для всех ревизий вплоть до головы (с использованием svn log)
  • увеличьте временные метки на 0,999 секунды, чтобы "быть уверенными", что мы получим обороты (да магия!)
  • обновление до каждой ревизии (с использованием svn update -r {sometimestamp})
  • запустить PC-Lint для рабочей копии, diff, mailout, trigger klaxons, что угодно

(Сложность, достойная Рубе Голдберга, не так ли? Возражения и бессмертная благодарность всем, кто может предложить лучшее решение.)

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

2 голосов
/ 12 ноября 2010

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

svn: внешние элементы не имеют версий в Subversion. если кто-то изменяет ревизию или тэг одного из ваших внешних объектов, у вас нет возможности узнать, что это было до изменения.

1 голос
/ 08 октября 2009

Да, при условии, что вы указали явный номер ревизии в своих внешних файлах, как это предлагается в документах В противном случае он будет использовать HEAD-версию внешних ссылок, на которые есть ссылки.

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

0 голосов
/ 08 марта 2012
...