Mercurial:バージョン管理システムのチュートリアル

はじめに

はじめの一歩!ソースコード管理に必要なバージョン管理とは では、さまざまなバージョン管理ソフトウェアを紹介しました。Git(ギット)を使った解説は Git:バージョン管理システムのチュートリアル をご覧ださい。
もう一つの分散型のバージョン管理ソフトウェア Mercurial(マーキュリアル) を解説します。

なお、構築に使用したマシン環境は、下記のとおりです。

項目 内容
OS Windows 7 Ultimate 32bit
IPアドレス 192.168.0.253
Cygwin Setup Version 2.831
VirtualBox 4.3.4 r91027
Vagrant 1.3.5

上記のソフトウェアと環境を使って解説を進めていきますが異なる環境でも同様の操作は可能です。また以下の記事を参考にして仮想環境の構築を解説していますので参考にしてください。

Mercurialとは

Mercurialは、Linuxカーネルの開発にLinus Torvalds氏と共に携わっていた、Matt Mackall氏が2005年4月にリリースした分散型バージョン管理ソフトウェアです。Linus氏がGitを開発していたほぼ同時期に、Matt氏もLinuxカーネルのソースコード管理のためにバージョン管理ソフトウェアを開発していたことになります。Gitのメンテナンスが、2005年にLinus氏から濱野氏に引き継がれたのに対して、Marcurialは、Matt氏が主要開発者として現在もメンテナンスを行っています。GitとMercurialは、その生い立ちから、双方の機能をうまく取り入れることで進化しており、使い勝手も余り変わりません。なお、Mercurialのコマンド名は、hgですが、これは、英語のmercuryが水銀を意味することから、元素記号のhgがコマンド名として採用されています。

Mercurialサーバーの構築

リポジトリを管理するGitサーバーを構築します。

BOX起動

前回の記事で使用したBOXを起動し、接続します。

$ cd /tmp/unix
$ vagrant up
$ vagrant ssh

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner01.png

mercurialのインストール

パッケージ管理コマンドを使用してインストールします。

$ sudo yum -y install mercurial

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner02.png

hgアカウントの作成

リポジトリへの操作を行う専用アカウントを作成します。パスワードは、任意のパスワードを設定しています。

$ sudo groupadd hg
$ sudo useradd -g hg -d /home/hg -s /bin/bash hg
$ sudo passwd hg

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner03.png

SSH公開鍵の設定

前回の記事で作成したvagrantユーザーのSSH公開鍵を、hgユーザーのSSH認証鍵(authorized_keys)に設定します。

$ sudo mkdir ~hg/.ssh
$ cat ~/.ssh/id_rsa.pub | sudo tee ~hg/.ssh/authorized_keys
$ sudo chmod 0700 ~hg ~hg/.ssh
$ sudo chmod 0600 ~hg/.ssh/authorized_keys
$ sudo chown -R hg:hg ~hg/.ssh

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner04.png

/etc/hosts への登録

Mercurialサーバーの名前解決のため、hostsに登録します。

echo '192.168.0.10 hgserver.vagrantup.com hgserver' | sudo tee -a /etc/hosts

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner05.png

SSH接続確認

hgアカウントでSSH接続可能か確認します。

$ ssh hg@hgserver

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner06.png

以降の作業は、hgアカウントで行います。

Mercurialリポジトリの初期化

Mercurialリポジトリとなるフォルダを指定し、Mercurialリポジトリとして初期化します。

何も登録されていない、空のリポジトリが作成されます。

初期化が終了したら、exitコマンドを実行してhgアカウントからログアウトします。

$ hg init ~/myrepos
$ exit

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner07.png

以上で、Mercurialサーバーの構築が終了します。

Mercurialによるバージョン管理

Mercurialリポジトリが構築できましたので、バージョン管理を行います。

ユーザーごとの初期設定

ユーザーごとの初期設定として、リポジトリ使用者のユーザー名とメールアドレスを設定します。

なお、設定はホームディレクトリ上の.hgrcで行います。

~/.hgrc を下記のとおり編集します。

[ui]
username = vagrant <vagrant@vagrantup.com>
editor = vi

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner08.png

ssh-agentの設定

ssh-agentを利用して、MercurialリポジトリへのSSH接続に使用するSSH秘密鍵のパスフレーズ入力をバイパスします。

ssh-addコマンドを実行すると、SSH秘密鍵のパスフレーズを要求されますので入力します。

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner09.png

Mercurialリポジトリのクローン(clone)

Mercurialリポジトリをクローン(複製)して、ローカルリポジトリを作成します。

$ mkdir -p /tmp/work && cd /tmp/work
$ hg clone ssh://hg@hgserver/myrepos

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner10.png

空のリポジトリをクローンすると、更新されたファイルが無い旨のメッセージが表示されます。

追加(add)

ローカルリポジトリにファイルを追加します。

addコマンドは追加指定のみですので、必ずcommitする必要があります。

$ cd myrepos
$ echo test1 > test1.txt
$ hg add .

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner11.png

承認(commit)

更新されたファイルまたは、追加指定されたファイルをリポジトリに登録します。

$ hg commit -m '1st commit'

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner12.png

ログ(log)

リポジトリに登録されたファイルのコミットログを表示します。

$ hg log

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner13.png

差分(diff)

ローカルリポジトリに登録されたファイルとの差分を表示します。

$ echo test1 >> test1.txt
$ hg diff

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner14.png

