TortoiseCVS ユーザガイド

Original: http://www.tortoisecvs.org/guide.html
Latest: http://www.tortoisecvs.org/UserGuide_en.chm

あるいは: バージョン管理を楽しく 使う方法について。

Ben Campbell 著.
Sverre Husebyのすばらしい WinCVS ユーザガイドを元にしています。


目次

  1. 作業用コピー
  2. CVSからモジュールを取得すること
  3. アイコンの色についての説明
  4. CVS からほかの人の変更をとりこむ
  5. 自分の変更をCVSに送ること
  6. 衝突の解消
  7. 変更個所の表示
  8. ファイルとディレクトリの追加
  9. ファイルとディレクトリの削除
  10. ファイルやディレクトリの移動や名称変更
  11. 変更の取り消し
  12. ラベルによるファイルのタグづけ
  13. 新しいモジュールの作成
  14. ブランチを作る
  15. 作業ブランチの選択
  16. ブランチのマージ
  17. 開発の主系に戻ること
  18. さらなる情報
  19. Appendix A: 用語集
  20. Appendix B: CVS はマイクロソフトの Visual Source Safe とどのように違うか

作業用コピー

CVS は、他のバージョン管理システムとは違ったやりかたで動きます。 開発者は、同じファイルを同時にいじることができます。 最初にやることは、リポジトリからソースコードのあるバージョンを チェックアウトすることです。それから単に変更したいファイルを 編集したり新しいファイルを作ったり、削除したりします。終わったら ファイルをリポジトリに格納します。

もし誰かほかの人があなたがやったのと同じファイルを変更していると、格納は 失敗します。その場合、すべてのソースコードのファイルをリポジトリから更新 してください。これはほかの開発者の変更を自動的に自分の作業用コピーにマージします。

ときどき、これは自動的にはいかないことがあります。たとえば、二人がソースコードの 同じ場所を修正したような場合です。これは、衝突と呼ばれます。衝突は 思っているほど起こらないものです。CVS はそのファイルの中に、衝突を起こした両方の バージョンを埋め込みます。二つのバージョンは、特別な印で区切られています。 衝突を解消するためには、手でそのファイルを編集してください。

それがすんだらもう一度、格納してください。今度はうまくいきます。

このやり方はいろいろとメリットがあります。両方の開発者は、それぞれ自分の 作業用コピーで仕事をします。ほかの開発者がやった変更は、格納しようと するまでは、自分からは分離されています。ほかの人がチェックアウトしている最中 だから自分が修正できないというようなことはなくなります。どの開発者もサーバに 直接アクセスすることなしに作業ができ、更新または格納するときにだけサーバに 接続することが必要になります。

[ CVS Doc: "Overview" ]

CVSからモジュールを取得すること

最初にCVSサーバからモジュールをもってくることを、チェックアウト といいます。リポジトリからチェックアウトすると、モジュールと呼ばれる ディレクトリ階層の作業用コピーを手に入れることができます。

すでにWinCVSやほかのCVSクライアントでモジュールをチェックアウト していた場合は、この章を飛ばして、すぐに作業にとりかかることができます。

チェックアウトするには、モジュールをもってきたいと思うディレクトリで 右クリックして、ポップアップメニューから "CVS チェックアウト..." を選んでください。 チェックアウトダイアログには、以下のような項目があります。

プロトコル
サーバとのやりとりにどのプロトコルを使うかです。
サーバ
リポジトリのあるマシンの名前。
リポジトリディレクトリ
サーバ上のリポジトリがある場所。
ユーザ名
リポジトリサーバ上のアカウント名称
CVSROOT
上で説明してきたフィールドからなる完全な接続文字列。よく、この形式で 接続文字列を入力することがあります。その場合、このフィールドにカットアンド ペーストしてやるだけでうまくいきます。
モジュール
チェックアウトしたいモジュールの名前。モジュールの名前は大文字と小文字の区別があるので注意してください。

前もってこれらの情報を手にいれておく必要があります。たいていのプロジェクトは どうやって接続し、モジュールをチェックアウトするかについてのドキュメントがあります。 見つからなければ、知っている人を探すしかありません。:-)

モジュールあとにくるディレクトリはチェックアウトするディレクトリ中に作られる ので、チェックアウトしたいすべてのモジュールを、ひとつのディレクトリの中に まとめておくことができます。別のプロジェクトであってもそうです。

