人によってはこの本での「トップダウン」的なアプローチによって 新しい技術を習得するのが困難かも知れません。この節では Subversion の 非常に短い導入方法を用意し、「ボトムアップ」的な読者にも挑戦の機会を与える ことにします。あなたが経験によって学ぶやり方を好むようなタイプの人であ れば、以下のやり方がうまくいくでしょう。途中、この本の関連した章へのリ ンクをつけてあります。
バージョン管理モデルや CVS と Subversion の両者で利用される 「コピー・修正・マージ」モデルについて全く聞いたことがない のであればまず章 2. 基本概念を読んでから先に進んだほうが よいでしょう。
以下の例では Subversion のコマンドラインクライアントで あるsvn、管理用ツールである svnadminが利用可能な形で手元にあることを前提とします。 さらに Subversion 1.2 かそれ以降を利用していることも仮定します (これを確認するにはsvn --versionを実行してください)。
Subversion はすべてのバージョン化されたデータを中心的な リポジトリに格納します。最初に新しいリポジトリを作りましょう:
$ svnadmin create /path/to/repos $ ls /path/to/repos conf/ dav/ db/ format hooks/ locks/ README.txt
このコマンドはSubversion リポジトリを含む新しいディレクトリ
/path/to/repos
を作ります。
この新しいディレクトリには(他のファイルに混じって)データベースファイルの
集まりを含んでいます。内部を詳細に知る必要がないのであれば
このバージョン化されたファイルを見る必要はないでしょう。
リポジトリ生成と保守についてのより詳しい情報は
章 5. リポジトリの管理を見てください。
Subversion には「プロジェクト」という概念はありません。 リポジトリは単なる仮想的にバージョン化されたファイルシステム であり、どんなデータも含むことのできる大きなツリー構造です。 管理者によってはひとつのリポジトリにひとつのプロジェクトだけを 入れることを好みますが、他の管理者はディレクトリを分割した形で 複数のプロジェクトを格納することを好みます。両者のメリット、 デメリットについてはリポジトリレイアウトの選択項 で議論します。どちらの方法でもリポジトリは単にファイルとディレクトリ を管理するだけなので、特定のディレクトリを「プロジェクト」 であると解釈するかどうかは人間にまかされています。それでこの本をつうじて プロジェクトを参照するときには、リポジトリに存在する、いま言ったような形 のいくつかのディレクトリ(あるいはディレクトリの集まり)についてだけ話を することに注意してください。
この例では、新しく作った Subversion リポジトリにインポートを済ませた
何かのプロジェクト(ファイルとディレクトリの集まり)があるものと
仮定しています。このデータ内容は myproject
という単一のディレクトリに編成されているものとしましょう(
もちろん実際には好きな名前にすることができます)。
後で説明する理由により(章 4. ブランチとマージ
参照)、ツリーの構造はbranches
,
tags
, そして trunk
という
名前の三つの最上位ディレクトリを含む必要があります。
trunk
ディレクトリはすべてのデータを含んでいる
はずですが、branches
とtags
ディレクトリは空です:
/tmp/myproject/branches/ /tmp/myproject/tags/ /tmp/myproject/trunk/ foo.c bar.c Makefile …
branches
, tags
,
trunk
サブディレクトリは実際には Subversion に
必要なものではありません。後で利用する時におそらくもっとも便利になる
ように考えられた、よく利用される命名規約にすぎません。
ツリー中にデータを作ったらsvn import コマンドでリポジトリにインポートします(svn import項を見てください):
$ svn import /tmp/myproject file:///path/to/repos/myproject -m "initial import" Adding /tmp/myproject/branches Adding /tmp/myproject/tags Adding /tmp/myproject/trunk Adding /tmp/myproject/trunk/foo.c Adding /tmp/myproject/trunk/bar.c Adding /tmp/myproject/trunk/Makefile … Committed revision 1. $
これでリポジトリにツリーのデータが入りました。この時点で
trunk
ディレクトリの「作業コピー」
を作ります。ここが実際の作業を行う場所になります:
これでリポジトリにツリーのデータが入りました。
すでに注意したように、リポジトリ中のファイルやディレクトリを詳しく
調べる必要はありません; すべてはデータベース中に格納されているもの
だからです。しかしリポジトリの仮想的なファイルシステムを考えると、
いまの場合、最上位にディレクトリmyproject
が
あり、その下にあなたのデータが含まれている形になります。
もとの
/tmp/myproject
にはなにも変更がないことに注意してく
ださい。(実際、必要ならこのディレクトリを消してしまうこともできま
す)。リポジトリのデータを操作するためには、このデータのために、一種の
個人用の作業領域となる新しい「作業コピー」を作らなくてはな
りません。Subversion に、リポジトリのmyproject/trunk
ディレ
クトリ用の作業コピーを「チェックアウト」するように指示して
みましょう:
$ svn checkout file:///path/to/repos/myproject/trunk myproject A myproject/foo.c A myproject/bar.c A myproject/Makefile … Checked out revision 1.
これでmyproject
という名前の新しい
ディレクトリ中にリポジトリのプライベートなコピーを手にしたことに
なります。作業コピー中のファイルを編集し、その変更点をリポジトリに
書き戻すためにコミットすることができます。
作業コピーに行ってファイル内容を修正します。
svn diff を実行して 変更点に対する unified diff 出力を確認します。
svn commit を実行して リポジトリに自分のファイルの新しいバージョンをコミットします。
svn update を実行して リポジトリの「最新の」状態を自分の作業コピーに反映します。
作業コピーに対してできるすべてのことについての完全な手引き については章 3. 同伴ツアーを読んでください。
この時点で、ネットワーク越しに別の人々にリポジトリを 利用可能にすることもできます。 章 6. サーバの設定を読んで利用可能ないくつかのサーバプロセス の違いについて把握し、どのように設定すれば良いかを理解してください。