svn → hg
_ [comp] svn → hg
ローカルにある subversion レポジトリを mercurial レポジトリに変換してみた。本家に Converting Repositories という文書があったのでそれ参考。ただ、何段階か手順を踏む必要があった。 まず svn2hg と svn2hg.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 はどうしたものか。