任意のディレクトリ以下の.svnディレクトリをまとめて消す
Subversionでバージョン管理をしていると、管理下にあるディレクトリ以下には、サブディレクトリごとに.svnというディレクトリが作成されます。この.svnによってバージョン情報が管理されているっぽいのですが、.svnが邪魔に感じる場面は多いのです。
「あー、.svnマジうぜー。サブディレクトリいっぱいあるのに、いちいち手で消してられっか!」
というアナタにこれ。
たらららったら〜。.svnディレクトリを再帰的に全部消すPHPスクリプト〜。
使い方は簡単。以下のソースコードを.svnディレクトリがある最も上位のディレクトリに保存して、コンソール(あるいはターミナル)でそのディレクトリに移動して
$ php -f スクリプト名.php
とするだけ。ディレクトリの位置関係を図示するとこんな感じ。
+ project <dir> + .svn <dir> : : + このスクリプト.php : :
<?php rm_svn(dirname(__FILE__)); function rm_svn($path){ if (substr($path, strlen($path) - 1, 1) == '/'){ $path = substr($path, 1, strlen($path) - 1); } if (file_exists("$path/.svn") ){ rm_r("$path/.svn"); echo "removed : $path/.svn\n"; } foreach(scandir($path) as $d){ if ( preg_match('/^\.+$/', $d) ){ continue; } if (is_dir("$path/$d") ){ rm_svn("$path/$d"); } } } function rm_r($path){ if (substr($path, strlen($path) - 1, 1) == '/'){ $path = substr($path, 1, strlen($path) - 1); } if ( !file_exists($path) ){ return true; } if ( !is_dir($path) ){ return unlink($path); }else{ foreach(scandir($path) as $d){ if (preg_match('/^\.+$/', $d) ){ continue; }elseif(is_dir($path.'/'.$d) ){ if (!rm_r($path.'/'.$d) ) return false; }else{ if (!unlink($path.'/'.$d) ) return false; } } if (!rmdir($path) ) return false; } return true; } ?>
これでSubversionの束縛から逃れられるね☆