2021/02/20作成, 2020/02/09更新

mercurialチュートリアル

インストール

TortoiseHgというアプリケーションをインストールしてください。TortoiseHgはmercurialのコマンドをGUIで操作するためのアプリケーションで、mercurialも一緒にインストールされます。

基本的な使い方

GUIであるTortoiseHgではなく、まずは基本的な使い方をコマンドベースで覚えると理解が早くなります。

1リポジトリを作ってみる

まずは適当なディレクトリを作成してください。ここではとりあえず C:\mywork\myrepos フォルダとします。これを作業ディレクトリと呼びます。コマンドプロンプト起動し、カレントディレクトリを今作ったディレクトリへ移動してください。以下のように入力します。

cd c:\mywork\myrepos 

MercurialTutorial-CurrentDir

2 リポジトリの初期化

mercurialはhgというコマンドになっています。hg に init を指定することでリポジトリを初期化できます。これで.hgディレクトリが出来上がっているはずです。これがリポジトリ本体となります。

hg init

MercurialTutorial-Init

3 ファイルを追加する

まずは作業ディレクトリに適当にファイルを作成してください(ここではmyfile.txtとします)。この状態でmercurialのコマンドを呼び出してみます。すると今作成したmyfile.txtに"?"が付いているのがわかります。

これはmyfile.txtがリポジトリから見て不明なファイルであるということを示します。言い方を変えるとmyfile.txtはmercurialで管理されていないと言えます。

hg status

TortoiseHg-AddFile

追加してみる

ファイルをリポジトリに追加するには hg add を使います。以下のように入力してみてください。その後、hg status を呼び出すとmyfile.txt が "A" になっているのがわかります。

hg add myfile.txt

TortoiseHg-AddFile2

まとめて追加する

ファイルをまとめて追加する場合は hg addremove を使うと便利です。

hg addremove

TortoiseHg-AddFile3

4 変更を保存する

ファイルをaddで追加しただけではリポジトリには保存されません。commit(コミット)を行い変更を確定して初めてリポジトリに保存されます。hg commit を呼び場してみます。コミット時にはコミットした人の名前も記録する必要があるので "-u 名前"という引数も指定します。

hg commit -u "MyName"

commitを行うとデフォルトではメモ帳が起動します。コミット時には「どういう変更を行ったのか」というメモも記録する必要があるため、以下のように変更内容、もしくは理由をメモとして記述します。メモを保存しメモ帳を閉じるとcommitが完了します。

TortoiseHg-CommitNote

コミットが完了すると hg status から add したものが消えているが分かります。

TortoiseHg-CommitEnd

5 削除してみる

今度はファイルを削除してみます。先ほど作ったmyfile.txtとmyfile2.txtをいつもの通りに削除してください。この状態でhg statusを実行してみます。削除したファイルに "!" がついています。これはリポジトリで保持しているファイルが欠落していることを示しています。

hg status

TortoiseHg-Remove#

削除したことをマークする

この状態で hg addremove を行うことで「削除した」という情報をリポジトリに追加できます。ファイルが ! から R に代わり、削除されたことがmercurialに伝わります。

hg addremove

TortoiseHg-RemoveMark

変更を保存する

削除したという情報を hg commit でリポジトリに保存します。

6 記録を見る

今までコミットした情報はすべて.hgディレクトリ内に記録されており、いつでも参照したり取り出したり出来ます。hg log で記録(ログ)を確認できます。

TortoiseHg-Log

7 状態を戻す

hg update を使うとコミットした時点の状態を再現できます。hg log で表示されているリビジョンを指定してください。例えば、下記の例では先ほどの「ためしに保存する」に戻すことができます。hg update -C -r リビジョンでいつでもどの時点に戻すことができます。

hg update -C -r 0:8fffe0da0688

8 クローンを作成する

普段はネットワーク上のリポジトリを元にクローンを作成しますが、クローンはネットワークを使わなくても作成することができます。

今まで作業していたディレクトリは別のディレクトリ(ここではc:\mywork\myclone)を作成し、カレントディレクトリを変更してください。

この状態で hg clone を行うとクローンを作成できます。下記の例のC:\mywork\myreposには先ほどまで作業していたフォルダを指定します。

hg clone C:\mywork\myrepos .

確認してみる

hg log でクローンを確認すると元となったリポジトリの状態をすべて引き継いでいるのがわかります。リモートへpush, pullができる以外は元と全く同じものなのでhg updateやadd, removeなどすべてが自由に行えます。

TortoiseHg-CloneLog

ファイルを更新してみる

クローン側の myfile3.txt を適当に変更してみてください。その状態でhg statusを行ってみます。myfile3.txt が M になっており「Modified(変更あり)」になっています。この状態でコミットします。

hg status

出力結果

M myfile3.txt

コミット後のlog

リビジョン:   2:03383ec6696f
タグ:         tip
ユーザ:       isapon
日付:         Sun Feb 09 14:25:13 2020 +0900
要約:         myfile3を書き換えてみた。

リビジョン:   1:6543f3a9dacb
ユーザ:       test
日付:         Sun Feb 09 13:47:40 2020 +0900
要約:         ファイルを削除してみた

リビジョン:   0:8fffe0da0688
ユーザ:       myname
日付:         Sun Feb 09 11:36:56 2020 +0900
要約:         ためしに保存する

9 プッシュする

作業したクローンの内容をリモートに転送します。クローン側で hg push を行います。

hg push

結果

変更点を探索中
リビジョンを追加中
マニフェストを追加中
ファイルの変更を追加中
1 個のリビジョン(1 の変更を 1 ファイルに適用)を追加

元のリポジトリのログを確認する

この状態でクローン元のリポジトリのログを見てみます。クローンリポジトリの内容が転送されているのがわかります。

リビジョン:   2:03383ec6696f
タグ:         tip
ユーザ:       isapon
日付:         Sun Feb 09 14:25:13 2020 +0900
要約:         myfile3を書き換えてみた。

リビジョン:   1:6543f3a9dacb
ユーザ:       test
日付:         Sun Feb 09 13:47:40 2020 +0900
要約:         ファイルを削除してみた

リビジョン:   0:8fffe0da0688
ユーザ:       myname
日付:         Sun Feb 09 11:36:56 2020 +0900
要約:         ためしに保存する

プッシュとプル

プッシュとプルはリモートとへ送るのか、リモートから持ってくるのかという方向の違いだけで同期をとるという意味では同じです。