2017-07-12 3 views
2

SVNの2つのフォルダを比較し、その違いを別のフォルダにエクスポートする方法windowsコマンドプロンプトSVN comapreコマンドプロンプトでの2つのフォルダとエクスポートの違い

tortoise svn guiを使用すると、2つのURLS select allと選択ファイルをフォルダに比較できます。 export changed files using tortoise svn to another directoryで述べられているように。

コマンドプロンプトから実行できますか。

私はhttps://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-automation.htmlにコマンドのリストを見ましたが、何も見つかりませんでした。

私はhttps://www.electrictoolbox.com/subversion-export-changed-files-cli/でスクリプトを見つけるが、それは、Linux用の

答えて

1

だった私は、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文を削除します。

+0

diffログをエクスポートしますが、亀の輸出と同じフォルダ構造を探しています –

+0

あなたの質問がありました。申し訳ありませんがあなたの質問を誤読し、私の答えを変更します。 –

+0

私は自分の答えを変えました。私が付けたスクリプトは、Linux用に投稿したスクリプトとまったく同じです。 –

関連する問題