2009年4月5日日曜日

Mercurial始めました

書けども書けどもD論と投稿論文が埋まらないので、ぢつとディスプレイを見て、我泣きぬれてWinshellとたわむれる土日。せっかく書いた文章を研究室の端末とやり取りしててうっかり上書きしてしまったりすると数日ガチへこみしそうなのでウマいバックアップ管理の仕方を模索してた。そんなわけで以前いいよとの噂を聞いてたMercurial。MercurialはSubversionとかCVSとかに代表されるバージョン管理システムの一種らしいんだが、Subversionとかとちがって、どっかのサーバーに変更履歴(リポジトリというらしい?)を溜めるのではなく、各端末に履歴がたまっていく。サーバー立てるとかプロキシ云々のめんどくさい設定なしで、ローカルで動くバックアップツールみたいに気軽に使うこともできるぽい。Mercurial使うときは作業してるディレクトリの中に、.hgというフォルダができてそこに変更履歴がためられる。まぁなによりMercurialという名前がええよな。Mercuryから派生してるからコマンドもHgとか無駄に凝ってる。
参考文献
http://www.02.246.ne.jp/~torutk/mercurial/intro.html
http://www.lares.dti.ne.jp/~foozy/fujiguruma/scm/mercurial.html
http://www.lares.dti.ne.jp/~foozy/fujiguruma/scm/mercurial-tortoise.html#encoding

MercurialはWindowsでもLinuxでも使える。基本はコマンドラインで動かすんだけど、Windows用にはエクスプローラーのアドオンとして使えるTortoiseHGというのがある。カメさんかわゆい。一応両方入れておく。ついでに前々からエクスプローラーからコマンドプロンプトを呼べればいいのにと思っていてそれが実現できるソフトFolderPromptも見つけたので入れておく。いやーこれ便利だわ。なんでいままで探そうとしなかったんだろう。
で、あとMercurialで差分をとってそれを表示するときに、コマンドプロンプトだとあまりにわかりにくいし、TortoiseHGのデフォで入っているKdiffは日本語字化けしたので、Winmergeをインストール。これをMercurialで使うには、Mercurial.iniをちょっといじる必要があるぽい。
TortoiseHG用


[extdiff]
;cmd.vdiff = C:\Program Files\TortoiseHg\kdiff3
;cmd.vdiff = C:\Progra~1\TortoiseSVN\bin\TortoiseMerge.exe
;cmd.vimdiff = gvim.exe
;opts.vimdiff = -f '+next' '+execute "DirDiff ".argv(0)." ".argv(1)'
cmd.vdiff = C:\Program Files\WinMerge\WinMergeU.exe
opts.vdiff = /r /e /x /ub

Mercurial本体の場合

[extensions]
; The win32text extension is available and installed by default. It
; provides built-in Python hooks to perform line ending conversions.
; This is normally much faster than running an external program.
hgext.win32text =
hgext.extdiff =
[extdiff]
cmd.wmdiff = C:\Program Files\WinMerge\WinMergeU.exe
opts.wmdiff = /r /e /x /ub

はーMercurial関連いじってPCが全般的に使いやすくなった。

とりあえず、自分が作業してるフォルダでリポジトリ作るには

hg init

とする。(TortoiseHGだと右クリック→Create Repository Here)
そうすっと .hgというフォルダができる。
変更履歴をとりたいファイル、たとえばAAA.txtを

hg add AAA.txt

として追加する。
とりあえずは、最初の状態を保存したいのでこの時点で

hg commit -m "initial state(なんかコメントを書く)"

とするとこれが最初の”チェンジセット”(変更履歴のまとまり)として保存される。
そのあとファイルになんか変更すると、

hg status

とやると

M AAA.txt

みたいに、変更されたことがMで表示される。

hg diff (もしくはエクステンションで定義したwmdiff等のコマンド)

で、差分を表示。

hg log

で変更履歴を表示。ある程度変更したらまたcommitしてチェンジセットを作る。
まぁしばらくこんな感じで。のちのち端末間のをうまいことまとめたりする方法をしらべていこうかなぁ。

追記1
WinMergeのxdocdiffてゆープラグインを入れると、なんとOffice系統のファイルの差分も見れるようになる。いやぁ便利便利。注意すべきはWinMergeの設定でプラグインの検出を自動にしておくこと。

あとMercurialをRedmineと連動させてみたら予想以上に便利そう。RedMine1.6.3使ってるけど、プロジェクトの設定のとこから、リポジトリのタブでSCMをMercurialで選択,ルートディレクトリを.hgがあるディレクトリへのパス(/home/aaa/workspace/test/とか)って入れるだけでおけ。差分見れたりできます。他にも色々使い方ありそうなんで、解説本に興味が…

追記2
CentOS5へのインストールでは、yum install mercurial てな呪文が使えない…。かわりに、easy_install mercurial でpythonのお力を借りるのが妥当っぽい

0 コメント: