SVN导入命令的参数太多

时间:2012-05-07 12:57:53

标签: java svn command-line

在linux框中,我正在制作以下SVN import命令:

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命令从我的日志文件复制并粘贴到控制台,那么导入将按预期工作。

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

  • 我尝试过使用单'个引号

修改

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

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);
    }

3 个答案:

答案 0 :(得分:1)

我建议您使用推荐的ProcessBuilder代替Process。它为您提供了更多的执行控制,并允许指定参数列表。它可以解决您的问题,只需要对代码进行微小的修改。

答案 1 :(得分:1)

在匿名提示之后(评论者在我抓住他们的名字之前删除了他们的评论) - 我发现问题在于引号,因为它们无法在Process 内转义(见this question

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

我发现解决此问题的方法是以char格式包含引号:

String message = String.format( "%sSome message%s", (char)34 );  //quotes as char

答案 2 :(得分:0)

尝试使用终端

提交文件

如果文件夹名称中有空格,只需在空格

之前使用后缀斜杠

例如:

  

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

这里我的文件名是: Ram file1

SVN文件夹名称为: svnFolder 2654

  

请确保在此期间没有额外的空格   复制。