methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

bzrのリポジトリをgitに変換する方法 (fast-import編)

bzr-git を使う以外に、 fast-import を使う方法があります。
単に乗り換えるために変換したい場合は、こちらのほうが高速で楽です。

まずは、 bzr の fastimport プラグインを用意します。

$ pip install fastimport
$ cd ~/.bazaar/plugins
$ bzr branch lp:bzr-fastimport fastimport

次に、ブランチを変換していきます。カレントディレクトリ配下に trunk release という2つの bzr ブランチがあるとします。これを proj.git に変換します。

$ git init proj.git
$ cd proj.git
$ bzr fast-export --export-marks=marks.bzr ../trunk | git fast-import --export-marks=marks.git
$ bzr fast-export --export-marks=marks.bzr --import-marks=marks.bzr -b release ../release | git fast-import --export-marks=marks.git --import-marks=marks.git
$ git checkout

一回目の export | import では、git 側にはデフォルトのブランチ名である master が使われます。

二回目の export | import では -b オプションでブランチ名を指定してます。 --import-marks オプションを使うことで、 incremental な処理が行われるので、ブランチの履歴全体を処理する必要がなくなります。3つ以上のブランチを変換したい場合は、2つ目と同じ方法を繰り返せばOKです。

このままだと作業ツリーが無いので、最後にcheckoutして完成です。あとは remote add して push とかしたらいいと思います。

7/2 追記:

この、 --export-marks して --import-marks する処理を行うことで、異なるブランチを変換するだけでなく、同じブランチをインクリメンタルに処理することもできます。なので、 bzr で管理しているブランチを Github や bitbucket にミラーすることができます。