TortoiseHgというアプリケーションをインストールしてください。TortoiseHgはmercurialのコマンドをGUIで操作するためのアプリケーションで、mercurialも一緒にインストールされます。
GUIであるTortoiseHgではなく、まずは基本的な使い方をコマンドベースで覚えると理解が早くなります。
まずは適当なディレクトリを作成してください。ここではとりあえず C:\mywork\myrepos フォルダとします。これを作業ディレクトリと呼びます。コマンドプロンプト起動し、カレントディレクトリを今作ったディレクトリへ移動してください。以下のように入力します。
cd c:\mywork\myrepos
mercurialはhgというコマンドになっています。hg に init を指定することでリポジトリを初期化できます。これで.hgディレクトリが出来上がっているはずです。これがリポジトリ本体となります。
hg init
まずは作業ディレクトリに適当にファイルを作成してください(ここではmyfile.txtとします)。この状態でmercurialのコマンドを呼び出してみます。すると今作成したmyfile.txtに"?"が付いているのがわかります。
これはmyfile.txtがリポジトリから見て不明なファイルであるということを示します。言い方を変えるとmyfile.txtはmercurialで管理されていないと言えます。
hg status
ファイルをリポジトリに追加するには hg add を使います。以下のように入力してみてください。その後、hg status を呼び出すとmyfile.txt が "A" になっているのがわかります。
hg add myfile.txt
ファイルをまとめて追加する場合は hg addremove を使うと便利です。
hg addremove
ファイルをaddで追加しただけではリポジトリには保存されません。commit(コミット)を行い変更を確定して初めてリポジトリに保存されます。hg commit を呼び場してみます。コミット時にはコミットした人の名前も記録する必要があるので "-u 名前"という引数も指定します。
hg commit -u "MyName"
commitを行うとデフォルトではメモ帳が起動します。コミット時には「どういう変更を行ったのか」というメモも記録する必要があるため、以下のように変更内容、もしくは理由をメモとして記述します。メモを保存しメモ帳を閉じるとcommitが完了します。
コミットが完了すると hg status から add したものが消えているが分かります。
今度はファイルを削除してみます。先ほど作ったmyfile.txtとmyfile2.txtをいつもの通りに削除してください。この状態でhg statusを実行してみます。削除したファイルに "!" がついています。これはリポジトリで保持しているファイルが欠落していることを示しています。
hg status
#
この状態で hg addremove を行うことで「削除した」という情報をリポジトリに追加できます。ファイルが ! から R に代わり、削除されたことがmercurialに伝わります。
hg addremove
削除したという情報を hg commit でリポジトリに保存します。
今までコミットした情報はすべて.hgディレクトリ内に記録されており、いつでも参照したり取り出したり出来ます。hg log で記録(ログ)を確認できます。
hg update を使うとコミットした時点の状態を再現できます。hg log で表示されているリビジョンを指定してください。例えば、下記の例では先ほどの「ためしに保存する」に戻すことができます。hg update -C -r リビジョンでいつでもどの時点に戻すことができます。
hg update -C -r 0:8fffe0da0688
普段はネットワーク上のリポジトリを元にクローンを作成しますが、クローンはネットワークを使わなくても作成することができます。
今まで作業していたディレクトリは別のディレクトリ(ここではc:\mywork\myclone)を作成し、カレントディレクトリを変更してください。
この状態で hg clone を行うとクローンを作成できます。下記の例のC:\mywork\myreposには先ほどまで作業していたフォルダを指定します。
hg clone C:\mywork\myrepos .
hg log でクローンを確認すると元となったリポジトリの状態をすべて引き継いでいるのがわかります。リモートへpush, pullができる以外は元と全く同じものなのでhg updateやadd, removeなどすべてが自由に行えます。
クローン側の myfile3.txt を適当に変更してみてください。その状態でhg statusを行ってみます。myfile3.txt が M になっており「Modified(変更あり)」になっています。この状態でコミットします。
hg status
M myfile3.txt
リビジョン: 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
要約: ためしに保存する
作業したクローンの内容をリモートに転送します。クローン側で 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
要約: ためしに保存する
プッシュとプルはリモートとへ送るのか、リモートから持ってくるのかという方向の違いだけで同期をとるという意味では同じです。