Mercurial のリポジトリを Git に変換し GitHub へ移行する
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
$ ../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