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

Windows Subversion:如何在~/.Subversion/config中保留分号作为参数,例如tunnels.ssh?,windows,svn,config,Windows,Svn,Config,在Subversionconfig文件中,我必须将一个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 1-2-3 在通

在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
1-2-3
在通过
svn+ssh
-协议连接的工作副本中调用
svn up
后,
d:\temp\ssh.out
的内容是:

echo %1-%2-%3 > d:\temp\ssh.out
1-2-3
然而,我希望:

1;2;3--

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

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

首先,这里的问题是分号(;)在处理参数时被批处理文件特别处理。特别是,除非。很明显,你的论点周围有一个双引号,所以它应该是有效的

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

因此,将您的配置设置为:

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

应该让它像你期望的那样。现在这确实意味着%1将包含引号,但希望Java对此没有问题。

在分号前面加反斜杠是否有帮助?@DavidW。不幸的是,没有。而且,我认为冒号而不是分号不起作用。您可以将整个tunnel命令放入批处理文件中吗?您可能必须在
config
文件中使用
cmd.exe-c my.bat
。配置文件所做的只是将该命令向前传递给shell。类路径中的冒号只能在Linux上工作,而不能在Windows上工作。由于Linux上的文件系统权限,我们之前在创建临时批处理文件时遇到了问题(例如,在某些系统上,出于安全原因,您无法在/tmp中创建设置了可执行位的文件),这就是为什么我更愿意将我需要的全部作为参数传递进来,因此我正在寻找一种方法来使用
.svn/config
。否:在Windows系统上使tunnel命令成为批处理脚本,并在
.config
中调用该批处理脚本以执行自定义SSH命令。您的Windows将执行它。如果可以在命令行上执行该批处理脚本,那么也可以在
.config
文件中执行它。(尽管您可能需要在其前面加上
cmd.exe/c
)。谢谢!通过简单的尝试,这似乎适用于Java。