2012-01-11 2 views
10

Можно ли манипулировать свойством subversion, таким как svn:externals, только через URL? (Т.е. без наличия рабочей копии.)Как использовать подпрограмму subversion против URL-адреса?

Я хотел бы сценарий, который Pins svn:externals к конкретной ревизии данной подрыв URL, но это, кажется, невозможно:

$ svn propset foo bar https://example.com/svn/myproject/trunk 
svn: Setting property on non-local target 'https://example.com/svn/myproject/trunk' needs a base revision 

$ svn propset foo bar -r HEAD https://example.com/svn/myproject/trunk 
svn: Try 'svn help' for more info 
svn: Cannot specify revision for setting versioned property 'foo' 

$ svn propset foo bar --revprop -r HEAD https://example.com/svn/myproject/trunk 
svn: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent 
svn: At least one property change failed; repository is unchanged 
svn: Error setting property 'foo': 
could not remove a property 

(я получаю то же самое результаты, если я использую фактический номер версии вместо HEAD.)

ответ

4

Нет. Изменение свойства в файле похоже на изменение самого файла - вам нужен рабочий каталог. Есть несколько команд Subversion, которые изменяют фиксацию без рабочей копии: svn cp, svn mkdir и svn delete. Все остальное нуждается в рабочем каталоге для внесения изменений.

Кстати, вы можете внести изменения в пересмотра свойства без рабочей копии. Свойства ревизии такие, как комментарий фиксации (svn: log), идентификатор коммитера (svn: author) и время фиксации (svn: date).

+3

Обходное решение похоже на 'svn checkout --depth = empty' во временный каталог с' mktemp' или аналогичным (это довольно быстро), используйте 'svn propset', чтобы внести изменения, зафиксировать, а затем удалить временный каталог. – mjs

+2

Существует еще один вариант: svnmucc, который включен в источники SVN, но не построен или не установлен по умолчанию. Вы можете прочитать об этом по адресу http://svnbook.red-bean.com/en/1.8/svn.ref.svnmucc.re.html. – trent

+0

Добавляя к сведению @trent, TortoiseSVN теперь связывает svnmucc с установщиком с версии 1.8.1 и новее https://sourceforge.net/p/tortoisesvn/tickets/496/ –

9

Да, хотя это немного взломать; СВН propedit может изменить URL цели:

svn propedit foo --editor-cmd "echo bar>" http://example.com/svn/myproject/trunk -m "Property changed"

+0

, это отличный трюк, но лучше указать сообщение в командной строке с помощью флага '-m', иначе редактор также будет вызываться для сообщения. –

+0

Вы, конечно, правы. Редактирование ответа. –

0

Опираясь на Виллема excellent answer, вот пример, показывающий, как установить SVN auto-props для needs-lock для всех файлов и mime-type для конкретных расширений с помощью URL:

svn propedit svn:auto-props --editor-cmd "echo \"* = svn:needs-lock=* 
*.os = svn:mime-type=application/octet-stream 
*.osproj = svn:mime-type=application/octet-stream\" >" http://example.com/svn/myproject/trunk -m "Setting auto-props." 
3

Вы можете использовать команду svnmucc для неинтерактивно заданных свойств URL-адреса, например svn:externals.

Пример:

$ svnmucc --root-url https://example.com/svn -m 'reference other/yap' \ 
    propset svn:externals "^/otherproject/tag/xyz other 
^/yetanother/tag/123 yap" myproject/trunk 

Обратите внимание, что svnmucc также поддерживает другие команды, кроме propset и можно несколькими командами цепи в одном вызове (отсюда название). Результатом является только один набор изменений.

Команда svnmucc является частью исходного пакета subversion и обычно доступна через диспетчер пакетов распределения. Например, Fedora 25 включает его в пакет subversion-tools. OpenCSW даже включает его в основной пакет subversion.

+0

Ваше сообщение должно быть помечено как * Ответ *. :) – bahrep