[ CVS Doc: "checkout -- Check out sources for editing" ]

アイコンの色についての説明

ファイルやフォルダによっては、アイコンオーバーレイがあるのに気づくと 思います。

CVS からほかの人の変更をとりこむ

よく、自分の作業用コピーにほかの人の変更を取り込みたいことがあります。 このサーバから自分の作業用コピーに対する変更処理のことを更新と 言います。更新はひとつのファイルに対しても、複数にファイルに対しても、 また、再帰的にディレクトリ構造全体に対してもできます。 更新には、処理対象のファイルやディレクトリを選択し、その場所で右クリック してから、"CVS 更新"を選択します。実行中には、処理経過をしめすポップアップ ウィンドウが表示されます。

他の人による修正は作業用コピーにマージされ、あなたの変更も同じファイルに 保存されます。更新によってリポジトリの内容は影響を受けません

更新中に衝突の報告を受けた場合には、"衝突の解消" の章を読んでください。

CVSマニュアルのupdate outputの 章は処理中の各行の先頭に表示される謎めいた文字についての説明です。

[ CVS Doc: "Bringing a file up to date" ]
[ CVS Doc: "update -- Bring work tree in sync with repository" ]

自分の変更をCVSに送ること

作業用コピーでの修正をリポジトリに反映させることを、修正の 格納(committing)と言います。

  1. 格納する前に、衝突がおきないことを保証するために更新すべきです。 CVSからほかの人の変更を取得するを見てください。
  2. 格納したいと思うディレクトリや一つ以上のファイルを選択してください。
  3. 選択した場所でマウスの右ボタンをクリックして、 CVS 格納... メニューを選んでください。
  4. 格納ダイアログで、何を変更したかについての簡単な説明のあるログメッセージを 入力してください。
  5. チェックボックスのチェックをはずすと、そのファイルは格納処理からはずされます。
  6. ダイアログでOKを押して、格納処理に進んでください。

格納による変更処理は、自動的に新しいファイルをリポジトリに追加したりは しません。新しいファイルの追加については ファイルとディレクトリの追加 を見てください。

[ CVS Doc: "commit -- Check files into the repository" ]

衝突の解消

時々リポジトリからファイルを更新しようとするときCVS サーバが衝突 を報告することがあります。衝突は、二人以上の開発者がファイルの同じ行を 変更したときにおこります。CVS はプロジェクトの意味については何も知らない ので、衝突の解消は開発者にゆだねます。衝突が報告されたときにはファイルを ひらいて、<<<<<<<で始まる行を探してください。 衝突している場所はこんな感じにマークされています:

<<<<<<< filename
    あなたがやった変更
=======
    リポジトリからマージされたコード
>>>>>>> revision

コードをどう修正すべきかを決定し、必要な修正を加え、CVS のマーカを削除し、 最終的な変更をリポジトリに格納してください。

[ CVS Doc: "Conflicts example" ]

ファイルとディレクトリの追加

新しいファイルやディレクトリを作るとアイコンに疑問符がつくのに気づくと 思います。そのようなファイル、ディレクトリを CVS 管理下には置くには:

  1. 追加したいファイルまたはディレクトリを選択します。
  2. CVS 追加 を右クリックのメニューから選んで、 追加予告します。

ファイルの追加操作の後で、そのアイコンは"変更された"状態表示になります。 これは追加が作業用コピーの変更として扱われるためで、格納 するまでは、その変更はリポジトリに反映されません。

ディレクトリに対しては、特別なメニュー項目、 CVS へ全ファイルの再起的な追加が使えます。 この操作は、ディレクトリ構造を降りていって、サブディレクトリを含むすべての ファイルを追加対象とするものです。不注意で不要なファイルまでリポジトリに 追加してしまうことがあるので注意して使ってください。(たとえば、.o や .obj のようなコンパイルの中間ファイルまで追加してしまうかも知れません。)

追加するファイルがテキストかバイナリかは心配する必要が ありません。TortoiseCVS が自動検出します。 FAQ entryにもっと詳しい 情報があります。

[ CVS Doc: "Adding, removing, and renaming files and directories" ]

変更箇所の表示

ファイルにした変更点を見たい場合は、 CVS Diff... メニューを選んでください。

