はじめに
はじめの一歩!ソースコード管理に必要なバージョン管理とは では、さまざまなバージョン管理ソフトウェアを紹介しました。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
mercurialのインストール
パッケージ管理コマンドを使用してインストールします。
$ sudo yum -y install mercurial
hgアカウントの作成
リポジトリへの操作を行う専用アカウントを作成します。パスワードは、任意のパスワードを設定しています。
$ sudo groupadd hg
$ sudo useradd -g hg -d /home/hg -s /bin/bash hg
$ sudo passwd hg
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
/etc/hosts への登録
Mercurialサーバーの名前解決のため、hostsに登録します。
echo '192.168.0.10 hgserver.vagrantup.com hgserver' | sudo tee -a /etc/hosts
SSH接続確認
hgアカウントでSSH接続可能か確認します。
$ ssh hg@hgserver
以降の作業は、hgアカウントで行います。
Mercurialリポジトリの初期化
Mercurialリポジトリとなるフォルダを指定し、Mercurialリポジトリとして初期化します。
何も登録されていない、空のリポジトリが作成されます。
初期化が終了したら、exitコマンドを実行してhgアカウントからログアウトします。
$ hg init ~/myrepos
$ exit
以上で、Mercurialサーバーの構築が終了します。
Mercurialによるバージョン管理
Mercurialリポジトリが構築できましたので、バージョン管理を行います。
ユーザーごとの初期設定
ユーザーごとの初期設定として、リポジトリ使用者のユーザー名とメールアドレスを設定します。
なお、設定はホームディレクトリ上の.hgrcで行います。
~/.hgrc を下記のとおり編集します。
[ui]
username = vagrant <vagrant@vagrantup.com>
editor = vi
ssh-agentの設定
ssh-agentを利用して、MercurialリポジトリへのSSH接続に使用するSSH秘密鍵のパスフレーズ入力をバイパスします。
ssh-addコマンドを実行すると、SSH秘密鍵のパスフレーズを要求されますので入力します。
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
Mercurialリポジトリのクローン(clone)
Mercurialリポジトリをクローン(複製)して、ローカルリポジトリを作成します。
$ mkdir -p /tmp/work && cd /tmp/work
$ hg clone ssh://hg@hgserver/myrepos
空のリポジトリをクローンすると、更新されたファイルが無い旨のメッセージが表示されます。
追加(add)
ローカルリポジトリにファイルを追加します。
addコマンドは追加指定のみですので、必ずcommitする必要があります。
$ cd myrepos
$ echo test1 > test1.txt
$ hg add .
承認(commit)
更新されたファイルまたは、追加指定されたファイルをリポジトリに登録します。
$ hg commit -m '1st commit'
ログ(log)
リポジトリに登録されたファイルのコミットログを表示します。
$ hg log
差分(diff)
ローカルリポジトリに登録されたファイルとの差分を表示します。
$ echo test1 >> test1.txt
$ hg diff
コミット後に、前回と今回のコミット時の差分を、diff形式で確認することもできます。
$ hg commit -m '2nd commit'
$ hg log -p
状態(status)
ローカルリポジトリ上で修正または、作成されたファイルを表示します。
ここでは、先に作成したファイルを更新し、新たにファイルを作成しています。
更新されたファイルに’M’、追加されたファイルに’?’が表示されます。
$ echo test1 >> test1.txt
$ echo test2 > test2.txt
$ hg status
新規ファイルと更新ファイルをコミットします。
commit時に-m オプションを指定しない場合、.hgrcファイル中のeditorで指定したエディタが起動しますので、コミットログを入力します。
$ hg add .
$ hg commit
一括承認(commit)
Gitでは、複数の新規または、更新ファイルを一括でコミットする場合、-aオプションを指定してコミットしましたが、Mercurialではcommitコマンドのみで一括でコミットできます。
更新ファイルの一括コミット
$ echo test1 >> test1.txt
$ echo test2 >> test2.txt
$ hg commit
新規ファイルの一括コミット
新規ファイルの場合、addを実行しないとcommitできまませんので、忘れないようにして下さい。
$ echo test3 > test3.txt
$ echo test4 > test4.txt
$ hg add .
$ hg commit
Mercurialリポジトリへの送信(push)
ローカルリポジトリで登録した内容を、Mercurialリポジトリに送信します。
ここまでの操作は、全てローカルリポジトリ内に対する操作ですので、最後にマスターリポジトリであるMercurialサーバーに送信します。
$ hg push
Mercurialリポジトリの取得(pull)
Mercurialリポジトリをローカルリポジトリに取得します。
Mercurialは、ローカルリポジトリをオフラインでも操作できますが、リポジトリは、複数人によって更新されて行きますので、適度なタイミングでMercurialリポジトリをローカルリポジトリに同期させます。
もし、ローカルリポジトリ上にコミットされていないファイルがある場合、ローカルリポジトリにコミットした後に、取得します。
$ hg pull
リモートからのバージョン管理
Windows上のCygwin端末から、リポジトリを操作します。
なお、MercurialはCygwinのデフォルトインストールではインストールされませんので、Cygwin + rbenv環境でプロビジョニングサーバーを構築する方法(第1回)~Cygwinを用いて、rbenv環境を構築する を参考にして、Mercurialをインストールして下さい。
/etc/hosts の設定
ここでは、管理者権限で実行したCygwin Terminal上で、設定しています。
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
SSH公開鍵のSSH認証鍵への追加
Mercurialサーバー上で、コピーされたSSH公開鍵をhgユーザーの認証鍵に追加します。
$ cat /tmp/id_rsa.pub | sudo tee -a ~hg/.ssh/authorized_keys
SSH接続確認
Cygwin上で、Mercurialサーバーに接続可能か確認します。
$ ssh hg@hgserver
Git初期設定
Mercurialサーバーの構築の項で行った、ユーザーごとの初期設定を行います。
ユーザー名とメールアドレスは適時変更して下さい。
Mercurialリポジトリのクローン(clone)
Mercurialリポジトリをクローン(複製)して、ローカルリポジトリを作成します。
$ mkdir -p /tmp/work && cd /tmp/work
$ hg clone ssh://hg@hgserver/myrepos
以上で、Cygwin上でもリポジトリ操作の環境が構築できましたので、Mercurialによるバージョン管理の項を参考にして、リポジトリの操作を行ってみて下さい。
まとめ
ここまで、Mercurialの使い方を簡単に解説しました。Mercurialは、Gitと同じ分散型のバージョン管理ソフトウェアですが、使い方は似ていますが、Gitよりもさらに簡単に使えるバージョン管理ソフトウェアという印象です。今回紹介した記事を参考に、Mercurialによるバージョン管理をプロジェクトで使ってみませんか。
次は、MercurialのGUIクライアントである、tortoiseHgの使い方を覚えてみてはいかがでしょうか?
参考記事
リモートリポジトリを使うなら、tracpath(トラックパス)が便利です!下記記事をぜひご参照下さい。
■tracpath(トラックパス)を使って、安全に複数名でバージョン管理を行う
社内サーバにリモートリポジトリを作るのも一つですが、「開発にまつわる面倒事」をこの際全部、tracpath(トラックパス)に任せてみませんか?
バージョン管理サービス・プロジェクト管理サービスの「tracpath(トラックパス)」では、
ユーザー5名、リポジトリ数3つまで、無料で利用可能です。
さっそく実務でも使って見ましょう。
自らも開発を行う会社が作ったからこそ、開発チームの「作る情熱」を支える、やるべきことに集中出来るサービスになっています。
エンタープライズ利用が前提のASPサービスなので、セキュリティも強固です。