「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形式、ファイル比較レポートを含める」を選択してレポートを保存しておけば、レポートをもとに差分の確認は他のチームメンバにお願いしたりもできますね。