ウェブログオプションは、ブラウザを使って ファイルの履歴を表示するためにViewCVSか、 CVSWeb を起動します。このようなプログラムは、CVSリポジトリを閲覧したり、古いバージョンを ダウンロードしたり、バージョン間の違いを表示したりします。 サーバ管理者に ViewCVSをインストールするように説得することを強くお勧めします。 このソフトは、コードの各行について、だれが最後の修正をしたかについての 注釈表示機能があります。

[ CVS Doc: "diff -- Show differences between revisions" ]
[ CVS Doc: "log -- Print out log information for files" ]

ファイルとディレクトリの削除

ファイルを削除するばあい、まず削除予告をし、その変更を格納(commit. ここでは確定、 という程度の意味です - 訳者)します:

  1. 削除したい一つ以上のファイルを選択します。
  2. 選択した場所でマウス右ボタンをクリックして CVS/削除 サブメニュー項目を選びます。
  3. 作業用コピー上でファイルは削除され、リポジトリ上の削除が予告されます。 リポジトリへの実際の反映は、格納 でやります。

これでファイルはリポジトリからも、あなたの作業用コピーからも削除されます。

ディレクトリは、その中にあるすべてのファイル、サブディレクトリが削除 されると自動的に削除されます。これは、次の CVS 更新時におこります。

[ CVS Doc: "Adding, removing, and renaming files and directories" ]

ファイルとディレクトリの移動または名称変更

ファイルやディレクトリの移動や名称変更の操作は CVS にはありません。 CVS の欠点のひとつです。移動や名称変更にあたることをするには、 削除と、追加の操作を組み合わせなくてはなりません。 ファイルとディレクトリの追加ファイルとディレクトリの削除 を見てください。

[ CVS Doc: "Moving and renaming files" ]

変更の取り消し

変更を取り消してリポジトリのバージョンに戻るときは CVS サブメニューで、特殊更新を選んでください。 ダイアログでクリーンコピーを選びます。 これは個別のファイルに対しても、フォルダ全体に対しても使えます。

作業用コピーがぐちゃぐちゃになったり、混乱してしまったりしたときには もうひとつ有効な方法があります。ハードディスクからファイルやフォルダを いったん消してから親ディレクトリで更新を選択すると、最後のバージョンに 戻ることができます。

ラベルによるファイルのタグづけ

開発の特定の状況で、ひとつ以上のファイルのそれぞれのリビジョンに共通のラベル を貼ることを、ファイルのタグづけといいます。 典型的には、モジュール全体に対して実行して、あとで現在のモジュールの 状態を復元できるようにします。 この手のタグづけは、プロジェクトのリリース時や、大きな変更の前にはいつでも やるべきです。

ひとつ以上のファイルやディレクトリにタグづけするには:

  1. タグづけしたいディレクトリやひとつ以上のファイルを選びます。
  2. 選択した場所でマウス右ボタンをクリックして CVS/タグの作成...メニューをえらびます。
  3. Enter the label in the タグ入力フィールドに ラベルを入力します。(タグ名称についての制約は以下を参照してください。)
  4. OKを押します。

タグ情報は、直接リポジトリに送られます。格納の操作は不要です。

タグの名前に使える文字には強い制限があります: タグは文字で始まり 文字と数字、"-" (ダッシュ) と "_" (アンダースコア) のみが許されます。ドットや、空白は許されないということです。 タグにバージョン番号を含めたい場合はドットをダッシュで置き換えて ください。二つのタグ名称はCVSでは特別な名前として予約されています: "HEAD" はリポジトリで1番最近のリポジトリを示し、 "BASE" はローカルディレクトリを最後にチェックアウトした リビジョンを示します。

[ CVS Doc: "Tags -- Symbolic revisions" ]

新しいモジュールを作る

新しい CVS モジュールを作るには:

  1. CVS 管理下に置きたいファイルとディレクトリを整理します。
  2. ディレクトリの上で右クリックして、 CVS/新しいモジュールの作成... を選びます。
  3. どのリポジトリの中にモジュールを置くかを指定するために項目を 埋め、OKを押します。
  4. これで新しいモジュールのディレクトリは、CVS 管理下にあることを示す 緑色でハイライト表示されるようになります。ディレクトリの中にいって ファイルとディレクトリの追加 に書いてある方法で、ファイルとフォルダをCVSに追加してください。

