だった私は、Windowsで動作するように言及したshell script for Linuxを変更しました。最初の変種(svn-export.bat
)は、リポジトリ内の2つの異なるリビジョンで動作します。 2番目の変種(svn-localexport.bat
)は2つのローカルディレクトリで動作します。
これは、svn diff --summarize -r revision-from:revision-to repository
をsvnコマンドとして使用して動作します。 svn-export.bat
それに次の内容をコピーしてそれを使用します:バッチファイルを作成します
svn-export revision-from revision-to repository target-directory
のsvn-export.bat:
@echo off
setlocal enabledelayedexpansion
set INVARGS=0
if [%1] == [] set INVARGS=1
if [%2] == [] set INVARGS=1
if [%3] == [] set INVARGS=1
if [%4] == [] set INVARGS=1
if %INVARGS% == 1 (
echo Usage: %0 ^<revision_from^> ^<revision_to^> ^<repository^> ^<target_directory^>"
goto eof
)
rem set up nice names for the incoming parameters to make the script more readable
set "revision_from=%1"
set "revision_to=%2"
set "repository=%3"
set "target_directory=%~4"
rem the findstr is needed so we only get added/modified files and not the deleted ones or anything else
set "svnCommand=svn diff --summarize -r%revision_from%:%revision_to% %repository% ^| findstr /B "[AM]""
if not exist "%target_directory%" (mkdir "%target_directory%")
rem go into target directory
pushd "%target_directory%"
for /f "delims=" %%L in ('%svnCommand%') do (
rem convert line like: "A http://..." to "http://..."
set "filename=%%L"
rem echo.before: ^<!filename!^>
set "find=*%repository%/"
call set filename=%%filename:!find!=%%
rem echo.after: ^<!filename!^>
rem don't export if it's a directory we've already created
if not exist "!filename!" (
for %%F in ("!filename!") do set "directory=%%~dpF"
if not exist "!directory!" (mkdir "!directory!")
svn export -r %revision_to% %repository%/!filename! "%cd%\!filename!"
)
)
popd
rem to summarize any deleted files or directories at the end of the script uncomment the following lines
rem echo.Deleted files:
rem svn diff --summarize -r%revision_from%:%revision_to% %repository% | findstr /B "[D]"
:eof
次のスクリプトはほぼ同じですが、 svnによって管理される2つのローカルディレクトリを比較します。そのため、svnコマンドとしてsvn diff --summarize --old folder-old --new folder-new
を使用します。それを使用してください経由:
svn-localexport folder-old folder-new target-directory
svn_localexport.bat:彼らはすでに存在している場合は、両方のバッチスクリプトは、ターゲットファイルを上書きしないことを
@echo off
setlocal enabledelayedexpansion
set INVARGS=0
if [%1] == [] set INVARGS=1
if [%2] == [] set INVARGS=1
if [%3] == [] set INVARGS=1
if %INVARGS% == 1 (
echo Usage: %0 ^<folder_old^> ^<folder_new^> ^<target_directory^>"
goto eof
)
rem set up nice names for the incoming parameters to make the script more readable
set "folder_old=%~1"
set "folder_new=%~2"
set "target_directory=%~3"
pushd "%folder_old%"
set "folder_old_abs=%cd%"
popd
pushd "%folder_new%"
set "folder_new_abs=%cd%"
popd
rem the findstr is needed so we only get added/modified files and not the deleted ones or anything else
set "svnCommand=svn diff --summarize --old "%folder_old_abs%" --new "%folder_new_abs%" ^| findstr /B "[AM]""
if not exist "%target_directory%" (mkdir "%target_directory%")
rem go into target directory
pushd "%target_directory%"
for /f "delims=" %%L in ('%svnCommand%') do (
rem convert line like: "A C:\Users\...\src.c" to "src.c"
set "filename=%%L"
rem echo.before: ^<!filename!^>
set "find=*%folder_old_abs%\"
call set filename=%%filename:!find!=%%
rem echo.after: ^<!filename!^>
rem don't export if it's a directory we've already created
if not exist "!filename!" (
for %%F in ("!filename!") do set "directory=%%~dpF"
if not exist "!directory!" (mkdir "!directory!")
echo copy "%folder_new_abs%\!filename!" "%cd%\!filename!"
copy "%folder_new_abs%\!filename!" "%cd%\!filename!"
)
)
popd
rem to summarize any deleted files or directories at the end of the script uncomment the following lines
rem echo.Deleted files:
rem svn diff --summarize --old "%folder_old_abs%" --new "%folder_new_abs%" | findstr /B "[D]"
:eof
注意。変更する場合は、対応するif文を削除します。
diffログをエクスポートしますが、亀の輸出と同じフォルダ構造を探しています –
あなたの質問がありました。申し訳ありませんがあなたの質問を誤読し、私の答えを変更します。 –
私は自分の答えを変えました。私が付けたスクリプトは、Linux用に投稿したスクリプトとまったく同じです。 –