При переезде рабочего 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

Т.е. сначала путь, потом папка.

Допустимы несколько способов указания относительных путей:

<strong>../</strong> — относительно текущей папки:

../../foo foo_ext 
../../bar bar_ext

<strong>^/</strong> — относительно корня репозитория:

^/foo foo_ext 
^/bar bar_ext

<strong>//</strong> — независимо от схемы сети (http/https):

//new-server.com/repo/foo foo_ext 
//new-server.com/repo/bar bar_ext

<strong>/</strong> —относительно корня сервера:

/repo/foo foo_ext 
/repo/bar bar_ext

Что интересно, версии 1.5, описавшей новый формат указания svn:externals, уже три года. Но при этом практически все примеры и статьи в интернете используют старый формат.