コアの概念
===========

単純なユーザーモデル
---------------------

Bazaarを使うために理解する必要のある概念は4つあります:

* **リビジョン(Revision)** - 取り組むファイルのスナップショット

* **作業ツリー(Working tree)** - バージョン管理されたファイルとサブディレクトリを含むディレクトリ

* **ブランチ(Branch)** - ファイルの履歴を記述する、順序づけされたリビジョンの集合

* **リポジトリ(Repository)**  - リビジョンの貯蔵場所

それぞれを詳しく見てみましょう。

リビジョン
-----------

リビジョンはファイルとディレクトリの内容と形を含むそれらのツリーの状態の **スナップショット** です。
リビジョンはそれ自身に関連づけされたメタデータをいくつか含みます。メタデータには次のようなものが含まれます:

* コミットした人
* コミットした時間
* コミットメッセージ
* そのリビジョンの元になった親のリビジョン

リビジョンは不変で、グローバルかつユニークに **リビジョンid (revision-id)** で識別できます。
リビジョンidの例は次のとおりです::

 pqm@pqm.ubuntu.com-20071129184101-u9506rihe4zbzyyz

リビジョンidはコミットする、もしくは他のシステムからインポートする時点で生成されます。
リビジョンidは内部で利用するときや外部ツールとの統合に必要ですが、
ブランチ固有の **リビジョン番号** (*revision numbers*)の方が人間に好まれるインタフェースに\
なります。

リビジョン番号は 1 や 42 や 2977.1.59 のようにドットで区切られた10進法の識別子で\
ブランチに対するリビジョン番号のグラフを通してパスを追跡します。
リビジョン番号は一般的にリビジョンidよりも短く、単独のブランチの範囲では
それらの関係を理解するためにそれぞれを比較できます。
たとえば、リビジョン10はリビジョン9の直後のメインライン(下記を参照)のリビジョンです。
リビジョン番号はコマンドが実行されているときに生成されます。
これらはブランチ内でどのリビジョンがチップ(すなわち最新のリビジョン)であるかに依存するからです。

Bazaarで指定できるリビジョンとリビジョンの範囲のいくつかの方法に関しては、付録の
`リビジョンを指定する <specifying_revisions.html>`_ を参照してください。
リビジョンの番号付けの詳細に関しては `リビジョン番号を理解する <zen.html#understanding-revision-numbers>`_
を参照してください。

.. *TODO: add diagram*

作業ツリー
------------

作業ツリー(working tree)は ユーザーが編集できるファイルを保持する
*バージョン管理されたディレクトリ* です。
作業ツリーは *ブランチ* に関連付けされます。

多くのコマンドは作業ツリーをそれぞれの文脈で使います。
たとえば、 ``commit`` コマンドは作業ツリーの中のファイルの\
現在の内容を利用して新しいリビジョン番号を作ります。

.. *TODO: add diagram*

ブランチ
---------

最もシンプルな場合、ブランチは *順序づけされた一連のリビジョン* です。
最終リビジョンは *チップ(tip)* として知られます。

ブランチは分かれたりその後再結合(*marged* back)されたりして、\
グラフの形をとります。
技術的にいえば、グラフは(親と子のリビジョンの間)の有行な関係を表し、\
ループが存在しないので、 *directed acyclic graph* (DAG) として\
言及されるかもしれません。

この名前にギョッとするかもしれませんが、ご心配なく。
覚えておくべき重要なことは次のとおりです:

* DAGの範囲内での開発の主要なラインは *メインライン(mineline)*,
  *トランク(trunk)*, もしくは単に *左側(left hand side: LHS)* と呼ばれます。

* ブランチはメインラインではない開発ラインを持つことがあります。
  そのとき、別のラインはある時点で始まり別の時点で終わります。

.. *TODO: add diagram*

レポジトリ
-----------

レポジトリはシンプルにいえば *リビジョンの保管場所* です。
最もシンプルな事例では、それぞれのブランチが独自のレポジトリを持ちます。\
別の事例では、ディスクの使用量を最適化するためにブランチに対してレポジトリを\
共用しています。

.. *TODO: add diagram*

概念をまとめる
---------------

上記の概念を把握したら、Bazaarのさまざまな使い方が理解しやすくなります。
Bazaarの最もシンプルな使い方は *スタンドアロンツリー(standalone tree)* で、\
これは1つの位置に作業ツリー、ブランチとレポジトリのすべてが含まれます。
他のよくあるシナリオには次のようなものがあります:

* `共用リポジトリ(shared branch) <branching_a_project.html#a-reminder-about-shared-repositories>`_
  - 作業ツリーとブランチは同じディレクトリにありますが、リポジトリは高い階層の\
  ディレクトリに存在します。

* `スタックブランチ(stacked branch) <stacked.html>`_
  - 親のリポジトリと共通なリビジョンは親のリポジトリのものを利用することで、
  ブランチはユニークなリビジョンだけを保存します。

* `軽量チェックアウト(lightweight checkout) <using_checkouts.html#getting-a-lightweight-checkout>`_
  - 作業ツリーとは別の場所にブランチが保存されます。

Bazaarを使う最良の方法は、あなたのニーズ次第です。
次に共通のワークフローを見てみましょう。
