如何使用subversion对URL的propset?

时间:2012-01-11 12:57:14

标签: svn svn-externals svn-propset

是否可以仅通过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,我会得到相同的结果。)

4 个答案:

答案 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 cpsvn mkdirsvn delete。其他所有东西都需要一个工作目录才能进行更改。

顺便说一下,您可以在没有工作副本的情况下对 修订 属性进行更改。修订属性类似于提交注释(svn:log),提交者ID(svn:author)和提交时间(svn:date)。

答案 3 :(得分:0)

以Willem的excellent answer为基础,这里有一个示例,展示了如何为所有文件设置auto-props {1}},为使用网址的特定扩展设置needs-lock

mime-type