2010-07-20 124 views
17

我试图改变:通过此命令“SVN的外部”远程仓库的财产:是否可以远程更改Subversion版本库的“svn:externals”属性?

svn ps svn:externals "vendor1 http://vendor_repo_here.com" http://main-repo-here.com 

我上面的命令来改变预期“的svn:externals的”从不管它是“供应商1 http://vendor_repo_here.com财产”但它抛出一个错误:

Setting property on non-local target 'http://main-repo-here.com' needs a base revision. 

所以我试试这个:

svn ps -r HEAD svn:externals "vendor1 http://vendor_repo_here.com" http://main-repo-here.com 

现在它说:

Cannot specify revision for versioned property 'svn:externals' 

我做错了什么?无论如何通过命令行远程更改它?

回答

28

我有类似的问题。 Turtoise似乎结帐,然后再次提交,所以我写了一个脚本,做同样的事情。

svn checkout <URL> repocopy --depth 'empty' 
svn propget svn:externals repocopy > tmp2 
//whatever you want to do > tmp_new 
svn propset svn:externals repocopy -F tmp_new 
svn commit -m "commit comment" tmp 
rm -f -r repocopy 
rm tmp2 
rm tmp_new 
+2

好吧,所以添加'深度'将确保结账立即执行,无论您的回购规模是多少......对吧?听起来很完美。还没有尝试过 - 但我认为你的答案是最可以接受的。 – 2010-11-30 04:34:48

+2

是的,“ - 深空”这样做。 “--depth immediate”也存在,并且会检出该顶级目录中的文件和文件夹。 – panschk 2010-12-03 12:56:22

+3

谢谢,但在第5行中,我宁愿'svn commit -m“commit comment”repocopy';除此之外,太棒了。 – 2015-01-06 00:19:40

4

从SVN propset命令的帮助:

propset命令(PSET,PS):设置属性上的目录,文件或修订值。 用法:1. propset命令PROPNAME PROPVAL PATH ... 2. propset命令PROPNAME --revprop -r REV PROPVAL【服务目标】

  1. 更改工作副本中的一个版本的文件或目录的属性。
  2. 更改存储库修订版本上未版本控制的属性。 (TARGET只决定要访问哪个存储库。)

svn:外部属性是一个版本控制属性,它不能以这种方式进行更改。

+0

我不确定TortoiseSVN如何直接从“Repo浏览器”直接执行,如Si所示。 – 2010-07-20 04:17:04

1

这是可能的远程使用TortoiseSVN改变svn:externals

TortoiseSVN的>Repo-Browser>(选择的svn:externals的目录)>显示属性>编辑

这对我的作品。

知道为什么TortoiseSVN能够但svn不能。

+0

这是很好的信息..我知道这件事。但是不能从命令行完成吗? – 2010-07-20 04:15:01

+0

Adrian提供的文档表明这是不可能的,因此最好的办法可能是通过电子邮件发送subversion或TortoiseSVN邮件列表,以了解为什么一个客户端(推测使用相同的API /库)可以做到这一点,而另一个客户端却不行。你可能会很幸运,并找到有更深层次知识的人,我知道Stefan(TortoiseSVN主要开发人员)刚刚在SO上,但是真的很幸运! – si618 2010-07-20 04:35:08

0

Propedit将工作在修订​​属性,不知道有关propset,但应该工作。

但是:回购将不得不被修改以允许修改属性编辑(在revprop-change挂钩前),否则他们将被拒绝。一旦完成,你可以设置其他版本属性,如作者,日期,日志评论等(当然,你的钩子可以变得聪明,拒绝除了外部变化之外的所有变化,但是你需要知道你必须在该能力中编码)

您将不得不设置一个编辑器 - 我不认为您可以直接覆盖现有值(除非propset执行此操作),因为它预计会显示您现有的编辑值。

+0

'svn:externals'不是修改的属性,它是一个正常的(尽管是特殊的)属性。 – eichin 2011-10-01 16:37:29

0

当你安装subversion的时候,在'svn'命令旁边有另一个叫'svnmucc'的命令。 'svnmucc'能够从命令行设置属性url。这包括版本化的属性。

d:>svnmucc 
enter code Subversion multiple URL command client 
usage: svnmucc ACTION... 

    Perform one or more Subversion repository URL-based ACTIONs, committing 
    the result as a (single) new revision. 

Actions: 
    cp REV SRC-URL DST-URL : copy [email protected] to DST-URL 
    mkdir URL    : create new directory URL 
    mv SRC-URL DST-URL  : move SRC-URL to DST-URL 
    rm URL     : delete URL 
    put SRC-FILE URL  : add or modify file URL with contents copied from 
         SRC-FILE (use "-" to read from standard input) 
    propset NAME VALUE URL : set property NAME on URL to VALUE 
    propsetf NAME FILE URL : set property NAME on URL to value read from FILE 
    propdel NAME URL  : delete property NAME from URLhere 
+0

*带颠覆功能的“___”* ..? – Xlander 2014-10-29 10:04:33

+0

好的,我承认,作为荷兰人,我擅长荷兰主义。我调整了我的文本,使其更具可读性(我希望)。 – 2014-10-30 10:00:36

+0

哈哈,确定。这不是问题。更好的方式来说这将是*当你安装颠覆时,在'svn'命令旁边有另一个安装命令'svnmucc'。* – Xlander 2014-10-30 10:15:15

相关问题