В чем преимущества "svn: externals"? - PullRequest
3 голосов
/ 31 июля 2010

Я бы не узнал svn: externals, если бы не столкнулся с этой страницей .Итак, я настроил свою рабочую папку.Затем

mkdir lib/vendor
svn add --parents lib/vendor
svn ps svn:externals 'symfony http://svn.symfony-project.com/branches/1.4/' lib/vendor/
svn ci -m "add externals"
svn update

«Обновление SVN» включает в себя всю папку Symfony и довольно медленно.Я думал, что это будет единовременная боль.Однако SVN будет проверять внешний репозиторий каждый раз, когда я набираю «svn up».Я должен использовать --ignore-externals, чтобы сделать svn update достаточно быстрым.

Мне интересно, в чем преимущества svn: externals, если он такой медленный.Я бы лучше скопировал Symfony в свой собственный репозиторий, что, безусловно, является более быстрым решением.

Ответы [ 3 ]

5 голосов
/ 31 июля 2010

Внешние элементы SVN также имеют непосредственное отношение к организации проекта.Внешними объектами могут быть абсолютно разные репозитории SVN, что означает, что вы можете настроить различные типы безопасности, защиты, доступа, перехвата перед фиксацией, перехвата пост-фиксации и т. Д. Трудно сделать разные уровни доступа для разных папок внутриодно репозиторий SVN (без помощи чего-то вроде VisualSVN ), и очень трудно (и, возможно, неразумно) попробовать и сделать другой метод резервного копирования или безопасности для разных папок внутри одного репозитория SVN.Внешние возможности дают нам больше свободы, позволяя объединить несколько различных репозиториев с помощью одного svn up.

вариантов использования Subversion Externals:

  1. Обычный вариант использования - для внешнего, чтобы содержать библиотеку или некоторый другой фрагмент неизменяемого кода.Если у вас есть .dll, вы можете просто вставить его в репозиторий SVN и рассматривать его как часть своей базы кода, но вы прикрыли тот факт, что .dll следует рассматривать как доступный только для чтения, а неразработано вами или вашей командой.

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

  3. Наконец, внешние элементы могут вытягивать ствол, ветви или теги, что означает, чтоВы можете использовать их, чтобы объединить проект, который состоит из различных теговых версий ваших собственных модулей.Это более точно имитирует что-то вроде Rational ClearCase или любой другой большой системы контроля версий.Это можно сделать, поддерживая репозиторий SVN для каждого модуля или компонента вашей кодовой базы, создавая теги для каждого режима / компонента, а затем ссылаясь на теги, используя свойство externals главного репозитория, которое существует только для их объединения.в рабочий проект.

3 голосов
/ 31 июля 2010

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

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

http://thinkinging.com/2008/10/21/set-the-revision-of-your-svnexternals-or-else/

2 голосов
/ 31 июля 2010

Механизм svn: externals работает так, как объявлено.Проблема в том, что вы используете публичный репозиторий Subversion (доступ к которому осуществляется через Интернет) внутри того, что, как я полагаю, является локальным репозиторием.В результате вы видите значительное расхождение во времени обновления внутреннего репозитория по сравнению с внешним, на который ссылаются.

Копирование в ваш репозиторий, безусловно, является жизнеспособным решением.Как это сделать, подробно описано в Subversion book .

...