0

Subversionのpost-commitフックを介してバッチファイルを実行したいと思います。私の問題は、コミットされたファイルごとに1回実行したいのですが、フック内でコミットされたファイルの名前を取得する方法を認識していないことです。フォルダ内のファイルごとに実行できますが、このテスト環境から出て実際にこの機能を使用すると、ファイルの数が非常に多くなり、非常に非効率になります。何か案は??

4

3 に答える 3

1

SVNは、リポジトリへのパスと生成されたリビジョン番号の2つの値をフックに渡します。
この情報を使用して、そのリビジョンで変更されたパスをSVNに要求し、追加/変更されたファイルのリストを取得できます。

于 2013-02-14T15:23:10.347 に答える
1

小さな間違いを1つだけ犯しました。トランザクション内のファイルリスト(サーバー側、サーバー上で実行されるフックとして)は、よりも簡単に(そしてログの「ノイズ」なしに)準備できますsvn log -v。サブsvnlookコマンド付きchanged

リポジトリでの改訂のサンプル(使用するトランザクションの場合-t %TXN%

>svnlook.exe changed -r 31 Hello
U   trunk/Hello.de.txt
U   trunk/Hello.en.txt
U   trunk/Hello.fr.txt

Helloリポジトリルートへのパス(ワーキングコピーではない)、コマンドの出力は部分的にの出力のように見えsvn stます、ファイルへのパスはリポジトリルートからの相対パスです

于 2013-03-27T16:48:20.650 に答える
0

バッチを使用し、いくつかの一時テキストファイルを使用してデータを保存することでそれを理解することができました。変数内のファイルの名前だけを取得するために、いくつかの処理を行う必要がありました。これは、パラメーターとして必要なものだからです。これは最も効率的な方法ではないかもしれませんが、それは私の目標を達成しました...

setlocal EnableDelayedExpansion

rem write a list of the changed files in a text file
"C:\svnpath\bin\svn.exe" log "C:\repo-path\project" -r %TXN% --verbose > "C:\path\changelist.txt"

rem write the list of all files into a text file
cd "C:\repo-path\project"
dir /b > "C:\path\filelist.txt"

rem loop through files
cd "C:\path"
for /F "delims=" %%i IN (filelist.txt) do (
   rem search for file name in list of changed files, if found run batch file on it
   find /i "%%i" changelist.txt > nul

   echo %%i > "C:\path\temp.txt"

   if not errorlevel 1 (
      cd "C:\repo-path\project"
      batchfile.bat %%i
   )
)

rem delete temp files when finished
del "C:\path\filelist.txt"
del "C:\path\changelist.txt"
del "C:\path\changedfiles.txt"
于 2013-03-27T13:09:24.117 に答える