Archive for 12月, 2012

BitBucket(Mercurial)からGitHub(Git)への移行方法

BitBucketで管理していたリポジトリをやっぱりGitへ移行したいとき、git-hgを利用すると簡単に移行できます。
(MercurialのリポジトリからGitのリポジトリへ移行したいときも大体おなじです)。では、やり方をみていきましょう。

1. git-hgをインストール

$ git clone https://github.com/cosmin/git-hg
$ git submodule update --init

でgit-hgを取得し、/opt/git-hgディレクトリなどにコピーします。これでインストールは完了です。

2. BitBucketリポジトリのクローン

インストールしたgit-hgを利用すると、MercurialのリポジトリをGitのリポジトリとしてクローンできます。

$ /opt/git-hg/bin/git-hg clone https://bitbucket.org/okamototk/kanonconductor

3. GitHubのリポジトリを作成

GitHubのWeb画面から空のGitHubのリポジトリを作成します。ここでは、okamototkユーザでkanonconductorという同じ名前のリポジトリを作成したとします。
リポジトリのURLは、

* https://github.com/okamototk/kanonconductor

になります。

4. GitHubのリポジトリへプッシュ

2でクローンしたリポジトリ上で作成したGitHubのリポジトリをリモートリポジトリとして設定します。

$ git remote add origin https://okamototk@github.com/okamototk/kanonconductor.git

okamototk@はGitHubのユーザ名です。CentOS6.xなどGitのバージョンが古いLinuxディストリビューションを利用している場合、必要となります。設定したら、プッシュします。

$ git push -u origin master

この例ではmaster(default)ブランチのみプッシュしていますが、他のブランチをプッシュすることも可能です。

5. BitBucket(Mercurial)のリポジトリの変更のマージ

BitBucket(Mercurial)のリポジトリの変更内容をGitHub(Git)のリポジトリへマージすることもできます。やり方は、Mercurialから取り込みたいブランチへ移動し、

$ git-hg  fetch

とし、Mercurialの差分を取り込みます。Mercurialリポジトリ上の差分を取り込む場合は、git-hgを使うことに注意してください。取り込んだ差分をマージするには、

$ git merge FETCH_HEAD

とします。これは通常のgitのマージと同じです。

mercurialのブランチは、

$ git branch -r
  hg/master
  hg/rel1.x
  hg/rel2.x..

のような感じでプレフィックスがhg/でリモートブランチとして登録されています。ブランチを切り替えるには、

$ git checkout rel1.x

などとすればokです。上記と同様にfetch/mergeでブランチの変更を取り込むことができます。

なお、Gitの使い方については、Gitポケットリファレンスをご覧ください。