如何对URL使用subversion的propset?

mjs*_*mjs 10 svn svn-externals svn-propset

是否可以操纵subversion属性,例如svn:externals仅通过URL?(即没有工作副本.)

我想要一个脚本,svn:externals在给定subversion 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
Run Code Online (Sandbox Code Playgroud)

(如果我使用的是实际的修订版号,我会得到相同的结果HEAD.)

Wil*_* M. 9

是的,虽然它有点像黑客; svn propedit可以更改URL目标:

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


max*_*zig 5

您可以使用该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
Run Code Online (Sandbox Code Playgroud)

请注意,svnmucc此外还支持其他命令propset,并且可以在一次调用中链接多个命令(因此名称).结果只是一个变更集.

svnmucc命令是subversion源包的一部分,通常可以通过发行版的包管理器获得.例如,Fedora 25将其包含在subversion-tools包中.OpenCSW甚至将它包含在主要的subversion包中.


Dav*_* W. 4

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

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

  • 解决方法似乎是使用“mktemp”或类似的工具将“svn checkout --depth=empty”放入临时目录(这相当快),使用“svn propset”进行更改、提交,然后删除临时目录。 (4认同)
  • 还有另一个选项:svnmucc,它包含在 SVN 源中,但默认情况下不构建或安装。您可以在http://svnbook.red-bean.com/en/1.8/svn.ref.svnmucc.re.html 阅读相关内容。 (2认同)