2012-01-11 54 views
10

是否可以仅通过URL操作颠覆属性,例如svn:externals? (即没有在工作副本。)如何对URL使用subversion的propset?

我想使得销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 cpsvn mkdirsvn delete。其他一切都需要工作目录才能进行更改。

顺便说一句,你可以在修订更改性质没有工作副本。修订属性就像提交评论(svn:log),提交者的标识(svn:author)和提交时间(svn:date)一样。

+3

解决方法似乎是'svn checkout --depth = empty'到'mktemp'或类似的临时目录中(这相当快),使用'svn propset'进行更改,提交,然后删除临时目录。 – mjs 2012-01-13 12:06:28

+2

还有另一种选择:svnmucc,它包含在SVN源文件中,但默认没有生成或安装。你可以在http://svnbook.red-bean.com/en/1.8/svn.ref.svnmucc.re.html阅读它。 – trent 2013-04-19 19:03:50

+0

添加到@trent的注释中,TortoiseSVN现在将svnmucc与版本1.8.1以及更新版本的https://sourceforge.net/p/tortoisesvn/tickets/496/ – 2016-12-16 22:14:25

9

是的,虽然它有点破解; SVN propedit可以改变URL目标:

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

+0

捆绑在一起,这是一个很好的技巧,但最好指定在命令行中通过'-m'标志发送消息,否则编辑器也会被调用。 – 2013-12-02 09:33:59

+0

你当然是对的。编辑答案。 – 2014-02-06 10:48:21

0

大厦在威廉的excellent answer,这里是展示如何设置SVN auto-propsneeds-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 2017-03-04 14:34:29