Как использовать subversion propset против URL?
Можно ли использовать свойство subversion, например svn:externals
только через URL? (т.е. без рабочей копии).
Мне нужен script, который связывает svn:externals
с конкретной версией с учетом URL-адреса subversion, но это кажется невозможным:
$ 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 possible that the repository 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
.)
Ответы
Ответ 1
Нет. Изменение свойства в файле похоже на изменение самого файла - вам нужен рабочий каталог. Существует несколько команд Subversion, которые изменяют фиксацию без рабочей копии: svn cp
, svn mkdir
и svn delete
. Для внесения изменений все остальное нуждается в рабочем каталоге.
Кстати, вы можете вносить изменения в свойства ревизии без рабочей копии. Свойства ревизии такие, как комментарий фиксации (svn: log), идентификатор коммитера (svn: author) и время фиксации (svn: date).
Ответ 2
Да, хотя это немного взломать; svn propedit может изменить URL-адреса:
svn propedit foo --editor-cmd "echo bar>" http://example.com/svn/myproject/trunk -m "Property changed"
Ответ 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.
Ответ 4
Основываясь на Willem отличный ответ, вот пример, показывающий, как установить 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."