Как проверить внешний URL-адрес SVN напрямую?

У меня есть хранилище Subversion, которое содержит некоторые клиентские файлы. Некоторые клиенты будут использовать стандартные файлы, но другие клиенты будут предоставлять собственные версии файлов. Для этого я использовал svn: externals для клиентов, которые будут использовать общие файлы. Итак, наша структура примерно такая:

svn
|+ top
   |+ shared
   |+ clients
      |+ custom1
      |+ custom2
      |+ shared1
      |+ shared2

Клиент "custom1" - это реальная папка в Subversion, содержащая пользовательские файлы этого клиента, а клиент "shared1" - это свойство svn: external в /clients папка, которая указывает на /top/shared,

Я надеялся, что когда я захочу развернуть новый клиент, я смогу просто экспортировать его папку на сервер, используя такую ​​команду:

svn export http://svn/top/clients/custom1 \\server\custom1

или же

svn export http://svn/top/clients/shared1 \\server\shared1

Это хорошо работает для настроенных клиентов, потому что у них есть "настоящая" папка в Svn, но для клиентов, настроенных с внешними данными, я получаю ошибку:

svn: E170000: URL 'http://svn/top/clients/shared1' doesn't exist

Есть ли способ, которым я могу проверить / экспортировать "внешнюю" папку напрямую?

2 ответа

Решение

http://svn/top/clients/shared1 это не физический путь в SVN, а просто ссылка на ваш внешний. Вот почему вы не можете проверить это напрямую.

Чтобы избавиться от этого, вы можете создать http://svn/top/clients/shared1 как пустую папку в SVN, и вы можете дать свойство svn:external на http://svn/top/clients/shared1 папка, чтобы указать это на /top/shared вместо /clients папка.

После этого вы получите физический путь для проверки, но вам не нужно хранить фактический контент в этой папке.

В итоге я использовал svn ls, чтобы проверить, получаю ли я доступ к физическому каталогу. Если он не существует, используйте следующую команду, чтобы получить цель моего внешнего:

svn propget svn:externals http://svn/top/clients/ | findstr "\<shared1\>" | sed "s/\(.*\)\s\(shared1\)/\1/"

findstr получит единственную строку для свойства, которое я ищу, и sed Команда будет анализировать целевой URL (часть перед пробелом).

Другие вопросы по тегам