是否可以仅通过URL操作svn:externals
等子版本属性? (即没有工作副本。)
我想要一个脚本,在给定subversion网址的情况下将svn:externals
固定到特定修订版,但这似乎是不可能的:
$ 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
,我会得到相同的结果。)
答案 0 :(得分:9)
是的,虽然这有点像黑客; svn propedit可以更改URL目标:
svn propedit foo --editor-cmd "echo bar>" http://example.com/svn/myproject/trunk -m "Property changed"
答案 1 :(得分:5)
您可以使用svnmucc
命令以非交互方式设置网址的属性,例如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包中。
答案 2 :(得分:4)
没有。更改文件的属性就像更改文件本身一样 - 您需要一个工作目录。有一些Subversion命令可以在不需要工作副本的情况下更改提交:svn cp
,svn mkdir
和svn delete
。其他所有东西都需要一个工作目录才能进行更改。
顺便说一下,您可以在没有工作副本的情况下对 修订 属性进行更改。修订属性类似于提交注释(svn:log),提交者ID(svn:author)和提交时间(svn:date)。
答案 3 :(得分:0)
以Willem的excellent answer为基础,这里有一个示例,展示了如何为所有文件设置auto-props
{1}},为使用网址的特定扩展设置needs-lock
:
mime-type