原文はこちら
これは日々のソフト開発でSubversionを最大限に利用するための簡単なガイド ラインです.
Subversionプロジェクトは「プロジェクトルート」という概念を公式に推奨し ています. これはプロジェクトのアンカーポイントとなります. 「プロジェク トルート」には3つの子ディレクトリがあります: /trunk, /branches, /tags です. リポジトリはプロジェクトルートを1つしかもたないこともありますし, 複数のプロジェクトルートをもつこともあります.
参照: Choosing a Repository Layout
参照: Chapter 4 にある囲み記事: "Subversion and Changesets"
Merged revisions 3490:4120 of /branches/foobranch to /trunk.参照: Tracking merges manuallyおよびMerging a whole branch to another
Understand mixed-revision working copies あなたのワーキングコピーのディレクトリやファイルは異なる「実働」リビジョ ンをもっている可能性があります: これは新旧バージョンのディレクトリやファ イルを混在させるというよくできた機能なのです. しかし, 注意しておくべき 点もまたあるのです:
参照: The limitation of mixed revisions
もちろん, 実際には考えるべき点が多々あります. キロバイトサイズのファイ ルであれば何ら問題はありません(通常のソースコードファイルであればこの 範囲です)が, より大きなファイル(数十〜数百メガバイトのファイル)をコミッ トする際には時間とスペースがとても必要になります.
まず, Subversionワーキングコピーはバージョン管理されたすべてのファイル
の原本を .svn/text-base
にもっています. つまり, 単純に2倍のスペース
が必要となっているわけです. さらに, Subversionクライアントはファイルを
コミットする際, (現在のところ調整できない)アルゴリズムを採用しています:
.svn/tmp/
にコピーする(時間がかかる上, 一時的にディスク
スペースを要する)
.svn/text-base/
に送る
このため, 理論的にはファイルに上限はないけれど, 巨大なファイルはクライ アントが上述のような処理をするのをひたすら待つ必要があるわけです. ただ, CVSと違って, 待ちさえすればよいので, 巨大なファイルのせいでサーバがダ ウンして他のユーザに影響を与えるようなことはありません.
svn log
しかありません. 他
のコマンド(svn diff
や svn cat
など)でも自動的にリネーム履歴を追跡
できるはずですが, まだ実装されていません.
このような場合, 古いリビジョンでの適切なパスを発見する基本的な解決法は
'svn log -v'
を使うことです.
例えば, /trunk
を /branches/mybranch
にコピーし(リビジョン200),
その後のリビジョンで /branches/mybranch/foo.c
に対する何らかの変更を
コミットしたとしましょう. ここで, リビジョン80とリビジョン250を比較す
るとします.
このブランチのワーキングコピーで svn diff -r80:250 foo.c
を実行した
場合, リビジョン80では /branches/mybranch/foo.c
が存在しないというエ
ラーメッセージが表示されることになります. その対策として, svn log -v
を実行することで, リビジョン200以前では /trunk/foo.c
という名前だっ
たことが分かるので, この2つのURLを直接比較することになるわけです:
$ svn diff http://.../trunk/foo.c@80 \ http://.../branches/mybranch/foo.c@200
これはあまり聞かれないことですし, あなたのソフトウェアプロジェクトの文 化にもよることです. 一般的なポリシーを議論するのではなく, よく用いられ る方法を3種類紹介することにします:
/trunk
にコミットする.
/trunk
が「壊れる」
ことがある(コンパイルできなくなったり, 機能テストに失敗するようになる)
補遺: この手の開発はCVSに比べてSubversionであればリスクは低くなってい ます. Subversionはアトミックに(一連のコミットをまとめて)コミットするた め, 他の人がコミットしている途中の「部分的に」コミットされたものを checkoutやupdateの際に受け取ることはないからです.
各ユーザはコーディングタスクにあわせて個々にプライベートなブランチを作っ
て作業します. コーディングが完了したら, 誰か(原作者, 監修者, もしくは
マネージャ)がレビューし, 認可されたら /trunk
に変更がマージされます.
/trunk
はいつでも非常に安定であることが保証されます.
/trunk
にコミットします.
/trunk
はコンパイルして復帰試験にパスしなくてはなりません.
この規則を守らなかったコミッタは罰せられます.
/trunk
の安定性を破
壊することなくピアレビューすることができます.
/trunk
はいつでも安定です. ブランチ分け/マージで悩むこともあ
まりありません.