arch(アーク)は、分散型バージョン管理システムである。ただし、archと書いた場合には、特定のコマンドを指すものではなく、archのプロトコルに沿ったリポジトリ(アーカイブ)操作を行えるツールの総称として扱われている。設計および主な実装はTom Lordが行った。

archの種類 現在使われている主なarchの実装としては、 larch (シェルスクリプトによる実装) GNU arch(tla) larchをC言語で再実装したもの、現在の主流となっている などがある。

archの動作 archはCVSやSubversionと同様にバージョンを管理する場所(リポジトリ)を持ち、それをアーカイブと呼ぶが、CVSやSubversionと異なり、集中させる必要がない。必要であれば、他人のアーカイブを分岐させたローカルのアーカイブを作成し、開発に利用することができる。後になって、分岐したアーカイブでの成果を取り込む(マージ)必要があれば、それを行うための補助機能が用意されている。

archでの主な操作 GNU arch(tlaコマンド)での操作例を以下にあげる。

アーカイブの作成 $ tla make-archive [email protected] /home/foo/{archives}/2004 これにより、アーカイブ[email protected]が作成され、データの実体が/home/foo/{archives}/2004に配置される。例はローカルファイルであるが、それ以外にWebDAVやSSH (SFTP)、FTP越しに置くことも可能となっている。

アーカイブに置かれたデータの参照 $ tla categories -A [email protected] $ tla branches -A [email protected] libA $ tla versions -A [email protected] libA--main $ tla revisions -A [email protected] libA--main--X.Y.Z データにはカテゴリ名、ブランチ名、バージョン名、リビジョン名の4つが通常要求されるため、それぞれを確認するためのコマンドが用意されている。

アーカイブからデータを取得する libA--mainブランチの最新版を取得 $ tla get -A [email protected] libA--main libA--main--X.Y.Zの最新リビジョンを取得 $ tla get -A [email protected] libA--main--X.Y.Z libA--main--X.Y.Z--patch-nリビジョンを取得 $ tla get -A [email protected] libA--main--X.Y.Z--patch-n

編集したアーカイブを登録する ログを作成 $ tla make-log 登録 $ tla commit

ローカルコピーを最新版に更新する ローカルの修正を考慮して試みる $ tla update ローカルの修正を無視して更新 $ tla replay

変更記録 (ChangeLog) を作成 $ tla changelog