TortoiseHg の基礎勉強 〜TortoiseHg によるバージョン管理を使う〜

はじめに

ようこそ、分散バージョン管理「Mercurial(マーキュリアル)」のGUIクライアントである「TortoiseHg(トータスエイチジー」の基礎勉強です。TortoiseHgは、MercurialのクライアントツールでWindowsのシェルエクステンションとして機能します。専用のGUIを備えており、CUI の Mercurial より、直感的で簡単に扱うことが出来ます。

TortoiseHgのインストールが済んでいない場合、 TortoiseHg の基礎勉強 〜TortoiseHg のインストールと初期設定〜 から始めて下さい。

「TortoiseHg の基礎勉強」では、Windows 7 環境で TortoiseHg の基本的な使い方をご自身のマシンで動作させます。 TortoiseHg はこのチュートリアルで説明している以外にも多くの機能を備えたパワフルなバージョン管理システムです。使いこなすためには文章を読むだけではなく実際に試すことがとても重要です。

このドキュメントにならってチュートリアルを実行することで、基本的な TortoiseHg の使い方を学習することができます。

このチュートリアルでは、TortoiseHg の日本語版(TortoiseHg 2.10.2 with Mercurial 2.8.2)を利用して進めていきます。

レッスン 1. はじめてのリポジトリ作成

TortoiseHgが利用できるようになりました。まだ開発作業に入ることは出来ません。TortoiseHgを使った開発を進める前に必要な操作があります。
ソースコードのバージョン管理を行うためにはリポジトリ(repository)を用意する必要があります。

リポジトリ: Mercurial で管理されるソースコードやファイルを格納する場所のことです。この格納場所を作成しなければ開発に進むことはできません。通常リポジトリの作成作業はプロジェクトの最初に1回だけ実行します。

注意する点

TortoiseHgはリポジトリを作成する機能があります。このチュートリアルではリポジトリの新規作成を行います。

それでは、リポジトリを作成します。リポジトリを作成する方法はHgワークベンチから新規作成する方法と右クリックメニューから「TortoiseHg -> ここにリポジトリを作成」から実行することが出来ます。Hgワークベンチはとても分かりやすく便利なツールですのでHgワークベンチを使った方法でチュートリアルを進めます。

/bootcamp/wp-content/themes/_btcp/images/tortoisehg01.png
/bootcamp/wp-content/themes/_btcp/images/tortoisehg02.png

Hgワークベンチのメニュー「ファイル」->「リポジトリを作成(init)」を選択します。

/bootcamp/wp-content/themes/_btcp/images/tortoisehg03.png
/bootcamp/wp-content/themes/_btcp/images/tortoisehg04.png

保存先: c:\work\hg-repo
特殊ファイルを追加する(.hgignoreなど):チェックを外す

ノート

Hg コマンドラインでの操作は hg init を使います。

以下のコマンドでワークベンチの実行と同じ操作になります。

>hg init C:workhg-repo

「作成」を押下するとリポジトリが作成されました。

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

レッスン 2. リポジトリで作業開始

初期化を実行してリポジトリを作成しました。作成した hg-repo をエクスプローラーで見てみると .hg が作成されているのが分かります。この .hg は初期化したリポジトリのバージョン管理に必要な様々な情報を格納するTortoiseHg/Mercurialの管理フォルダです。

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

.hg が見えない場合、エクスプローラーの「ツール」->「フォルダーオプション」->「表示」->「隠しファイル、隠しフォルダーおよび隠しドライブを表示する」にチェックがあるか確認してください。(標準的な環境ではチェックされていません)

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

リポジトリの作成と .hg の確認が完了しました。これで初期化したリポジトリはTortoiseHgのバージョン管理対象フォルダとして版管理されます。これからの作業を進める c:\work\hg-repo を作業領域と言います。

必ず c:\work\hg-repo 配下に管理対象のファイルやフォルダを配置しワークベンチによる操作を行います。

レッスン 3. 新しいファイルを作成し追加

作業領域( c:\work\hg-repo )で開発を始めましょう。リポジトリには何も登録されていない状態ですので、ファイルを追加してみます。 使い慣れたエディタを使って、以下のファイルを作成します。 [hg-tutorial01.html]を作成します。


<html>
<body>
 <h1>TortoiseHgチュートリアル</h1>
 <ol>
  <li>初期化してリポジトリ作成</li>
  <li>開発作業</li>
 </ol>

 </body>
</html>

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

c:\work\hg-repo 配下に新しいファイル hg-tutorial01.html を新規作成しました。この段階ではまだバージョン管理の対象になっていません。

ワークベンチを開いて「現在のリポジトリを再読み込み」を押下してください。
作業領域にある新規追加されたファイルが表示されます。

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

ワークベンチのファイル状態表示一覧を見てください。
未登録のファイル:状態が「?」になっています。新規ファイルをバージョン管理に登録します。

hg-tutorial01.html を右クリックして Hgワークベンチメニューから「追加」をクリックします。

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

「追加」を選択するとワークベンチのファイル状態表示一覧の状態が「A」となります。
まだTortoriseHgのバージョン管理システムに登録されていません。この状態は「新しいファイルをリポジトリに登録する予定がある」ということを意味しています。

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

その他、これからリポジトリに対して行う操作としてファイルの状態を表す略語があります。

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

Hgワークベンチから見たファイルの状態

  • M:変更
  • A:追加
  • R:削除
  • !:削除
  • ?:不明
  • I:無視
  • C:クリーン
  • S:サブリポ

今回は新しいファイルの追加予約したので、「A:追加」となっています。

レッスン 4. 新しいフォルダを作成し追加

次にフォルダを追加してみます。
以下のフォルダを作成しました。

  • c:\work\hg-repo\help フォルダを作成
  • c:\work\hg-repo\help\readme.txt テキストファイルを作成
  • c:\work\hg-repo\new フォルダを作成

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

2つのフォルダと1つのファイルを作成しました。ワークベンチのリポジトリを更新してみます。

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

1行追加されました。 c:\work\ht-repo\help\readme.txt が状態「?」となっています。
ファイルの追加と同様に追加してみます。

レッスン 5. 新しいフォルダを作成し追加

c:\work\hg-repo\new はリポジトリの管理対象に登録することが出来ません。

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

ノート

フォルダのみをリポジトリに登録することはできない。

TortoiseHg/Mercurialの管理対象はファイルのみです。フォルダは管理対象外のため空フォルダは無視されました。
SVN/Subversionとは異なるので注意が必要です。

レッスン 6. コミット

ファイルの追加とフォルダを含むファイルの追加操作を予約しました。この状態はリポジトリのバージョン管理対象として追加登録される予定になっている状態です。

リポジトリに登録してバージョン管理するための操作として、コミット(commit)を実施します。
この操作を実行してはじめてバージョン管理されたことになります。

また、コミット時には登録の内容を要約して保存する必要があります。コミットログ(commit log)と呼びます。
コミットログは自分の行った操作内容や変更内容、修正点を箇条書きで簡単に纏めて記述するのが一般的です。コミットログはあとから変更履歴を閲覧したり、チーム開発時に他のメンバーの変更内容を追跡したりするためにとても重要な情報を提供します。

今のところ「コミットするときは、変更内容をメモしておく」というルールがあると覚えておいてください。

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

ワークベンチのファイル状態表示一覧で今回のコミットで履歴対象にするファイルを選択し(チェックする)、コミットログにコミットする内容をメモします。最後に「コミット」ボタンを押下するとコミット処理が完了します。

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

Hgワークベンチの表示が変わりました。
ファイル状態表示一覧から操作予約したファイルがなくなり、履歴表示に新しい履歴が追加されました。
このようにコミット操作で記録されたファイルの履歴情報をリビジョン(revision)と言います。

ノート

コミットログについて

コミットログは作業内容をメモしておく。と説明した。具体的にどのような内容を記録しておけば良いか。
例えば、バグに対応した、新しい機能を追加した場合はそのものずばりを記述すれば良い。バージョン管理された履歴を見てみると「修正したファイル」「ファイルのどこの部分」「だれが」「いつ」という情報は正確に記録されている。コミットログとして意識して残すべき情報はコミットによって変更が必要になった理由を記述することが求められる。

バグ/新機能の場合
* タグの構造が正しくなかったので修正
* 既存の全ページで新ヘッダーの対応
* テンプレート用のhtmlファイルを追加

レッスン 7. ファイルを更新

それでは、ファイルの中身を編集してみましょう。バージョン管理システムの機能を見ることが出来ます。
チュートリアル用に作成したファイル hg-tutorial01.html をテキストエディタで編集してみましょう。

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


<li>コミット時は更新内容をログとして記述</li>
<li>バージョン管理システムの更新</li>

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


<html>
<body>
<h1>TortoiseHgチュートリアル</h1>
<ol>
 <li>初期化してリポジトリ作成</li>
 <li>開発作業</li>
 <li>コミット時は更新内容をログとして記述</li>
 <li>バージョン管理システムの更新</li>
</ol>

</body>
</html>

ファイルを保存して閉じてください。 変更したファイルに表示されるオーバーレイアイコンが変わっていると思います。

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

編集したファイルに「!」というアイコンが付いています。これはローカルリポジトリ内のファイルに変更があったことを示しています。

今編集しているファイル hg-tutorial01.html はリポジトリのファイルより新しい修正を追加しました。 コミットする前にその内容を確認します。確認する方法はHgワークベンチとTortoiseHg右クリックメニューの2通りの方法があります。

Hgワークベンチから

Hgワークベンチを起動し、グローバルメニューの「コミット」ボタンを押下します。
更新予定リストに状態「M:変更」が表示され、右ペインにファイルの変更内容が表示されます。右ペインは「unified diff形式」と「変更点をファイル内表示」の使いやすい方を利用できます。

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

ノート

ユニファイド形式(unified diff)とは?

ユニファイド形式(unified format、unidiffとも呼ぶ)はコンテキスト形式における技術的改良を継承し、より少量の出力でより読みやすい形式を追求し生まれた。現在、多くのプロジェクトにおいてdiff出力によるパッチを投稿する際にはこのユニファイド形式を使うよう推奨している。このため、このユニファイド形式がソフトウェア開発者の間でのいわば共通形式となっている。

TortoiseHg右クリックメニューから

「!」アイコンの付いた hg-tutorial01.html を右クリックして TortoiseHg メニューから「差分を表示」を選択する方法があります。

/bootcamp/wp-content/themes/_btcp/images/tortoisehg22.png
/bootcamp/wp-content/themes/_btcp/images/tortoisehg23.png

修正内容を確認したらコミットします。更新内容のログを忘れずに入力します。

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

レッスン 8. ファイルを移動

TortoiseHgの右クリックメニューを見てもファイルの移動コマンドはありません。エクスプローラーで移動させてしまえば良いのでしょうか。TortoiseHgはファイルの移動はなく、削除して新たに追加する操作と同じです。
コマンドは hg rename <old-filename> <new-filename> または、hg mv <old-filename> <new-filename> となります。


hg rename <old-filename> <new-filename>

これは、以下と同意。

hg remove <old-filename>
hg add <new-filename>

それでは、 c:\work\hg-repo\help\readme.txtc:\work\hg-repo\readme-new.txt としてフォルダの移動とファイル名の変更を実施してみます。

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

実行直後のエクスプローラーのイメージを見ると、新しいファイルの追加「+」オーバーレイ表示されているのが分かります。

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

Hgワークベンチのコミット予約表示では、
  1. help/readme.txt を削除
  2. readme-new.txt を追加

という操作を行うように登録されています。
それではコミットを行います。

/bootcamp/wp-content/themes/_btcp/images/tortoisehg27.png
/bootcamp/wp-content/themes/_btcp/images/tortoisehg28.png

警告

ファイルの移動は「hg remove」の後に「hg add」を実行するとと同じです。

レッスン 9. ファイル名を変更

レッスン 8 としてファイル名の変更を記載していますが、操作方法についてはレッスン 7「ファイルを移動」と同じです。ファイルの移動と名前の変更は削除して新たに追加する操作を実行します。

コマンドは hg rename <old-filename> <new-filename> または、 hg mv <old-filename> <new-filename> となります。

レッスン 10. ファイルを削除

TortoiseHg/Mercurialのバージョン管理下にあるファイルを削除する操作を行います。
エクスプローラーから削除したいファイルを右クリックしてTortoiseHgのメニューを表示します。

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

「登録除外」と「削除」という似たような機能があります。この違いは何でしょうか。
バージョン管理したファイル群は開発が進むことで必要なくなることは良くあります。そのとき、バージョン管理下のファイルを削除しますが自分の作業領域にファイルを残すか否かによって言葉が異なっています。

「登録除外」とは

対象ファイルをバージョン管理下から除外します。自分の作業領域にファイルを残すので変更や参照は可能ですがバージョン管理外のため変更履歴は残りません。

「削除」とは

対象ファイルをバージョン管理下から除外します。自分の作業領域のファイルも削除します。

「登録除外」「削除」どちらの操作についても共通の理解として

  1. 対象ファイルをバージョン管理下から削除したい
  2. 「登録除外」または「削除」は、TortoiseHg/Merurialに管理対象から外すことを指示する機能
  3. 「管理対象から外した」という変更履歴を残す
  4. これ以降、対象ファイルの履歴は残らない

それでは、実際に操作を行ってみます。今回はバージョン管理下から除外し、自分の開発環境である作業領域のファイルは残したままにします。 hg-tutorial01.html を右クリックしてTortoiseHgメニューの 「登録除外」をクリックしてください。Hgワークベンチのコミット予定一覧を見ると状態「R:削除」が登録されているのが分かります。

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

このままコミット操作を行ってください。コミットログに忘れずに変更内容を記述しておきます。

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

これでTortoiseHg/Mercurialのバージョン管理下から hg-tutorial01.html が除外されました。が、自分の開発環境である作業領域のファイルは残ったままです。そのため、状態が「?:不明」と表示されているが分かります。

レッスン 11. 状態を確認

これまでの操作してきた内容を確認してみます。

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

すべての状態を表示するために、状態オプション設定を追加します。

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

すべてのチェックを付けました。これで「変更なし」状態や管理外の状態のファイルもHgワークベンチ上に表示することが出来ます。

ノート

すべてのファイル状態を表示する。

コマンドラインでは以下のコマンドを実行することと同意です。
> hg status --all

レッスン 12. 履歴を確認

ワークベンチを使ってこれまでの変更履歴を確認してみます。

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

(1)は
  • リポジトリの新規作成から現在までの変更点がすべて表示されています。
  • 説明文は1行だけ表示されています。詳細を見たい場合は行を選択してください。
(2)選択されたリビジョン(履歴)
  • チェンジセット:リビジョン番号が表示されます。リビジョン番号はリポジトリ内で自動に割り振られる一意な番号です。
  • ユーザー:コミットしたユーザー名とメールアドレスが表示されます。
  • 日付:コミット日時
  • 親リビジョン:このコミットで実施した変更内容はどのリビジョン時点の内容からの変更かを追跡することが出来ます。
  • 子リビジョン:このコミットで実施した変更内容から新しいリビジョンがある場合、子リビジョンとして記録されます。リビジョンは親子関係を維持します。

ノート

親リビジョン

このチュートリアルは1人でさらにローカルの作業領域で管理していましたが、チーム開発では1人開発よりも複雑になります。分散バージョン管理では特定のリビジョンで更新する操作や平行して開発を進めるなど、親リビジョンは重要な意味を持ちます。
チーム開発では、製品の新機能開発プロジェクトや現行製品のバグ対応、または障害による緊急パッチの作成など開発中のバージョンとは異なるバージョンを同時並行して運用する必要があります。そのために親リビジョン(どこから来たバージョンか)を知ることが重要です。

最後に

これで TortoiseHg の基本学習用チュートリアルは終了します。 よく使うコマンドを中心に説明していますが、チームでの複数メンバーによる開発や高度な機能については説明していません。

このチュートリアルはいったんこれで終了します。 さて、次は何をすればよいでしょうか?
分散バージョン管理について基礎からやりたいという場合は、こちらの Git の基礎勉強 〜Git によるバージョン管理を使う〜 が参考になるでしょう。

バージョン管理のアプリケーションを理解する一番の近道は実際に使ってみることです。 あなたの開発で利用しはじめてください。あなたが所属する会社やチームでバージョン管理を使っていなかったり、別のツールを使っている場合があるかもしれません。そんなときでも、ひとりで TortoiseHg/Mercurial を使うことは有益です。

さらに、ネットには数多くの良質なコンテンツがたくさんあります。TortoiseHg/Mercurial の専門書籍も多く出版されています。ぜひ参照して快適な開発ライフを。

参考記事

リモートリポジトリを使うなら、tracpath(トラックパス)が便利です!下記記事をぜひご参照下さい。
 
■tracpath(トラックパス)を使って、安全に複数名でバージョン管理を行う


バージョン管理サービス・プロジェクト管理サービスの「tracpath(トラックパス)」では、
ユーザー5名、リポジトリ数3つまで、無料で利用可能です。

学んだ知識を活かして、さっそく実務でも使って見ましょう。
エンタープライズ利用が前提のASPサービスなので、セキュリティも強固です。