Авг
2011
Относительные пути в svn:externals
При переезде рабочего Subversion-репозитория на другой сервер «посыпались» экстерналы. Старый svn-репозиторий был не доступен, а правила для svn:externals были указаны в виде:
foo_ext http://old-server.com/repo/foo
bar_ext http://old-server.com/repo/bar
И естественно выпадали в ошибки.
Здесь и далее рассматривается условный репозиторий с такой структурой: корень находится в repo, а мы хотим подключить внешние папки foo и bar в папку lib:
repo\
|-- bar\
|-- foo\
+-- lib\
|-- bar_ext
+-- foo_ext
Захотелось во избежание подобных проблем в будущем указать пути относительно. Оказалось, такая возможность в Subversion доступна, начиная с версии 1.5. При этом был изменен формат описания подключения внешних папок. Старый формат также допустим, но только при указании абсолютных путей. Предыдущий пример в новом формате должен выглядеть так:
http://new-server.com/repo/foo foo_ext
http://new-server.com/repo/bar bar_ext
Т.е. сначала путь, потом папка.
Допустимы несколько способов указания относительных путей:
../ — относительно текущей папки:
../../foo foo_ext
../../bar bar_ext
^/ — относительно корня репозитория:
^/foo foo_ext
^/bar bar_ext
// — независимо от схемы сети (http/https):
//new-server.com/repo/foo foo_ext
//new-server.com/repo/bar bar_ext
/ —относительно корня сервера:
/repo/foo foo_ext
/repo/bar bar_ext
Что интересно, версии 1.5, описавшей новый формат указания svn:externals, уже три года. Но при этом практически все примеры и статьи в интернете используют старый формат.