Subversion:如何在〜/ .subversion / config中保留分号作为参数,例如: for tunnels.ssh?

时间:2013-12-18 17:43:18

标签: windows svn config

在Subversion config文件中,我必须将 Java类路径传递给自定义SSH可执行文件,这是一个 Windows批处理文件。类路径包含用于分隔路径条目的分号。但是,在批处理文件中,只有类路径的第一个条目到达。后续条目作为附加参数逐个传递。例如:

Subversion的config文件包含:

ssh=d:\\temp\\ssh.bat "1\;2;3"

d:\temp\ssh.bat的内容是:

echo %1-%2-%3 > d:\temp\ssh.out

在通过svn up - 协议连接的工作副本中调用svn+ssh后,d:\temp\ssh.out的内容为:

1-2-3

但是,我希望:

1;2;3--

在Windows上测试,使用 svn,版本1.8.4(r1534716)

1 个答案:

答案 0 :(得分:1)

这个问题实际上是Subversion的组合(特别是我们用于平台独立性的APR依赖)和批处理文件引用。

首先,问题是在处理参数时,分号(;)由批处理文件专门处理。特别是除非argument is surrounded by double quotes (") it is replaced by a space (see the delimiters section of at the link)。现在你明显有一个围绕你的论点的双引号,所以它应该工作。

但是,Subversion使用来自APR的apr_tokenize_to_argv()函数(将配置的值拆分为单独的参数)。作为这样做的一部分,它最终删除你的引号(虽然它注意它们,以避免拆分包含空格的参数)。但它确实允许你转义引号,在这种情况下,它会忽略它们并将它们传递给它们。

所以设置你的配置如下:

ssh=d:\\temp\\ssh.bat \"1;2;3\"

应该让它按照你的期望行事。现在这确实意味着%1将包含引号,但希望Java可以使用它。