CVSにはプロジェクトファイルの階層構造を再構築するための良い機能 はないので、あらかじめモジュールレイアウトについてよく考えておくと いろいろなトラブルを防ぐことができます。

CVSは空のディレクトリを存在していないものとみなすことに注意して ください。ファイルもサブディレクトリも持たないようなディレクトリを 追加したい場合は、ダミーのファイルをその中に作る必要があります。 README.txtという名前のファイルを作るのが良いと思います。 そしてそこにそのディレクトリの意味について説明を書きます。

TortoiseCVS は、モジュールを、そのモジュールがあるまさにその場所 に作ります。これは他のCVSクライアントのインポート方法とは違って います。裏でTortoiseCVSがやっていることは、チェックアウトしたあと にインポートしています。

[ CVS Doc: "Starting a project with CVS" ]

分岐(ブランチ)

バージョン管理システムの一つの機能は、開発の別ラインに変更部分を分離する 能力にあります。この別ラインのことを、ブランチ(分岐)といいます。 (See What branches are good for in the CVS documentation.)

ブランチを作るには、次のようにします:

  1. 分岐したいファイルとディレクトリを選択します。
  2. 選択した場所でマウスの右ボタンをクリックして、 CVS/ブランチの作成...を選びます
  3. ブランチ: 入力フィールドで、 ブランチの名前として利用したいタグの名前を入力します。 ラベルでタグづけされたファイル を見て、どの文字が タグの名前で利用できるかをしらべてください。
  4. OK ボタンを押してください。

こうして新しい名前をもったブランチがリポジトリに作られました。 注意: ブランチは、リポジトリの中にだけ作られます。 新しく作成されたブランチ上で作業するには、作業ブランチの 選択にかかれていることをやらなくてはなりません。

[ CVS Doc: "Branching and merging" ]

作業ブランチの選択

デフォルトの主系の開発のかわりに作業ブランチで作業を始める場合は、 作業用コピーをそのブランチに結び付けなくてはなりません。これは、 開発の主系ではなく、ブランチにたいして更新、格納などの処理をする ことを保証するのに必要になります。

別のブランチに作業用コピーを移す場合は、以下のようにしてください:

  1. プロジェクトの最上位ディレクトリを選択します。( どのディレクトリとファイルがブランチの一部であるかを正確に知っている 場合は、かわりにそれを選択することもできます。)
  2. 選択した場所でマウス右ボタンをクリックして、 特殊更新をCVSサブメニューから選びます。
  3. タグ/ブランチ/リビジョンの選択フィールドで 移動先のブランチのタグ名称を入力します。
  4. OKボタンを押します。

これで TortoiseCVS は指定した作業ブランチに対して作業用コピーの更新を したり転送したりします。更新には、ファイルの追加や削除も含まれます。

CVS は、ブランチによって影響されるファイルに張り付きタグと呼ばれる ものをつけます。このタグを削除して主系にもどるには、 開発の主系に戻ることに書かれた操作をしてください。

[ CVS Doc: "Accessing branches" ]

ブランチのマージ

ブランチにやった修正に満足したら、開発の主系に変更を反映させたいと 思うかも知れません。あるブランチと別のブランチの修正を一緒にすることを マージといいます。あるブランチをマージするには、次のようにします:

  1. 作業用コピーを、変更点をマージしたいと思うブランチに移してください。 作業ブランチの選択開発の主系に戻ることを見てください。
  2. プロジェクトの最上位ディレクトリを選択してください。 (どのディレクトリとファイルがブランチの一部であるかを正確に知っている 場合は、かわりにそれを選択することもできます。)
  3. 選択した場所でマウス右ボタンをクリックして、 CVS/マージ...メニューを選択してください。
  4. ブランチへのマージ元入力フィールド でマージしようと思うブランチのタグ名称を入力してください。
  5. OKボタンを押してください。

これでブランチに加えた変更は作業用コピーにはマージされます。 多分、マージされたファイルをリポジトリに戻したいと思うかも知れません。 これには、変更点をCVSに送るを見てください。

重要: この方法でのマージは、ブランチの最初からの変更をマージ しようとします。二度目のマージをやろうとする場合、(最後のマージの後で そのブランチにした修正点をさらにマージしようとする場合)、ブランチの 最初からのマージは、やりたいことではないので、おそらくトラブルの原因 になります。これを解決するには、マージの後ごとで新しいタグをブランチに つけて、二度目以降のマージには、ブランチにつけた新しいタグを使うことです。