コミット後に、前回と今回のコミット時の差分を、diff形式で確認することもできます。

$ hg commit -m '2nd commit'
$ hg log -p

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner15.png

状態(status)

ローカルリポジトリ上で修正または、作成されたファイルを表示します。

ここでは、先に作成したファイルを更新し、新たにファイルを作成しています。

更新されたファイルに’M’、追加されたファイルに’?’が表示されます。

$ echo test1 >> test1.txt
$ echo test2  > test2.txt
$ hg status

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner16.png

新規ファイルと更新ファイルをコミットします。

commit時に-m オプションを指定しない場合、.hgrcファイル中のeditorで指定したエディタが起動しますので、コミットログを入力します。

$ hg add .
$ hg commit

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner17.png
/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner18.png

一括承認(commit)

Gitでは、複数の新規または、更新ファイルを一括でコミットする場合、-aオプションを指定してコミットしましたが、Mercurialではcommitコマンドのみで一括でコミットできます。

更新ファイルの一括コミット

$ echo test1 >> test1.txt
$ echo test2 >> test2.txt
$ hg commit

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner19.png
/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner20.png

新規ファイルの一括コミット

新規ファイルの場合、addを実行しないとcommitできまませんので、忘れないようにして下さい。

$ echo test3 > test3.txt
$ echo test4 > test4.txt
$ hg add .
$ hg commit

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner21.png
/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner22.png

Mercurialリポジトリへの送信(push)

ローカルリポジトリで登録した内容を、Mercurialリポジトリに送信します。

ここまでの操作は、全てローカルリポジトリ内に対する操作ですので、最後にマスターリポジトリであるMercurialサーバーに送信します。

$ hg push

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner23.png

Mercurialリポジトリの取得(pull)

Mercurialリポジトリをローカルリポジトリに取得します。

Mercurialは、ローカルリポジトリをオフラインでも操作できますが、リポジトリは、複数人によって更新されて行きますので、適度なタイミングでMercurialリポジトリをローカルリポジトリに同期させます。

もし、ローカルリポジトリ上にコミットされていないファイルがある場合、ローカルリポジトリにコミットした後に、取得します。

$ hg pull

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner24.png

リモートからのバージョン管理

Windows上のCygwin端末から、リポジトリを操作します。

なお、MercurialはCygwinのデフォルトインストールではインストールされませんので、Cygwin + rbenv環境でプロビジョニングサーバーを構築する方法(第1回)~Cygwinを用いて、rbenv環境を構築する を参考にして、Mercurialをインストールして下さい。

/etc/hosts の設定

ここでは、管理者権限で実行したCygwin Terminal上で、設定しています。

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner25.png

ssh-agentの起動とSSH公開鍵の設定

Git:バージョン管理システムのチュートリアル を参考にして、ssh-agentを起動し、SSH公開鍵をMercurialサーバー上のhgユーザーの認証鍵に追加します。

ssh-agentの起動とSSH秘密鍵の追加

Cygwin上で、ssh-agentを起動しSSH秘密鍵を登録した後、SSH公開鍵をMercurialサーバーにリモートコピーします。

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
$ scp ~/.ssh/id_rsa.pub vagrant@hgserver:/tmp

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner26.png

SSH公開鍵のSSH認証鍵への追加

Mercurialサーバー上で、コピーされたSSH公開鍵をhgユーザーの認証鍵に追加します。

$ cat /tmp/id_rsa.pub | sudo tee -a ~hg/.ssh/authorized_keys

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner27.png

SSH接続確認

Cygwin上で、Mercurialサーバーに接続可能か確認します。

$ ssh hg@hgserver

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner28.png

Git初期設定

Mercurialサーバーの構築の項で行った、ユーザーごとの初期設定を行います。

ユーザー名とメールアドレスは適時変更して下さい。

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner29.png

Mercurialリポジトリのクローン(clone)

Mercurialリポジトリをクローン(複製)して、ローカルリポジトリを作成します。

$ mkdir -p /tmp/work && cd /tmp/work
$ hg clone ssh://hg@hgserver/myrepos

/bootcamp/wp-content/themes/_btcp/images/mercurial_beginner30.png

以上で、Cygwin上でもリポジトリ操作の環境が構築できましたので、Mercurialによるバージョン管理の項を参考にして、リポジトリの操作を行ってみて下さい。

まとめ

ここまで、Mercurialの使い方を簡単に解説しました。Mercurialは、Gitと同じ分散型のバージョン管理ソフトウェアですが、使い方は似ていますが、Gitよりもさらに簡単に使えるバージョン管理ソフトウェアという印象です。今回紹介した記事を参考に、Mercurialによるバージョン管理をプロジェクトで使ってみませんか。

次は、MercurialのGUIクライアントである、tortoiseHgの使い方を覚えてみてはいかがでしょうか?


社内サーバにリモートリポジトリを作るのも一つですが、「開発にまつわる面倒事」をこの際全部、tracpath(トラックパス)に任せてみませんか?
バージョン管理サービス・プロジェクト管理サービスの「tracpath(トラックパス)」では、
ユーザー5名、リポジトリ数3つまで、永久無料で利用可能です。

さっそく実務でも使って見ましょう。
自らも開発を行う会社が作ったからこそ、開発チームの「作る情熱」を支える、やるべきことに集中出来るサービスになっています。
エンタープライズ利用が前提のASPサービスなので、セキュリティも強固です。