hg cloneする時に利用できるリポジトリの指定方法について #mercurialjp

このエントリはMercurial Advent Calendar 2013 の7日目です。*1 hg cloneするときのURLについて書きます。

基本編

通常hg cloneに次のようなURLを渡すことでリポジトリをクローンすることができます。

$ hg clone path/to/local/repo
$ hg clone file:///absolute/path/to/local/repo
$ hg clone http://bitbucket.org/troter/home
$ hg clone https://bitbucket.org/troter/home
$ hg clone ssh://hg@bitbucket.org/troter/home

省略形を利用する

Schemes エクステンション*2を有効にすると、Mercurialホスティングサイトに向けの省略記法が利用できるようになります。

# .hgrc
[extensions]
schemes =

Schemes エクステンションを有効にすると、次の省略形が利用可能になります。

省略形 展開されるURL
py://cpython http://hg.python.org/cpython
bb://troter/home https://bitbucket.org/troter/home
bb+ssh://troter/home ssh://hg@bitbucket.org/troter/home
gcode://go https://go.googlecode.com/hg/ *3
kiln://hoge/bar https://hoge.kilnhg.com/Repo/bar

詳しくは次を参考にしてください。

省略形を定義する

schemesというセクションを利用することで自分で省略形を定義することもできます。定義してみましょう。

# .hgrc
[schemes]
codeplex = https://hg.codeplex.com/

この定義で、次の省略形が利用可能になります。

省略形 展開されるURL
codeplex://nakedobjects https://hg.codeplex.com/nakedobjects

社内リポジトリ用に設定すると便利です。

hg clone後に移動したいリビジョンを指定する

省略形を含めURLにフラグメントを使うとhg clone後に移動するリビジョンを指定できます。次の例ではリポジトリクローン後stableブランチに移動します。

$ hg clone http://hg.intevation.org/mercurial/crew/#stable
destination directory: crew
adding changesets
adding manifests
adding file changes
added 20047 changesets with 38585 changes to 2219 files
updating to branch stable
1032 files updated, 0 files merged, 0 files removed, 0 files unresolved

追記:この方法を利用するとhg pull時のリビジョン(ブランチ)もフラグメントのものが利用されます。特定のブランチのみ利用するリポジトリ(CIサーバーや、ステージング環境、など)で活用してください。 id:flying-foozyさんアドバイスありがとうございます。

まとめ

*1:大遅刻ですが。。

*2:Mercurial本体にバンドルされているエクステンンションです

*3:なぜか.にcloneしようとする。ディレクトリを指定するとよい。例: hg clone gcode://go go