チュートリアル - 最初の変更を行う
JapaneseTutorialHistory から進んだ結果、私達は JapaneseTutorialClone で 複製した my-hello リポジトリの中に居ます。
さまざまな変更を別のリポジトリに分離することは、Mercurialで開発を実践する上で良い習慣です。これは関係のないコードが混ざるのを防ぎ、これにより個々の作業を個別にテストするのが楽になります。このモデルに従って始めてみましょう。
私達の他愛の無い目標は、"hello, world" プログラムの出力を別の行に変えることです。まず最初に、私達の小さなプロジェクトのために、my-hello を複製して my-hello-new-output と呼ばれる新しいリポジトリを作成します。
$ cd .. $ hg clone my-hello my-hello-new-output
この場合、clone コマンドは成功したら何も表示しません。
注意: 新しい リポジトリ に説明的な名前を付けたことに注意してください。基本的には、リポジトリ の目的がひと目でわかるような名前を付けます。Mercurial では リポジトリ の 複製 は手軽に行えるので、すぐにほんの少ししか違わないリポジトリが大量に蓄積します。もしこれらのリポジトリに説明的な名前を付けなければ、すぐにそれらを識別できなくなるでしょう。
それでは、新しいリポジトリに変更を加えてみましょう。作業ディレクトリ (これは全てのファイルがあるディレクトリの私達の呼び名です)に入って、お好みのエディタでソースコードを変更してみましょう。
$ cd my-hello-new-output $ vi hello.c
hello.c の中身は最初はこんな感じです:
/*
* hello.c
*
* Placed in the public domain by Bryan O'Sullivan
*
* This program is not covered by patents in the United States or other
* countries.
*/
#include <stdio.h>
int main(int argc, char **argv)
{
printf("hello, world!\n");
return 0;
}
main を編集して出力する行を二行に増やしてみましょう。
(...)
int main(int argc, char **argv)
{
printf("hello, world!\n");
printf("sure am glad I'm using Mercurial!\n");
return 0;
}
終わったら、エディタを終了してください。この編集で、チェンジセットを作成する準備ができました。
しかし、もし仮に私達が作業を中断して、どの変更がチェンジセットに含まれるか忘れてしまったらどうなるでしょう? このために、status コマンドを使います。
$ hg status M hello.c
簡単な出力ですが、接頭辞の M は hello.c が変更(modified)されて、次のチェンジセットに含まれることを教えてくれます。
diff コマンドを使うと、そのファイルに対して私達がした変更を実際に調べることができます。
$ hg diff diff -r 82e55d328c8c hello.c --- a/hello.c Fri Aug 26 01:21:28 2005 -0700 +++ b/hello.c Fri Sep 30 10:27:47 2005 +0800 @@ -12,5 +12,6 @@ int main(int argc, char **argv) { printf("hello, world!\n"); + printf("sure am glad I'm using Mercurial!\n"); return 0; }
変更を 破棄して最初からやり直したい場合は、revert コマンドを使ってファイルを変更されていない状態に戻すことができます。ただ、それが本当にしたいことなのか確認してください。
$ hg revert
チェンジセットを作成する行為は、コミットすると呼ばれます。commit コマンドを使って コミット を実行します。
$ hg commit
これはエディタを開いて、暗号のような行をいくつか表示します。
注意: デフォルトのエディタは vi です。これは EDITOR や HGEDITOR 環境変数を使って変更することができます。また、マニフェストのハッシュは、あなたがどのようにタイプしファイルを保存したかによって異なります。
(空行) HG: manifest hash 14595beb70bcfb74bf227437d70c38878421c944 HG: changed hello.c
最初の行は空白で、続く行は チェンジセットに含まれるであろうファイルを特定します。
チェンジセットをコミットするには、理由を書かなければなりません。これは通常チェンジセット コメントと呼ばれます。このようにタイプしてみましょう。
Express great joy at existence of Mercurial HG: manifest hash 14595beb70bcfb74bf227437d70c38878421c944 HG: changed hello.c
次に、保存してエディタを終了します。全て上手くいったなら、commit コマンドは終了して何も表示しません。<!> もしテキストを保存せずにエディタを終了したなら、commit は操作を中断し、コミットする前に気を変えることができます。
さて、この状態では status コマンドはどんなことを教えてくれるでしょうか?
$ hg status
何もありません! 私達の変更は チェンジセット に コミットされたので、コミットが必要な変更されたファイルが存在しません。 Tip は今では作業ディレクトリの内容に一致しています。
次の作業のために、更新履歴を調べることができます。
$ hg log changeset: 2:a58809af174d tag: tip user: mpm@selenic.com date: Fri Aug 26 01:26:28 2005 -0700 summary: Express great joy at existence of Mercurial (...)
注意: ユーザ名、日付、ChangeSetID はもちろん変わるでしょう。
JapaneseTutorialClone で議論したように、新しいチェンジセットはこのリポジトリにのみ存在します。これは Mercurial の動作で極めて重要な部分です。
変更を共有するには、JapaneseTutorialShareChange に進まなければなりません。