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 $
死んだトランザクションを一つずつ確認していくのが面倒なので、普通は for で一気に表示する。$ svnlook info /my/svn/repos --transaction 7867-1 me 2008-09-19 20:14:39 +0900 (Fri, 19 Sep 2008) 0 commit comment $
$ 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" コマンドが正常終了したら、本当に削除されたか確認しておく。# svnadmin rmtxns /my/svn/repos 5676-1 Transaction '5676-1' removed. #
$ svnadmin lstxns /my/svn/repos 7867-1 5511-1 5511-2 $



