_ [comp] svn → hg

ローカルにある subversion レポジトリを mercurial レポジトリに変換してみた。本家に Converting Repositories という文書があったのでそれ参考。ただ、何段階か手順を踏む必要があった。 まず svn2hgsvn2hg.py を使ってみたけどどうもうまく動かず。手元では yasvn2hg が一番うまく動いたけど、ちょっと修正必要。

--- yasvn2hg.orig	2010-08-04 16:23:16.000000000 +0900
+++ yasvn2hg	2010-08-04 16:30:27.000000000 +0900
@@ -68,7 +68,7 @@
         self._debugflag = debug
         self._use_named_branches = use_named_branches
         self._hg_dest = hg_dest
-        self._hg_ui = mercurial.ui.ui(quiet=not debug)
+        self._hg_ui = mercurial.ui.ui()
         self._hg_repo = None
         self._log_path = "%s.log" % self._hg_dest
         self._log_fp = open(self._log_path, "w")

これは svn レポジトリ全体をまとめてコンバートしてしまうので、あらかじめ svn レポジトリを分割しとかないといけない。参考 > [svn] ひとつのリポジトリを分割して複数のリポジトリを作成する

% svnadmin dump SVN/repos | svndumpfilter include gkrelluim > gkrelluim.dump
% svnadmin dump SVN/repos | svndumpfilter include audkrellm > audkrellm.dump

% svnadmin create SVN.gkrelluim
% svnadmin load SVN.gkrelluim < gkrelluim.dump

% svnadmin create SVN.audkrellm
% svnadmin load SVN.audkrellm < audkrellm.dump

ここでようやく yasvn2hg の出番。まず svn ユーザを hg ユーザにマッピングするためのファイルを生成。

% python yasvn2hg -g user.map file://`pwd`/SVN.gkrelluim

必要があれば修正。

dai = VDR dai (deb) <d+deb●vdr.jp>
unknown = unknown
empty = empty

コンバート。

% python yasvn2hg --no-structure --sloppy -u user.map file://`pwd`/SVN.gkrelluim HG.gkrelluim
% python yasvn2hg --no-structure --sloppy -u user.map file://`pwd`/SVN.audkrellm HG.audkrellm

これで手元の主要な VCS は mercurial になったけど、さて git はどうしたものか。