* トランクやブランチなどのバージョン管理用語の意味
この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [VSS] [Subversion]
バージョン管理システムで使われる用語の意味のメモ。主に CVS、Subversion、VSS (Visual SourceSafe) で使われる用語が対象。
コピー・修正・マージの動作モデルで動いている Subversion では、リポジトリからファイルを取ってきてローカルに作業コピーを作ることをチェックアウトと呼ぶ。
ロック・修正・ロック解除の排他動作モデルで動いている VSS では、リポジトリから単に取得することを「取得」と呼び、ロック付きで取得することを「チェックアウト」と呼ぶ。他のメンバーはチェックアウト中のファイルを修正できない。
たとえば、新バージョンの開発が終わってリリースするときなどにタグを打ったりする。こうしておけば リリースしたバージョン *** のビルドに必要なソースを全部取得したい、という場合もすぐに対応できる。
ちなみにタグは「打つ」もので、ラベルの場合は「貼る」もの。私の場合、なぜかバージョン管理のタグは「付ける」のではなく「打つ」という。
分岐させる理由としては、元のツリーを壊すことなく大規模な機能追加をおこないたいとか、リリースに向けてバグ修正だけをするツリーを作りたいなどといったものがある。
ちなみに branch は枝という意味。朝ごはんと昼ごはんを一緒に食べるブランチ (BReakfast + lUNCH) は brunch なのでスペルが違う。
- リポジトリ repository
バージョン管理の履歴が保存されているところ。リポジトリのバックアップだけはしっかり取っておこう。- ツリー tree
リポジトリにある一連のファイルをまとめるディレクトリのようなもの。ツリー状になるのでこう呼ばれているようだ。VSS ではプロジェクト、CVS ではモジュールとも呼ぶ。- チェックアウト checkout, 取得
チェックアウトと取得のどちらもリポジトリからファイルを取ってくることを指すが、バージョン管理システムの動作モデルによって微妙に意味が異なる。コピー・修正・マージの動作モデルで動いている Subversion では、リポジトリからファイルを取ってきてローカルに作業コピーを作ることをチェックアウトと呼ぶ。
ロック・修正・ロック解除の排他動作モデルで動いている VSS では、リポジトリから単に取得することを「取得」と呼び、ロック付きで取得することを「チェックアウト」と呼ぶ。他のメンバーはチェックアウト中のファイルを修正できない。
- チェックイン checkin, コミット commit
リポジトリに修正を反映させることをチェックインやコミットと呼ぶ。- タグ tag, ラベル label
複数のファイルやツリーをまとめて名前付けするものをタグやラベルと呼ぶ。タグを指定した時点のファイルをまとめて取得したりするために使う。たとえば、新バージョンの開発が終わってリリースするときなどにタグを打ったりする。こうしておけば リリースしたバージョン *** のビルドに必要なソースを全部取得したい、という場合もすぐに対応できる。
ちなみにタグは「打つ」もので、ラベルの場合は「貼る」もの。私の場合、なぜかバージョン管理のタグは「付ける」のではなく「打つ」という。
- 共有 share
VSS で複数のプロジェクト間で同じファイルを扱うための仕組み。エイリアスやシンボリックリンクのようなもの。複数のプロジェクトで「共有」されたファイルを修正してチェックイン (CVS 風に言うと commit) すると、すべてのプロジェクトに修正が波及する。- ブランチ branch
ツリーを分岐させること。ブランチすると分岐元とは別にバージョン管理されるようになり、チェックインされた内容が他に自動的に波及しないようになる。明示的に分岐元と同期することはマージと呼ぶ。分岐させる理由としては、元のツリーを壊すことなく大規模な機能追加をおこないたいとか、リリースに向けてバグ修正だけをするツリーを作りたいなどといったものがある。
ちなみに branch は枝という意味。朝ごはんと昼ごはんを一緒に食べるブランチ (BReakfast + lUNCH) は brunch なのでスペルが違う。
- マージ marge
ブランチしたツリーに対し、別のツリーにチェックインされた修正を適用すること。VSS や Subversion では、マージは単なる差分の適用でしかなく、ブランチが統合されたりするわけではない。- トランク trunk
主流となっているブランチのこと。HEAD とも呼ばれる。ちなみに trunk は幹という意味で、そこから「主流のブランチ」という意味になったのだろう。かばんを意味する trunk も同じスペルだけど、別の意味。ソースコード管理ツール Visual Source Safe (VSS) で、チェックアウト中のファイルを再帰的に一覧表示する方法。
表示(V) の検索(S) のチェックアウト ユーザー名で検索(S) を選択。
以下のダイアログに対象ユーザーと表示範囲を設定する。
「特定ユーザーのチェックアウト ファイル」を選択する。ユーザーは自分以外でも指定可能。長期休暇に入る予定の人がチェックアウトしっぱなしにしているソースがないか確認するののにも使える。
「現在のプロジェクトとすべてのサブプロジェクトを検索」を選択するのがポイント。そうすることで、選択しているディレクトリとそのサブディレクトリを再帰的に検索し、結果を表示してくれるので便利。
しかし、少数の固定的なメンバーしかソースを修正しないなら、チェックアウト時に排他をかけるという、いわゆる悲観的ロックの方がわかりやすく安全だ。ただ、これを使うには、それぞれのメンバーで自分自身がチェックアウトしているファイルを常に把握している必要がある。チェックアウトしっぱなしになっているファイルがあると他のユーザがソースを修正できなくなるので、そのままでは開発に支障をきたすおそれがある。
なぜチェックアウトしっぱなにしてしまうかというと、自分がチェックアウトしていることを忘れてしまうからだ。複数のプロジェクトにまたがる複数のドキュメントを平行して修正していると、結局修正しなかったファイルのチェックアウトを取り消すのを忘れてしまったりする。
そういう意味で、VSS はもっとチェックアウト中のファイルを簡単に把握できるインターフェイスを用意してほしい。今回の方法で調べることはできるのだが、プロジェクトのツリーを選択する度に再帰的に検索を走らせているようで、動作が非常に遅い。ときどき確認するくらいなら良いのだが、常に把握するという要求は満たせない。
リポジトリをネットワーク上に置かなければもっと速いのかもしれないが、複数人で利用するソースコード管理サーバはネットワーク上に置きたい。
- VSS でチェックアウト中のファイルを再帰的に一覧表示する
Visual Source Safe 6.0d でのやりかた。表示(V) の検索(S) のチェックアウト ユーザー名で検索(S) を選択。
以下のダイアログに対象ユーザーと表示範囲を設定する。
チェックアウト ユーザー
○ すべてのチェックアウト ファイル(A)
● 特定ユーザーのチェックアウト ファイル(F): [Landscape]
「特定ユーザーのチェックアウト ファイル」を選択する。ユーザーは自分以外でも指定可能。長期休暇に入る予定の人がチェックアウトしっぱなしにしているソースがないか確認するののにも使える。
検索範囲
○ 現在のプロジェクトのみを検索(C)
● 現在のプロジェクトとすべてのサブプロジェクトを検索(S)
○ すべてのプロジェクトを検索(P)
「現在のプロジェクトとすべてのサブプロジェクトを検索」を選択するのがポイント。そうすることで、選択しているディレクトリとそのサブディレクトリを再帰的に検索し、結果を表示してくれるので便利。
- 自分がどのファイルをチェックアウトしているかを把握できてないことが問題
CVS や Subversion では、いわゆる楽観的ロックが一般的。ソースの取得時にはとくにロックを行わず、チェックイン (コミット) 時に競合を検出する方法だ。これなら、自分がどのファイルをローカルに持ってきているかはとくに問題にならない。多数のメンバーが入れ替わり立ち替わり修正を加えていく開発スタイルなら、こちらの方が良いだろう。しかし、少数の固定的なメンバーしかソースを修正しないなら、チェックアウト時に排他をかけるという、いわゆる悲観的ロックの方がわかりやすく安全だ。ただ、これを使うには、それぞれのメンバーで自分自身がチェックアウトしているファイルを常に把握している必要がある。チェックアウトしっぱなしになっているファイルがあると他のユーザがソースを修正できなくなるので、そのままでは開発に支障をきたすおそれがある。
なぜチェックアウトしっぱなにしてしまうかというと、自分がチェックアウトしていることを忘れてしまうからだ。複数のプロジェクトにまたがる複数のドキュメントを平行して修正していると、結局修正しなかったファイルのチェックアウトを取り消すのを忘れてしまったりする。
そういう意味で、VSS はもっとチェックアウト中のファイルを簡単に把握できるインターフェイスを用意してほしい。今回の方法で調べることはできるのだが、プロジェクトのツリーを選択する度に再帰的に検索を走らせているようで、動作が非常に遅い。ときどき確認するくらいなら良いのだが、常に把握するという要求は満たせない。
リポジトリをネットワーク上に置かなければもっと速いのかもしれないが、複数人で利用するソースコード管理サーバはネットワーク上に置きたい。