[Subversion]直近のコミットをなかったことにする方法(レポジトリデータを削除)
Subversionレポジトリのデータ構造
レポジトリ名を"sample"とします。 レポジトリのデータ構造は下記のようになっているはずです。/path/to/sample/
README.txt
conf
db
current
format
fs-type
fsfs.conf
min-unpacked-rev
rep-cache.db
revprops
revs
0
1
2
3
4
[中略]
999
transactions
txn-current
txn-current-lock
txn-protorevs
uuid
write-lock
format
hooks
locks
このファイル群を直接いじることで、リビジョンをお尻の方(数字の大きい方)から何個でも消していくことができます。
SVNレポジトリから直近のコミットを削除する方法
例えば最新リビジョンが r999 だとして、ラスト3コミット(r999, r998, r997)を削除したいとします。次のように作業します。
当該リビジョンのDBファイルを削除
rm sample/db/revs/0/999
rm sample/db/revs/0/998
rm sample/db/revs/0/997
"現在リビジョン番号"を 999 → 996 に変更
cat sample/db/current
999
echo 996 > sample/db/current
キャッシュを破棄
echo > sample/db/rep-cache.db
これで、r999, r998, r997 は存在しなかったことになり、最終リビジョンは r996になります。なんでこの方法を発見したのか?
svnadminのdump & load を何度もやり直していたときに、1からやり直すことの面倒くささに閉口して、レポジトリデータを直接いじってみたらできました。
カテゴリ:
Subversion