Subversion でリビジョン戻してみる

Subversion で管理されているディレクトリをファイルシステム上でコピーとかすると .svn ディレクトリまでコピーされちゃって大変なことになるのは結構遭遇します。

で、それの怖いところは、その事実に気付かずに commit までしちゃうことだったりします。

ま、実際今日あったわけだが。

じゃあ、そんなときどうすれば良いのかってのを覚書。

結論は正常な時点のリビジョンに戻すってことなんだけど。


まず、コミット前なら

rm -R /path/to/directory/.svn

で直せるのは結構有名 (だと思う)。

んじゃぁ、コミットしちゃったらどーすんのか、と。

正解は svn update じゃなくて svn merge です。

svn merge -r 103:99 /path/to/file
svn commit /path/to/file

ポイントはリビジョンの指定を Descending にするってとこですな。

で、コピー先のコミットだけならまだ良いんだけど、コピー元とコピー先の両方からコミットしちゃうともう大変。

状況によっては「行方不明の対象ファイル…」とか何とか言われて svn merge すら効かなかったりすることもある。

ってか、今日、まさにそうなった。

ウニュウニュやって治療も出来るんだろうけど、それは面倒なので以下のコマンドで強引に治療してみました。

svn cat -r 99 /path/to/repository > /path/to/file
svn commit /path/to/file

ま、リビジョン指定してリポジトリ上のファイルをゲットし、それをそのまま対象ファイルにリダイレクトして完全に上書きするわけですな。

強引だけど、戻すには手っ取り早いかも。

ちゃんと差分が追えるのかどうかが不安だけどね!