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

誰かがこれを引き起こしている可能性があることを知っていますか?

その他の注意事項

  • importJavaで生成されたsvnコマンドをログファイルからコンソールにコピーして貼り付けると、インポートは期待どおりに機能します。

  • Java内からSVNexportコマンドを問題なく使用できます

  • '重引用符を使用してみました

編集

これらの呼び出しを行うためのコードは次のとおりです。

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

Processの代わりに推奨されるProcessBuilderを使用することをお勧めします。これにより、実行をより細かく制御でき、引数のリストを指定できます。それはあなたの問題を解決するかもしれません、そしてそれはコードの小さな修正を必要とするだけです。

于 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フォルダー名は次のとおりです。svnFolder2654

コピー中に余分なスペースがないことを確認してください。

于 2017-07-13T06:32:54.320 に答える