Size: 6750
Comment: 「こと」を追加
|
Size: 6805
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 5: | Line 5: |
各変更を別の[:Repository:リポジトリ]に分離するのは、["Mercurial"]で開発を実践する上で良いことです。これは関係のないコードが混ざるのを防ぎ、これにより個々の作業を個別にテストするのが楽になります。このモデルに従って始めてみましょう。 | さまざまな変更を別の[:Repository:リポジトリ]に分離することは、["Mercurial"]で開発を実践する上で良い習慣です。これは関係のないコードが混ざるのを防ぎ、これにより個々の作業を個別にテストするのが楽になります。このモデルに従って始めてみましょう。 |
Line 16: | Line 16: |
'''注意:''' 新しい [:Repository:リポジトリ] に説明文的な名前を付けたことに注意してください。基本的には、[:Repository:リポジトリ] の目的を確認できるものを付けます。["Mercurial"] では [:Repository:リポジトリ] の [:Clone:複製] は手軽に行えるので、すぐに微妙に異なる大量のリポジトリが蓄積します。もしこれらのリポジトリに説明文的な名前を付けなければ、すぐにそれらを識別できなくなるでしょう。 | '''注意:''' 新しい [:Repository:リポジトリ] に説明的な名前を付けたことに注意してください。基本的には、[:Repository:リポジトリ] の目的がひと目でわかるような名前を付けます。["Mercurial"] では [:Repository:リポジトリ] の [:Clone:複製] は手軽に行えるので、すぐにほんの少ししか違わないリポジトリが大量に蓄積します。もしこれらのリポジトリに説明的な名前を付けなければ、すぐにそれらを識別できなくなるでしょう。 |
Line 18: | Line 18: |
それでは、新しいリポジトリを変更してみましょう。[:WorkingDirectory:作業ディレクトリ] (これは全てのファイルがあるディレクトリの私達の呼び名です)に入って、お好みのエディタでソースコードを変更してみましょう。 | それでは、新しいリポジトリに変更を加えてみましょう。[:WorkingDirectory:作業ディレクトリ] (これは全てのファイルがあるディレクトリの私達の呼び名です)に入って、お好みのエディタでソースコードを変更してみましょう。 |
Line 46: | Line 46: |
{{{main}}} を編集して余分に行を出力するようにしてみましょう。 | {{{main}}} を編集して出力する行を二行に増やしてみましょう。 |
Line 68: | Line 68: |
出力は簡単ですが、接頭辞の {{{M}}} は {{{hello.c}}} が変更されて、[:ChangeSet:チェンジセット]に含まれるであろうことを、私達に簡単に教えてくれます。 | 簡単な出力ですが、接頭辞の {{{M}}} は {{{hello.c}}} が変更(modified)されて、次の[:ChangeSet:チェンジセット]に含まれることを教えてくれます。 |
Line 86: | Line 86: |
<!> 変更を '''破棄'''して最初からやり直したい場合は、{{{revert}}} コマンドを使ってファイルを変更されていない状態に戻すことができます。これが本当にしたいことなのか確認してください。 | <!> 変更を '''破棄'''して最初からやり直したい場合は、{{{revert}}} コマンドを使ってファイルを変更されていない状態に戻すことができます。ただ、それが本当にしたいことなのか確認してください。 |
Line 120: | Line 120: |
今だと {{{status}}} コマンドは私達に何を教えてくれるでしょうか? | さて、この状態では {{{status}}} コマンドはどんなことを教えてくれるでしょうか? |
チュートリアル - 最初の変更を行う
JapaneseTutorialHistory から進んだ結果、私達は JapaneseTutorialClone で [:Clone:複製]した my-hello リポジトリの中に居ます。
さまざまな変更を別の[:Repository:リポジトリ]に分離することは、["Mercurial"]で開発を実践する上で良い習慣です。これは関係のないコードが混ざるのを防ぎ、これにより個々の作業を個別にテストするのが楽になります。このモデルに従って始めてみましょう。
私達の他愛の無い目標は、"hello, world" プログラムの出力を別の行に変えることです。まず最初に、私達の小さなプロジェクトのために、my-hello を複製して my-hello-new-output と呼ばれる新しいリポジトリを作成します。
$ cd .. $ hg clone my-hello my-hello-new-output
この場合、clone コマンドは成功したら何も表示しません。
注意: 新しい [:Repository:リポジトリ] に説明的な名前を付けたことに注意してください。基本的には、[:Repository:リポジトリ] の目的がひと目でわかるような名前を付けます。["Mercurial"] では [:Repository:リポジトリ] の [:Clone:複製] は手軽に行えるので、すぐにほんの少ししか違わないリポジトリが大量に蓄積します。もしこれらのリポジトリに説明的な名前を付けなければ、すぐにそれらを識別できなくなるでしょう。
それでは、新しいリポジトリに変更を加えてみましょう。[:WorkingDirectory:作業ディレクトリ] (これは全てのファイルがあるディレクトリの私達の呼び名です)に入って、お好みのエディタでソースコードを変更してみましょう。
$ 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;
}
終わったら、エディタを終了してください。この編集で、[:ChangeSet:チェンジセット]を作成する準備ができました。
しかし、もし仮に私達が作業を中断して、どの変更が[:ChangeSet:チェンジセット]に含まれるか忘れてしまったらどうなるでしょう? このために、status コマンドを使います。
$ hg status M hello.c
簡単な出力ですが、接頭辞の M は hello.c が変更(modified)されて、次の[:ChangeSet:チェンジセット]に含まれることを教えてくれます。
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
[:ChangeSet:チェンジセット]を作成する行為は、[:Commit:コミット]すると呼ばれます。commit コマンドを使って [:Commit:コミット] を実行します。
$ hg commit
これはエディタを開いて、暗号のような行をいくつか表示します。
注意: デフォルトのエディタは vi です。これは EDITOR や HGEDITOR 環境変数を使って変更することができます。また、マニフェストのハッシュは、あなたがどのようにタイプしファイルを保存したかによって異なります。
(空行) HG: manifest hash 14595beb70bcfb74bf227437d70c38878421c944 HG: changed hello.c
最初の行は空白で、続く行は [:ChangeSet:チェンジセット]に含まれるであろうファイルを特定します。
[:ChangeSet:チェンジセット]を[:Commit:コミット]するには、理由を書かなければなりません。これは通常[:ChangeSet:チェンジセット] コメントと呼ばれます。このようにタイプしてみましょう。
Express great joy at existence of Mercurial HG: manifest hash 14595beb70bcfb74bf227437d70c38878421c944 HG: changed hello.c
次に、保存してエディタを終了します。全て上手くいったなら、commit コマンドは終了して何も表示しません。<!> もしテキストを保存せずにエディタを終了したなら、commit は操作を中断し、コミットする前に気を変えることができます。
さて、この状態では status コマンドはどんなことを教えてくれるでしょうか?
$ hg status
何もありません! 私達の変更は [:ChangeSet:チェンジセット] に [:Commit:コミット]されたので、コミットが必要な変更されたファイルが存在しません。 ["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 (...)
ありました! 私達が [:Commit:コミット]した [:ChangeSet:チェンジセット] です。
注意: ユーザ名、日付、ChangeSetID はもちろん変わるでしょう。
JapaneseTutorialClone で議論したように、新しい[:ChangeSet:チェンジセット]はこのリポジトリにのみ存在します。これは ["Mercurial"] の動作で極めて重要な部分です。
変更を共有するには、JapaneseTutorialShareChange に進まなければなりません。