[ CVS Doc: "Merging an entire branch" ]

開発の主系に戻ること

ブランチでの作業を止めて作業用コピーを開発の主系に戻したいときは、TortoiseCVS を使って、すべての張り付いたタグを取り除く必要があります。張り付いたタグを取り除き、 作業用コピーを主系に更新するには、以下のようにします:

  1. プロジェクトの最上位ディレクトリを選択します。( どのディレクトリとファイルがブランチの一部であるかを正確に理解している なら、かわりにそれらを選択することもできます。)
  2. 選択した場所で右マウスボタンをクリックして、CVS サブメニューから 特殊更新を選んでください。
  3. メイン(先頭の)ブランチに戻る チェックボックスをクリックします。
  4. OK ボタンを押します。

TortoiseCVS は、作業用コピーを更新するので、現在の開発の主系に一致することに なります。それまでいたブランチはまだリポジトリ中にあるので、いつでも 作業ブランチの選択 に書かれた方法で戻ることもできます。

[ CVS Doc: "Sticky tags" ]

さらなる情報

Karl Fogel の The CVS Book は、 CVS をコマンドラインから利用するためのすばらしいガイドです。きっと TortoiseCVS を 極限まで使い倒す人の助けにもなるでしょう。

このガイド中のリンクは、Per Cederqvist氏たちの CVS でのバージョン管理です。 これは CVS マニュアルの決定版です。

Appendix A: 用語集

CVS のドキュメントで使われる用語は、TortoiseCVS でも使われますが、 他のソース管理システムとは違っているかも知れません。混乱をさけるため、 よく利用される用語をならべておきます。

チェックアウト(Checkout)
ふつうリポジトリから最初にモジュール全体をもってくることをさして言います。
格納(Commit)
リポジトリに作業用コピーの変更点を送ることです。
エクスポート(Export)
CVS の管理ファイルなしで、リポジトリのモジュール全体を抽出することを言います: エクスポートされたモジュールは、CVS の管理にはありません。
インポート(Import)
ふつうディレクトリ構造の全体をリポジトリに送ることで、新しいモジュールを作ることを いいます。
モジュール(Module)
特定のディレクトリ階層のことです。ふつう、開発されるソフトウェアはリポジトリ中で ひとつのモジュールとして存在します。
リリース(Release)
開発中のソフトウェア全体につけられたバージョンのことです。
リビジョン(Revision)
個別のファイルにつけられたバージョンのことです。
タグ(Tag)
開発中の特定の時刻のファイルの集まりにたいしてつけられた名前のことです。
更新(Update)
リポジトリにたいして他のユーザがした修正を取り込むことです。作業用コピーだけを 更新します。

"リビジョン","リリース","バージョン","タグ"についての 詳細は、chapter 4 of the CVS documentation. を見てください。

Appendix B: CVS はどこが Microsoft Visual Source Safe と違っているか。

CVS と WinCvs はいろいろな意味で Visual Source Safe(VSS) とは違っています。 いちばんはっきりした違いは CVS のユーザは作業しているファイルをロックする 必要がないことです。VSS の場合デフォルトはロックです。実際、 CVS のドキュメントは、ユーザにできるだけロックしないことを推奨して います。数人が同じファイルを同時に変更するというめったにない状況でも、 ふつうCVS はそれぞれの変更をマージすることができます。もし、二人かそれ以上 の開発者が同じ場所にある何行かを変更したときには、CVS は、衝突を 報告し、ファイル中にマークをつけ、どうするかを開発者にゆだねます。そういう 衝突がおこるのは非常にまれで、ふつうは開発者間の意思の疎通がない場合に おこるだけです。(たとえば二人の人間が同じ問題を解決しようとした、など)。

もうひとつの重要な違いは、VSS は、サーバ側からの見方を提供する のにたいして、TortoiseCVS は、クライアント側からの見方を提供 するところです。実際の場面で言うと、VSS とはちがい、更新や、選択したファイル の状態を明示的にたずねるまで、TortoiseCVS はリポジトリの変更について言って くることはありません。TortoiseCVS によって報告された変更は、最後の チェックアウト、更新、格納などの後ではじめて、反映されることに なります。