gitが手になじまない人へhg-gitのススメ
gitが手になじまない方、きっと多いでしょう。自分のその内の一人です。
コマンドもろくに叩けなかった頃のToitorseHgの優しさが忘れられなくてhgを使っていましたが、gitのほうが人気だと聞いたので使ってみたら冷たくされてびっくりしました。
個人的にhgはgitに比べてシンプルで使いやすいと思っています。自分がhgとgitを使っている間のググり率を測ればgitのほうがかなり高い感じです。
そんな自分のような人間は、gitが怖くてGithubを使うたびにビビりながらpushする生活を余儀なくされていたのですが、世の中にはhg-gitというスバラシイプラグインが存在しているみたいです。
これを使うことでGithubなどにあるgitリポジトリにローカルのhgリポジトリからpushしたり、Githubからローカルのhgリポジトリにクローンしたりpullしたりできます。
リポジトリはGithubにも有りますが、こちらはミラー。本家はBitbucketのほうにあるのでIssueはこっちに投げましょう。
Install
ドキュメントにはeasy_installでのインストール方法が書いてありますが、pipでもインストールできます。
# easy_install hg-git
または
# pip install hg-git
~/.hgrcの[extensions]に以下を追加します。
[extensions]
hgext.bookmarks =
hg-git =
Usage
gitリポジトリをクローンする。
$ hg clone git://github.com/user/repos.git
Githubへpushする。
$ hg push git+ssh://git@github.com/user/repos.git
Githubからpullする。
$ hg pull
普段Bitbucketで時々Githubへpushする場合はこれで問題ないですが、Githubだけ使用する場合はpushのパス指定だけ違うし、毎回書くのめんどいのでhg/hgrcに以下を書いておく。
[paths]
default = git://github.com/user/repos.git
default-push = git+ssh://git@github.com/user/repos.git
pushの時だけdefault-pushを使用してくれる。
Note
“no changes found”が出るとき。
$ hg bookmark -f master
Mercurial - hg-git で github に push するときに忘れるな hg bookmark -f master - Qiita [キータ]
In Trouble
hg-gitはIssueの貯まり具合を見る限りなかなかバグが多そう。
今後解決してくれることを期待しているが、待っても入れないので自分がハマった点だけでもここに書いておく。
Note
dulwich0.9系での不具合
hg-gitの依存関係でインストールされるパッケージdulwich。これはgitのPython実装でPythonからgitリポジトリを操作できる。すごい。
dulwichの最新版は0.9.3。(2013/10/01)
pipでインストールするとこの最新版が入るが、dulwichのバージョンが0.9以降のものを使用するとcloneで落ちるバグがあった。(2013/10/01)
このバグはIssueで報告されており( durin42 / hg-git / issues / #79 - hg-git crashes with newer versions of dulwich — Bitbucket )、パッチまでつけてくれていたので修正すると使えた。
やっとcloneできてpushしようと思ったら、pushでTraceback。
こちらはIssueでもまだ報告されていない。しかもdulwichで落ちている。。。
自分はローカルにインストールしたソースを勝手に修正してしまったが、現状では0.8系をインストールして安心に使うのがいいのではないかと思う。
# pip install dulwich==0.8.7