SVNで過去の特定リビジョンと最新リビジョンの差分を抽出する

SVNで管理している大量のファイルのうち、直近数か月の間に更新されたファイルを洗い出したい。更新のあったファイルについてはその更新内容も確認したい。」という場面が仕事でありました。
ググってみると、「TortoiseSVNでリビジョンの比較」や「svn diffコマンドで比較」といった方法が見つかりますが、今回比較したいファイルは1万件ほどのファイル数あり、いずれの方法も大量ファイルには向かなそうな印象。

どうしようか少し悩んだ結果、比較したいフォルダをローカル環境にチェックアウトし、WinMergeで比較するという力技に行きつきました。
今後も何度か実施することになりそうなので、ローカル環境へのチェックアウトとWinMergeに食わせるところまではバッチ化しておきます。

やりたいこと

SVNで管理している大量のファイルのうち、直近数か月の間に更新されたファイルを洗い出したい。
更新のあったファイルについてはその更新内容も確認したい。

バッチファイル

比較対象ファイルをリポジトリからローカル環境へのチェックアウトするところとWinMergeに食わせるところまではバッチ化。

@echo off
rem ==============================================
rem 【処理概要】SVNで管理されているスクリプト類を、最新リビジョンと過去リビジョンで比較する。
rem 【第一引数】過去リビジョン番号
rem ==============================================

rem ----------------------------------------
rem 比較用フォルダ作成(ローカルリポジトリ)
rem ----------------------------------------

set time_tmp=%time: =0%
set time_now=%date:/=%%time_tmp:~0,2%%time_tmp:~3,2%%time_tmp:~6,2%

set root_dir=%USERPROFILE%\Desktop\WORK\%~n0\%time_now%
set new_dir=%root_dir%\reps_new_HEAD
set old_dir=%root_dir%\reps_old_%~1

mkdir %new_dir%\XXXXXX
mkdir %new_dir%\YYYYYY
mkdir %new_dir%\ZZZZZZ

mkdir %old_dir%\XXXXXX
mkdir %old_dir%\YYYYYY
mkdir %old_dir%\ZZZZZZ


rem ----------------------------------------
rem 比較用フォルダにSVNからチェックアウト
rem ----------------------------------------

rem 最新リビジョン
svn checkout --username xxx        http://~~/~~/XXXXXX %new_dir%\XXXXXX
svn checkout --username xxx        http://~~/~~/YYYYYY %new_dir%\YYYYYY
svn checkout --username xxx        http://~~/~~/ZZZZZZ %new_dir%\ZZZZZZ

rem 引数で指定した古いリビジョン
svn checkout --username xxx -r %~1 http://~~/~~/XXXXXX %old_dir%\XXXXXX
svn checkout --username xxx -r %~1 http://~~/~~/YYYYYY %old_dir%\YYYYYY
svn checkout --username xxx -r %~1 http://~~/~~/ZZZZZZ %old_dir%\ZZZZZZ


rem ----------------------------------------
rem WinMergeで比較
rem ----------------------------------------

"%USERPROFILE%\Software\winmerge-2.16.42.1-x64-exe\WinMerge\WinMergeU.exe" %old_dir% %new_dir%

WinMergeで比較

バッチ実行後にWinMergeのフォルダ比較画面が表示されるので、差分があったファイルをポチポチして差分内容を確認する。
[ツール]→[レポートの生成]から「シンプルなHTML形式、ファイル比較レポートを含める」を選択してレポートを保存しておけば、レポートをもとに差分の確認は他のチームメンバにお願いしたりもできますね。