kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Windows環境でSubversionのバージョン管理外ファイルを削除する

Subversionの作業コピーをリポジトリと同期する場合,Eclipseだと「置換->リポジトリーから最新」をよく使うと思うけど,これをDOS上で再現しようとすると,単純に "svn revert" して "svn update" するだけだと完全に同期できたとは言えない.そもそも "svn revert" はバージョン管理対象の変更を戻すだけなので,バージョン管理外のファイルやディレクトリが作業コピー上に追加されていた場合に,それらを削除してくれるわけではない.

ということで,作業コピーをリポジトリと完全に同期したい場合はバージョン管理外ファイルやディレクトリの削除も行わなければならず,そのためのコマンドは付属されていないので,あまり需要がないかもしれないけど,これをWindows環境で再現する方法を考えてみた.ただ,Windows環境とは言え,Cygwinだけは入れておく前提なので,もはやUnix環境でも同じ件について.ただ,Unix環境で使うのであれば,cutじゃなくてawkの方が良いと思う.

svn status | grep ^? | cut -c9- | xargs rm -rf
  • 管理対象外ファイルやディレクトリは "svn status" で1文字目が ? で出力される
  • 出力結果から9文字目以降を切り出す
  • xargsで対象を全て削除する

これで管理対象外ファイルやディレクトリが削除できるので,後は "svn revert" して "svn update" すれば,綺麗すっきり完全に同期できると思う.