目次
バージョン管理システム Mercurial
分散バージョン管理システム。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 プロフェッショナルプログラミング:ある nakagami の日記:So-netブログ http://bit.ly/ZwAnYP
- JapaneseQuickStart せっかちな人にぴったりな入門編。
ツールとサービス
- http://bitbucket.org/ Mercurialのホスティングサービス
- http://code.google.com/intl/ja/ Google Code は Mercurial に対応している
- Qt4 Creator から Mercurial を操作できる
インストール
実体は Python スクリプトなので、Python が入っていれば自分でインストールできる。
Ubuntu Linux
バイナリパッケージでインストールする場合。 ubuntu では sudo aptitude install mercurial
Windows
バイナリパッケージでインストールする場合。
http://mercurial.selenic.com/wiki/Download#Windows
mercurial-1.7.0.msi (2010-11-14現在)
Windows ではエクスプローラと統合された tortoisehg もある。
cygwin にはコマンドライン版 hg が入っている。
Mac (binary)
2011-09-05 SnowLeopard(いまだに。。)
バイナリがある http://mercurial.berkwood.com/
- Mercurial-1.9.2-py2.6-macosx10.6.zip
$ which hg /usr/local/bin/hg
Mac (ports)
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"
hg status
すべてのファイルについて表示するには -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
- hgignore 参照
cygwin Mercurial 0.9.5
$ more ~/.hgrc [ui] username = Takuya Nishimoto <nishimoto@m.ieice.org> $ tail ~/.bashrc export HGENCODING=UTF-8
コミットにおける習慣
@kuy さんと @nishimotz の Twitter 議論:
- 日本語でのコミットメッセージがちゃんと使えるためには設定が必要、かも知れない。
- コミットメッセージには日本語を使わない、という習慣を身につけて欲しい。
- 1行80文字の簡潔な英語で書くという制約から、適切な単位でコミットする癖が付きます。
- 慣れないうちは1行目のサマリは英語、必要なら日本語で補足という手もあります。
クロスプラットフォーム(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 revert
ストーリー:
正しく動く状態のスクリプトを hg commit したあとで、 仕様を変更するために、作業ファイルを編集した。
しかし、修正の方針が誤っていたことに気づいた。
作業ファイルの一部を直前に commit された状態に戻したい。
そんなときに hg revert を使う。
$ hg revert ファイル名
編集中のファイルは ファイル名.orig に改名される。
hg push / hg update
ストーリー:
共有レポジトリ masterdir から clone された作業レポジトリ workdir で更新をコミットする。 これを共有レポジトリに戻す。
$ cd workdir $ hg push masterdir $ cd masterdir $ hg update
hg tag
特定のリビジョンにタグ(名前)をつける。 hg tags でタグの一覧を表示できる。
$ hg tag release-091227 $ hg tags tip 12:5eff5957c3a7 release-091227 11:11656305fcc5
hg bookmarks
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 ブランチ名
他のブランチから取り込む:
-
- 「Mercurialはブランチ間のマージの繰り返しをを簡単にできるようにしています。hg pullとhg update -mを走らせてから結果をコミットするだけでマージができます。 」
- hg merge というコマンドもある http://mercurial.selenic.com/wiki/JapaneseMerge
- マージが成功したら commit が必要。commit するまで次のマージができない。
git と似ているところ:
- 同じ作業ファイルの中でブランチの切り替えができる
git と違うところ:
- ブランチの切り替えは git ではサブコマンド checkout だが、mercurial では update である