2

在 linux 机器上,我正在执行以下 SVNimport命令:

svn import
           --non-interactive 
           --trust-server-cert 
           --username username 
           --password password 
           -m "a message" 
           /path/to/local.zip 
           https://sub.domain.net/path/to/export.zip

当我自己从命令行调用它时,它可以正常工作。

但是,如果我使用 Java 命令提示符进行此调用,则会收到一条错误消息,指出命令中的参数太多import

有谁知道这可能是什么原因造成的?

补充说明

  • 如果我将 Java 生成的 svn 命令从我的日志文件复制并粘贴import到控制台,那么导入将按预期工作。

  • 我可以export在 Java 中使用 SVN 命令没有任何问题

  • 我试过使用单'引号

编辑

进行这些调用的代码如下:

private void exportToSvn()
    String command = String.format(
            "svn import --non-interactive --trust-server-cert " +
            "--username %s --password %s -m %s %s %s",
            username, password, "\"a message\"", "/path/to/local.zip",
            "https://sub.domain.net/path/to/export.zip"
    );
    command( command );
}

private void command( String... commands ) throws IOException, InterruptedException {
    Runtime rt = Runtime.getRuntime();
    for( String command : commands ){
        Process pr = rt.exec( command );
        BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));
        logger.debug( command );
        String line;
        while ( (line = input.readLine()) != null)
            logger.debug("> " + line);
    }
4

3 回答 3

1

我建议你使用推荐的ProcessBuilder而不是 Process。它使您可以更好地控制执行,并允许指定参数列表。它可能会解决您的问题,并且只需要对代码进行少量修改。

于 2012-05-07T14:15:18.277 回答
1

在匿名提示后(评论者在我发现他们的名字之前删除了他们的评论) - 我发现问题在于引号,因为它们无法在其中转义Process (参见这个问题

String message = "\"Some message\"";    //quotes aren't escaped

我发现一个解决方法是在char格式中包含引号:

String message = String.format( "%sSome message%s", (char)34 );  //quotes as char
于 2012-05-07T14:26:47.453 回答
0

试试这个使用终端提交文件

如果文件夹名称中有空格,只需在空格前使用反斜杠

例如:

svn import -m "这里我要提交" /Users/Ram/Documents/ Ram\ file1 / http://svnlocation/ svnFolder\ 2654 /

这里我的文件名是:Ram file1

SVN文件夹名称为:svnFolder 2654

请确保在复制过程中没有多余的空格。

于 2017-07-13T06:32:54.320 回答