Внешние зависимости

Давненько я не писал в блог. Надо исправляться. Чем сейчас и займусь...

А рассказать сегодня я хочу об еще одной неочевидной вещи Subversion-а — «внешних зависимостях».

«Внешние зависимости» — это способ включения в дерево своего проекта любые каталоги из других проектов и других хранилищ. Это несколько напоминает симлинки в юникс-лайк файловых системах. Т.е. в каком-либо каталоге проекта создается ссылка на другой каталог и при создании рабочей копии этого проекта (или апдейте существующей РК) вместо ссылки будет создана рабочая копия из того места, куда указывает эта ссылка.

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

Свойство, отвечающее за внешние зависимости, называется svn:externals. Для его установки можно воспользоваться командой svn propedit или пунктом «Properties» (если воспользоваться TortoiseSVN).
Пункт “Свойства” контекстного меню

Чаще всего внешние зависимости используются для включения в проект различных библиотек. В качестве примера я покажу как включить в свой проект Zend Framework и Smarty. Подключать я предлагаю в отдельный каталог lib. Я предполагаю, что этот каталог уже находится в хранилище.

Вызвав контекстное меню каталога lib, выбираем пункт «Свойства». В открывшемся окне нажимаем на кнопку «Добавить»
Окно свойств

Из списка свойств выбираем нужное нам свойство
Список свойств

и в области значения свойства вводим название каталога и адрес хранилища:

Zend http://framework.zend.com/svn/framework/tag/release-1.0.3/library/Zend
smarty http://smarty-php.googlecode.com/svn/tags/Smarty_2_6_18/libs

Ссылки на библиотеки

После этого жмем на кнопку «ОК»
Устанавливаем свойство

После этого делаем commit, а за тем update. Вуаля! Наш каталог содержит ZF и smarty.

Хочу обратить внимание на адреса подключения библиотек — они указывают на конкретный релиз библиотеки. Это гарантирует стабильность работы, конечно по сравнению с веткой разработки. Можно было бы забирать библиотеки и из главной ветки, просто нужно дополнить путь номером правки — эффект получился бы такой же. Но указание в пути номера релиза гораздо удобней, на мой взгляд.

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

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

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

1 звезда2 звезд3 звезд4 звезд5 звезд (1 голосов, средний: 5.00 из 5)
Loading ... Loading ...

Метки: , , ,



Один комментарий на “Внешние зависимости”

  1. [...] сторонними библиотеками в Subversion — небольшая заметка о внешних зависимостях, очень кратко: зачем это нужно и как это [...]

Оставить комментарий