10

svn:externals是否可以仅通过 URL操作颠覆属性?(即没有工作副本。)

我想要一个在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

4 回答 4

9

是的,虽然这有点小技巧;svn propedit 可以更改 URL 目标:

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

于 2013-07-30T18:12:46.653 回答
6

您可以使用该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 包中。

于 2017-03-04T14:30:59.017 回答
4

不。更改文件的属性就像更改文件本身一样——您需要一个工作目录。有一些 Subversion 命令可以在不需要工作副本的情况下更改提交:svn cpsvn mkdirsvn delete. 其他一切都需要一个工作目录才能进行更改。

顺便说一句,您可以在没有工作副本的情况下对修订属性进行更改。修订属性是诸如提交评论 (svn:log)、提交者 ID (svn:author) 和提交时间 (svn:date) 之类的东西。

于 2012-01-11T17:49:39.663 回答
0

基于 Willem 的出色回答,这里有一个示例,展示了如何使用 URL 为所有文件和特定扩展auto-props设置needs-lockSVN :mime-type

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."
于 2015-09-18T17:06:25.673 回答