Oct 21, 2008

[Subversion] Subversion リポジトリのお掃除

Subversion を長く使っていると、Subversion のトランザクションが走っている状態で Eclipse が落ちたりネットワークが切れたりして、トランザクションが未完の状態で切れてしまうことがある。 こういったトランザクションはクライアントからは分からないが、 サーバ側に「死んだトランザクション」として残っている。 「死んだトランザクション」が残っているからといって別段問題があるわけではないのだけれど、 不要なものがサーバに溜まっていくというのも気持ち悪いので、たまにチェックして要らないものを消している。

svnadmin lstxns
http://subversion.bluegate.org/doc/re40.html
リポジトリのお掃除
http://subversion.bluegate.org/doc/ch05s03.html#svn.reposadmin.maint.cleanup

「死んだトランザクション」の対応方法は以下の通り。

「死んだトランザクション」の確認

「死んだトランザクション」は "svnadmin lstxns" コマンドで確認することができる。 以下では Subversion リポジトリが "/my/svn/repos" にあることを前提とする。

まずは「死んだトランザクション」の一覧を取得する。

$ svnadmin lstxns /my/svn/repos
7867-1
5511-1
5511-2
5676-1
$
次に「死んだトランザクション」の内容を確認して削除しても良いものであるか否かを判断する。
$ svnlook info /my/svn/repos --transaction 7867-1
me
2008-09-19 20:14:39 +0900 (Fri, 19 Sep 2008)
0
commit comment
$
死んだトランザクションを一つずつ確認していくのが面倒なので、普通は for で一気に表示する。
$ for i in `svnadmin lstxns /my/svn/repos`; do echo "*** $i"; svnlook info /my/svn/repos --transaction $i; done
*** 7867-1 
me
2008-09-19 20:14:39 +0900 (Fri, 19 Sep 2008)
0
commit comment
*** 5511-1 
colleague
2008-09-04 16:35:53 +0900 (Tue, 04 Sep 2008)
0
commit comment
*** 5511-2 
colleague
2008-09-04 16:42:18 +0900 (Tue, 04 Sep 2008)
0
commit comment
*** 5676-1 
me
2008-09-12 14:29:26 +0900 (Fri, 12 Sep 2008)
61
commit comment

「死んだトランザクション」の削除

削除しても良い「死んだトランザクション」があったら、"svnadmin rmtxns" コマンドで削除する。 "svnadmin rmtxns" を実行する前に Subversion リポジトリに対する外部からのアクセスを禁止しておくこと。

# svnadmin rmtxns /my/svn/repos 5676-1
Transaction '5676-1' removed.
#
"svnadmin rmtxns" コマンドが正常終了したら、本当に削除されたか確認しておく。
$ svnadmin lstxns /my/svn/repos
7867-1
5511-1
5511-2
$

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |