分散バージョン管理システム。Pythonで実装されている。 git に影響を受けて開発されたと言われている。 git にない特徴として、 http サーバになって他のマシンと通信する機能が便利。
また Windows での環境構築が容易であり、GUI ツール tortoisehg も安定している。
<html> <iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=r4wh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4798032948" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe> </html>
実体は Python スクリプトなので、Python が入っていれば自分でインストールできる。
バイナリパッケージでインストールする場合。 ubuntu では sudo aptitude install mercurial
バイナリパッケージでインストールする場合。
http://mercurial.selenic.com/wiki/Download#Windows
mercurial-1.7.0.msi (2010-11-14現在)
Windows ではエクスプローラと統合された tortoisehg もある。
cygwin にはコマンドライン版 hg が入っている。
2011-09-05 SnowLeopard(いまだに。。)
バイナリがある http://mercurial.berkwood.com/
$ which hg /usr/local/bin/hg
2010-11-12 SnowLeopard にて MacPorts :成功していない。
$ sudo port install mercurial
db46 requires the Java for Mac OS X development headers
macports の手順でやっと db46 成功。
$ sudo port install mercurial (omitted) To fully complete your installation and make python 2.6 the default, please run: sudo port install python_select sudo python_select python26
なのでやっておく。
$ sudo port install python_select $ sudo python_select python26
プログラミングではなく latex の例で。
file.tex と style.cls がすでにあるとする。
ファイル名が_で始まるファイルと、各種バイナリや一時ファイルを無視するように設定。
カレントに .hgignore を作る。先頭の "syntax: glob" は必須。書かないと正規表現モードになる。
syntax: glob *~ _* */_* *.aux *.dvi *.idx *.log *.toc *.bbl *.blg *.pdf *.zip fig_unused/*
$ hg init $ hg add file.tex style.cls .hgignore $ hg commit -m "initial commit"
すべてのファイルについて表示するには -A オプション。
$ hg status -A
M file1 : 更新されたファイル ! file2 : 管理されているのに見つからない。hg remove すれば解決。 A file3 : 追加されてcommitを待っているファイル。 R file4 : hg remove されてcommitを待っているファイル。 ? file5 : 管理されていないファイル。hg add するか .hgignore に追加すれば解決。 C file6 : -A しないと出てこない。commit 済みのファイル(?)
[.hgignore]
syntax: regexp .+~$ ^_.* ^\d\d\d\d$ galatea
cygwin Mercurial 0.9.5
$ more ~/.hgrc [ui] username = Takuya Nishimoto <nishimoto@m.ieice.org> $ tail ~/.bashrc export HGENCODING=UTF-8
@kuy さんと @nishimotz の Twitter 議論:
クロスプラットフォーム(Windows と Linux 環境の混在)で気になるのは、ソースコードの文字コードと改行コードだが、徐々に確認していきたい。 Python スクリプトのバージョン管理であれば、あまり難しく考えなくてよさそう。
[linux-host] $ hg serve -v [cygwin] $ hg clone http://linux-host:8000/ project-name
[linux-host] $ hg remove -f gomi.txt $ hg serve -v [cygwin] $ hg pull http://linux-host:8000/ $ hg update
Windows からは TortoiseHg で init / add / commit できるが、push はコマンドプロンプトでやる必要がある。
ここでは clone を使わないで init されたディレクトリに push してみる。
[linux-host: ~/.hgrc]
[web] push_ssl = false allow_push = *
[linux-host] $ mkdir project-name $ cd project-name $ hg init $ hg serve [windows] $ hg push http://linux-host:8000/ [linux-host] $ hg checkout
ストーリー:
正しく動く状態のスクリプトを hg commit したあとで、 仕様を変更するために、作業ファイルを編集した。
しかし、修正の方針が誤っていたことに気づいた。
作業ファイルの一部を直前に commit された状態に戻したい。
そんなときに hg revert を使う。
$ hg revert ファイル名
編集中のファイルは ファイル名.orig に改名される。
ストーリー:
共有レポジトリ masterdir から clone された作業レポジトリ workdir で更新をコミットする。 これを共有レポジトリに戻す。
$ cd workdir $ hg push masterdir $ cd masterdir $ hg update
特定のリビジョンにタグ(名前)をつける。 hg tags でタグの一覧を表示できる。
$ hg tag release-091227 $ hg tags tip 12:5eff5957c3a7 release-091227 11:11656305fcc5
since 2011-10-11
hg bookmarks はバージョン 1.8 から標準機能になった。
「移動可能なマーキングによる履歴進展の追跡」
git tag と等価という話 http://www.anlyznews.com/2010/12/gitmercurial8.html
since 2011-11-01
ブランチを確認する:
hg branch
ブランチを作成する:
hg branch ブランチ名
ブランチを切り替える:
hg update -C ブランチ名
他のブランチから取り込む:
git と似ているところ:
git と違うところ: