5

Windows ベースの SVN インストール (CollabNet Subversion Edge を使用) では、リポジトリ フォルダー名を作成するポストコミット フック バッチ ファイルがあり、その Windows フォルダーを指す URLをsvnsync使用して呼び出す必要があります。file:

問題は次のとおりです: Windows フォルダーまたはファイル名を URL に変換するにはfile:、その URL が少なくとも SVN コマンド ライン ツールで受け入れられるようにするにはどうすればよいですか?

4

2 に答える 2

5

バッチ ファイルで、変数FILE_OR_FOLDER_NAMEに (絶対または相対、ローカルまたは UNC、スペースありまたはなし、既存または非存在) Windows ファイルまたはディレクトリ名が含まれている場合、次のコマンドは対応するfile:URL を variableに入れFILE_URLます。

for /f "delims=" %%R in ("%FILE_OR_FOLDER_NAME%") do set FILE_URL=%%~fR%
set FILE_URL=file:///%FILE_URL%
set FILE_URL=%FILE_URL:///\\=//%
set FILE_URL=%FILE_URL:\=/%

行 1 は、相対ファイル名を絶対名に展開します。行 2 の先頭に追加しfile:///ます。3 行目は、UNC パスの特殊なケースを処理します。4 行目では、スラッシュのみを使用していることを確認します。

まとめると、これらは、 、に変換\\remotehost\share\folderされます。file://remotehost/share/folderd:\folderfile:///d:/folder

私のテストによると、上記のコマンドは常にfile:SVN コマンド ラインに受け入れられる URL になり、おそらく他の用途にも受け入れられます。

実際には正しくない唯一のことは、スペースやその他の特殊文字 ( のようなもの#) が結果の URL で適切に URL エンコードされていないことですfile::にD:/my test#repoなりfile:///D:/my test#repoます。これは技術的に正しくありません。ただし、私の特定の使用例では、SVN コマンド ライン パーサーが関係なくリポジトリを検出するため、これは問題になりません。

于 2015-01-07T10:44:04.510 に答える