2

スクリプト(Windowsスクリプトの.cmdファイル)でsvnを使用しています。

現在、すべてのファイルをフォルダーにチェックアウトし、そのフォルダーを繰り返して、ビルドプロセスの一部としてすべてのファイルをマスターファイルに追加します。何かのようなもの:

svn checkout --username %username% %SVNURL% %workingfolder%
FOR %%i IN (%workingfolder%\*.*) DO TYPE %%i >> %DESTFILE%

最初のビルド後のビルドでやりたいのは、最後のビルド以降に変更されたファイルのみが含まれる「変更」ファイルを作成することです。

チェックアウトの代わりにsvnupdateコマンドを使用できます。これにより、更新されているファイルのリストが表示されますsvn updateリファレンス(svnbook.red-bean.com)

私がやりたいのは、svn更新からの結果のこのリストを繰り返し、作業フォルダー内でこれらのファイルを見つけて、変更ファイルにコピーすることです。

4

2 に答える 2

0

更新されたファイルは非常に簡単に見つけることができます。

svn up | findstr /r /c:"^U"

for次のコマンドを使用して、その出力を繰り返すことができます。

for /f "tokens=2* delims= " %%x in ('svn up ^| findstr /r /c:"^U"') do copy "%%x" change
于 2009-12-07T10:30:09.573 に答える
0

私自身の質問に答えてしまったことをお詫びします。これも部分的な答えにすぎませんが、現在私がいるところです。

まず、スペースの問題は%SVNExecutable%のファイルパスだけではなく、コマンドのスペースの問題です。

この問題を解決する方法(Windows XPで動作します)は、usebackqスイッチを使用し、通常の引用符の代わりに逆引用符`を使用することです。これを使用して、svnupdateコマンドを機能させることができました。

for /f "usebackq tokens=2* delims= " %%x in (`%SVNExecutable%svn up --username %username% %SVNURL% %workfolder%`) do ECHO "%%x"

これにより、テストファイルが更新され、最初の更新結果から次のようになります。

U    full\path\to\file\file.sql
Updated to revision 36793.
Summary of conflicts:
Skipped paths: 1

これにより、次の結果が生成されます。

"full\path\to\file\file.sql"
"to"
"of"
"paths:"

私が仕事に取り掛かることができないパズルの最後の残りの部分は、正規表現を使用したfindstrです。これを再度追加して試してみると、次のようになります。

for /f "usebackq tokens=2* delims= " %%x in (`%SVNExecutable%svn up --username %username% %SVNURL% %workfolder% ^| findstr /r /c:"^U"`) do ECHO "%%x"

このエラーが発生します:

The filename, directory name, or volume label syntax is incorrect.

これを新しい質問として開始するかどうかを2つ考えていましたが、これを回答済みとしてマークしました...とにかく、すべての助けに感謝しています

于 2009-12-07T20:33:57.653 に答える