Mercurial のリポジトリを Git に変換し GitHub へ移行する

Mercurial リポジトリの調整

Mercurial リポジトリにユーザ名が

foo<foo@example.jp>

というメールアドレスの前にスペースのない不正な形式のコミットが含まれていました。そのまま作業を進めた場合、以下のエラーで GitHub に push できませんでした。

error: object 66c48a2540949c8fcb37084f62a41c5fc2b68de1:invalid author/committer line - missing space before email

このユーザ名を修正します。

authors.txt というファイルを作成し、「変更前の文字列=変更後の文字列」を記載します。

foo<foo@example.jp>=foo <foo@example.jp>

ci-ja リポジトリのユーザ名を修正して ci-ja.fix リポジトリを作成します。

$ hg convert --authors authors.txt ci-ja ci-ja.fix

default ブランチ以外は不要ですので、default ブランチのみを取り出したリポジトリを作成します。

$ hg clone -r default ci-ja.fix ci-ja.default

Git リポジトリへの変換

fast-export tool をダウンロードします。

$ wget http://repo.or.cz/w/fast-export.git/snapshot/fab6d6f0257c0e7db96c32ac418c51ff5d094b0b.zip
$ unzip fast-export-fab6d6f0257c0e7db96c32ac418c51ff5d094b0b.zip
$ ls
ci-ja.default  fast-export
ci-ja.fix      fast-export-fab6d6f0257c0e7db96c32ac418c51ff5d094b0b.zip

空の Git リポジトリを作成します。

$ git init ci-ja
$ cd ci-ja

Mercurial リポジトリをエクスポートします。

$ ../fast-export/hg-fast-export.sh -r ../ci-ja.default

チェックアウトしてファイルを取り出します。

$ git checkout

git flow を初期化します。

$ git flow init

すべてデフォルトを選択します。

Which branch should be used for bringing forth production releases?
   - develop
   - master
   - migrations
   - model_instances
Branch name for production releases: [master] 

Which branch should be used for integration of the "next release"?
   - develop
   - migrations
   - model_instances
Branch name for "next release" development: [develop] 

How to name your supporting branch prefixes?
Feature branches? [feature/] 
Release branches? [release/] 
Hotfix branches? [hotfix/] 
Support branches? [support/] 
Version tag prefix? [] 

develop ブランチに移動し、master ブランチをマージします。

$ git checkout develop
$ git merge master

本家リポジトリを「upstream」として登録します。

$ git remote add upstream git@github.com:EllisLab/CodeIgniter.git

本家の develop ブランチを pull します。

$ git pull upstream develop

衝突が起きましたので解消します。基本的には REMOTE に合わせます。

$ git mergetool

解消したら、コミットします。

$ git commit

GitHub に作成したリポジトリを origin として登録します。

git remote add origin git@github.com:codeigniter-jp/ci-ja.git

develop ブランチを push します。

git push -u origin develop

master ブランチを push します。

$ git checkout master
$ git push -u origin master