svnadminで最新commitを消した後、レポジトリ操作が失敗する
Subversionでマージするときに誤ってsparse checkoutした状態でマージしてしまった。
普通のdepth infinity状態でないとファイルの欠損が起きてしまう…らしい。改善されたというような話を聞いたのだが、とにかく今回はうまくいかず、変なコミットを作ってしまった。
そんなわけで、svnadminでdump、create、load -rで最後のコミットを消したレポジトリを作成し、そこからマージをやり直そうとしたのだが、うまくいかない。
checkoutできない
まず新たにcheckoutしようとしても、空のフォルダを2、3作った状態で止まって進まない。
mod_dav_svn経由なのでWAFがブロックしているのかと思って確認してみるも空振り。
repoサーバ上でローカル限定のsvnserveを起動してcheckoutしてみるとうまくいった。
そこでそれをtarで固めて作業PCに持ってきてからrelocateした。Windows機ではsymlinkの表現形式がLinuxと異なるのでrevert -Rする。
mergeできない
改めてmergeしようとしたり、diffを取ろうとするとエラーが起きる。
- Malformed svndiff data in representation
- Reading one svndiff window read beyond the end of the representation
などとメッセージが出る。repoが壊れているときに出るらしいのだが、dump/loadしたばかりのrepoなので、当然verifyしてもエラーは出ない。