Mercurialはコマンド hg
を利用し、
hg サブコマンド ...
の書式であらゆる操作を行なう。 バージョン管理では以下の用語を用いる。
すべてのファイルの登録履歴が入っているデータベース。
データベースからある時点のファイル群を取り出した ディレクトリ。Mercurialではリポジトリとワーキングコピーが 一つのディレクトリに同居しているが、CVSやSubversionでは リポジトリとワーキングコピーが違うところにある。
ファイルに対するその時点の更新をリポジトリに登録すること。 コミットされた瞬間の内容が、あとで取り出せるものになる。 「チェックイン」ともいう。
リポジトリからある時点のファイル(群)を取り出すこと。
Mercurialを最初に使う前に,
リポジトリ操作をするときの作業者名を登録する必要がある。
これは ~/.hgrc
ファイルに記入しておく。
~/.hgrc
ファイルをエディタで開き,
[ui] username = ローマ字氏名 <MailAddress>
という書式で自分の名前とメイルアドレスを書く。たとえば
KOEKI Taro さんが taro@example.jp
なら以下のように記述する。
[ui] username = KOEKI Taro <taro@example.jp>
正しく書けたら保存して以下の作業に進む。
Mercurialでバージョン管理する手順は
hg init
) - 最初に1回hg add
)
- ファイルに対して最初に1回hg ci
) …以降コミットの繰り返しとなる。「hg init
」、「hg add
」、
「hg ci
」だけ覚えておけば取り敢えず使える。もっというと
普段は「hg ci
」だけよい。
あるファイル(群)をMercurial管理下に置くには バージョン管理したいファイルが含まれる再上位のディレクトリで
hg init
する。ここでは、実験用ディレクトリを作って ファイルを置き、そのファイルを登録してみる。
mkdir hgdir cd hgdir cal > calendar (ダミーファイル作成) hg init (リポジトリ初期化) hg add (ファイル追加) hg ci -m init (コミット)
hg add
と起動すると管理下にないファイルがすべて
登録される。たくさんファイルがあって、その一部だけ登録したい場合は
hg add file1 file2
のように足したいファイルだけを指定する。
以後、「ファイルを更新してはコミット」を繰り返してみる。 vi の使い方参照。
vi calendar (calendarファイルを編集 Gで末尾にジャンプして o で行を開いて文字を入れて ESC ZZ) hg ci (またviが上がるので i を押してからどう変更したかのメッセージを入れて ESC ZZ)
上記の操作を3〜4回繰り返してから、更新履歴を確認する。
履歴は hg log
で見る。
hg log
changeset: 2:3a8c8b4f7e5f
tag: tip
user: HIROSE Yuuji <taro@example.co.jp>
date: Fri Oct 16 17:27:15 2009 +0900
summary: add yaa
changeset: 1:3e655c963fd8
user: HIROSE Yuuji <taro@example.co.jp>
date: Fri Oct 16 17:25:04 2009 +0900
summary: add hero
changeset: 0:7623b5652e9a
user: HIROSE Yuuji <taro@example.co.jp>
date: Fri Oct 16 17:24:47 2009 +0900
summary: init
changesetの項に付いた 2:3a8c8b4f7e5f
などは
更新の集合(チェンジセット)に付けられた識別子で、
特定のバージョンを指定するときなどに指定する。
コロンの前の整数はリポジトリ内の通し番号によるリビジョン番号、
後ろの12桁の16進数はリポジトリを超えて有効なチェンジセットに付けられた
識別用文字列のハッシュ値(の短縮形)である。
指定したバージョンに戻るには hg up
を用いる。
戻りたいバージョンへのチェンジセットに付いたリビジョン番号や日付を指定する。
hg up 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved cat calendar (バージョン1のときの calendar が表示される) hg up 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (hg upだけだと最新版(tip)に戻る) cat calendar
日付を指定したい場合は、hg log
に出てくる
チェンジセットの正確な日付か、任意の日付より古い最寄りのチェンジセットを
意味する `<' を付加した日付を指定する。
hg up (実験のため最新版に戻しておく) hg log changeset: 2:3a8c8b4f7e5f tag: tip user: HIROSE Yuuji <taro@example.co.jp> date: Fri Oct 16 17:27:15 2009 +0900 summary: add yaa changeset: 1:3e655c963fd8 user: HIROSE Yuuji <taro@example.co.jp> date: Fri Oct 16 17:25:04 2009 +0900 summary: add hero changeset: 0:7623b5652e9a user: HIROSE Yuuji <taro@example.co.jp> date: Fri Oct 16 17:24:47 2009 +0900 summary: init (日付を確認) hg up -d 'Fri Oct 16 17:25:04 2009' Found revision 2 from Fri Aug 28 15:03:31 2009 +0900 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
ただし、日付を正確に指定するくらいならリビジョン番号の方が楽なので
通常日付け指定はある日を指定してその日に最新版だった
チェンジセットに戻るときに使う。
例:
hg up -d '< 2009-8-28' (2009年8月28日より古い直近のもの) hg up -d '< 2009-8-29 14:00' (2009年8月29日 14:00より古い直近のもの)
日付け区切りにはハイフン、時刻区切りにはコロンを用いる。
ある時点のバージョン集合に名前を付けておくことができる。
この名前をタグといい、hg tag
で付ける。
hg tag hogehoge-version-1.0
付けたタグは hg up
などでのリビジョン指定で
利用できる。分かりやすい名前を付けておくとよい。
付けたタグは hg tags
で確認できる。
hg tags
tip 2:3a8c8b4f7e5f
hogehoge-version-1.0 1:3e655c963fd8
tip というタグは特別で、常に最新のチェンジセットを指す。
テキストファイルに更新を重ねて行く場合、どの部分に修正が施されたかを 追跡管理することで、効率的な情報伝達が可能になる。
hg init | リポジトリ初期化 |
hg add [file] | ファイル追加 |
hg ci | コミット |
hg log | ログ参照 |
hg up [revision] |
revision(または最新版)に戻る |
hg tag | タグの付加 |
hg tags | タグの一覧表示 |