以编程方式在远程存储库上设置svn:externals

以编程方式在远程存储库上设置svn:externals,svn,command-line-interface,svn-externals,Svn,Command Line Interface,Svn Externals,我正在开发一个基于web的工具,允许项目经理建立新的subversion存储库和相应的Trac实例 作为这个工具的一部分,我希望能够自动向新的存储库添加一些特定的依赖项,比如为其他库设置一些外部 我知道svnpropset在远程存储库上不起作用,但是svnpropedit起作用 我的问题是-如何在命令行的一个命令中发出svn propedit并设置svn:externals属性 换句话说,propedit需要一个编辑器,我是否可以使用某种“假”编辑器,它只接受命令行参数(我可以与svn的--ed

我正在开发一个基于web的工具,允许项目经理建立新的subversion存储库和相应的Trac实例

作为这个工具的一部分,我希望能够自动向新的存储库添加一些特定的依赖项,比如为其他库设置一些外部

我知道
svnpropset
在远程存储库上不起作用,但是
svnpropedit
起作用

我的问题是-如何在命令行的一个命令中发出
svn propedit
并设置
svn:externals
属性

换句话说,
propedit
需要一个编辑器,我是否可以使用某种“假”编辑器,它只接受命令行参数(我可以与svn的
--editor cmd
选项一起使用)?这样,我就可以以编程方式构建CLI命令,并通过系统调用发出该命令


我不担心覆盖现有属性,因为这只适用于在几个CPU周期之前创建的全新存储库。

您可以编写一个可执行脚本作为道具编辑器。它将获得一个临时文件名作为其第一个参数(
$1
在类unix系统上),其中包含正在编辑的属性的当前值。在脚本中修改文件的内容-这就是属性的新值。将脚本传递为
svnpropedit--editor cmd

更具体的答案是使用一个简单的命令行“编辑器”,它使用echo命令设置属性的新文本。在unix上,这非常简单:

svn propedit svn:externals \
--editor-cmd "echo '<property_value>' >" \
<target> -m "<commit_message>"
svn属性svn:externals\
--编辑器cmd“echo'>”\
-m“
这甚至可以处理多行属性值(如多个外部),因为unix非常乐意接受带引号的字符串中的新行:

svn propedit svn:externals \
--editor-cmd "echo 'first property value
another property value
yet another one' >" \
<target> -m "<commit_message>"
svn属性svn:externals\
--编辑器cmd“echo”第一个属性值
另一个属性值
还有一个“>”\
-m“
在windows上,简单案例如下所示,因为它的echo不需要引号:

svn propedit svn:externals ^
--editor-cmd "echo <property_value> >" ^
<target> -m "<commit_message>"
svn属性svn:externals^
--编辑器cmd“echo>”^
-m“
但多行版本更为棘手:

svn propedit svn:externals ^
--editor-cmd "(echo first property value & echo another property value & echo yet another one) >" ^
<target> -m "<commit_message>"
svn属性svn:externals^
--编辑器cmd“(回显第一个属性值&回显另一个属性值&回显另一个属性值)>”^
-m“

在大多数脚本语言中,构建最后一行实际上非常简单,方法是用“
&echo
”而不是“
\n
”,将属性值的行连接起来,然后将其括在括号中。

知道如何为propdel子命令实现这一点吗?(子命令“propdel”不接受选项“-editor cmd ARG”)知道如何为propdel子命令实现这一点吗?(子命令'propdel'不接受选项'--editor cmd ARG)在我看来,svn客户端不允许这种行为。