どうしてそんな仕組みがあるのか — 目録タグの目的

後の章で見るように、arch は、ソースツリーとその中にあるファイルの 変更を管理するのが得意で、そのようなツリーとファイルの 履歴に関する情報を伝えるのも得意です。

例として、アリスとボブがhello_worldプロジェクト上で一緒に作業していると しましょう。アリスは自分のツリーでhw.cに何か変更を加えます。 ボブは自分のツリーで、hw.chello.cに名称変更 します。

どこかの時点で、アリスとボブは、「同期をとる」必要があります。 ボブはアリスのやった変更を取り込まなくてはなりません。アリスはボブがやった 同じファイルの名称変更を取り込まなくてはなりません。

arch は同期をとるためのたくさんの仕組みを用意しています — それはarchがやることのできる最も重要なことの一つです — しかし、そのようなことのほとんどすべては、結局、changesets を計算することに帰着します。

アリスは arch に対して、彼女がやった変更を記述するチェンジセットを 作ることができ、そのチェンジセットは、彼女がhw.cにやった変更を 記述するものになるでしょう。ボブもチェンジセットを作ることができ、それは自分のした ファイル名称の変更を記述するようなものになるでしょう。

もしアリスが、ボブのチェンジセットを自分のツリーに適用すると、彼女のhw.c のコピーは、hello.cに名称変更されます。しかし、もう少し面倒なケースは 次のようなものです: もしボブが、アリスのチェンジセットを自分のツリーに適用すると、 何がおこるか? です。

アリスは ./hw.c という名前のファイルを変更しましたが、ボブのツリーの 中では、同じ変更は、./hello.cという名前のファイルに対して行われる べきです。幸運にも両方のファイルは同じ目録タグを持ちます:

        file path               inventory tag
        ---------               -------------

                 Alice's tree:
        ./hw.c                  i_tag_hw

                 Bob's tree:
        ./hello.c               i_tag_hw

アリスのチェンジセット中では、アリスのした変更は、タグがi_tag_hw であるようなファイルに対してなされた、という記述になります。

そのため、ボブのツリーに対してチェンジセットが適用されるとき、archは 同じタグを持つようなファイルにたいしてチェンジセットを適用することを知っています: それは、変更をボブの./hello.cに対して適用することを知っているわけです。

この例で、目録タグがなんのためにあるかが分かります: 目録タグは、arch が、ファイルの物理的な場所ではなく、論理的な同一性によってツリーに対してなされる変更を 記述することができるようにします。どのようにして目録タグが利用されるかについては もっと複雑なたくさんの例がありますが、ここでは少なくともこの基本的な点を見て来ました。