TortoiseSVN ユーザガイド(旧版)

Original: http://tortoisesvn.tigris.org/dailyuseguide.html
Latest: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug.html
Latest-ja: http://tortoisesvn.net/docs/release/TortoiseSVN_ja/tsvn-dug.html

はじめに

このドキュメントは通常のTortoiseSVNクライアントの利用方法について 説明したものです。これはバージョン管理システムについての導入ではありませんし、 SVNについての導入でもありません。自分が何をしたいか大体わかっている人が戻って くる場所なのであって、あることをどのようにやるかを完全に説明するものではありません。

すでにあなたがTortoiseSVNをインストールしていることが前提となっています。

もしサブバージョンについて知らないのなら、"Subversion: 公式ガイド" をまず読みましょう。

用語

SVNドキュメントや、TortoiseSVNもそうですが、使われる用語の意味はほかの ソースリポジトリシステムとは違っているかも知れません。混乱をさけるため、一番基本的な 用語の短いリストを用意しました。ドキュメントの残りの部分を読む前に、このような単語に なじんでおいてください。

チェックアウト(Checkout)
普通、リポジトリからモジュール全体を最初にもってくることを言うのに使われる言葉です。
コミット(Commit)
変更点をリポジトリに送ることです。
エクスポート(Export)
CVS管理ファイルなしに、リポジトリからモジュール全体をもってくることです。 エクスポートモジュールはSVN管理下にはありません。
インポート(Import)
ふつう、ディレクトリ構造全体を送ることによってリポジトリ内に新しいモジュールを 作る操作のことをさしていいます。
モジュール(Module)
ディレクトリ階層のことです。普通のソフトウェアプロジェクトはリポジトリ中のひとつの モジュールとして存在します。
作業コピー(Working Copy)
自分のローカルハードディスクにあるプロジェクトのコピーのことです。このコピーを 使って、各自は作業をします。
リリース(Release)
生産物全体のバージョンのことです。
リビジョン(Revision)
完全なリポジトリのバージョンのことです(ブランチやタグも含みます)。
更新(Update)
リポジトリからほかのユーザの変更点を取り込みます。自分の作業コピーのみに対して 更新がおこります。

ローカルリポジトリを作ること

もしローカルリポジトリを作りたいわけではなく、サーバベースのリポジトリを使いたい 場合は、この章は飛ばしてもかまいません。

TortoiseSVNを使えば、ローカルリポジトリはとても簡単に作れます:

  1. windows エクスプローラを開きます。
  2. 新しいフォルダを作って、たとえば、"SVNRepository" という名前にします。
  3. フォルダ中で右クリックします。コンテキストメニュー中で、TortoiseSVN のサブメニュー を選んで、"create repository here"(ここにリポジトリを作る)を選びます。これで、その 場所にリポジトリが作成されます。ここにできたファイルを直接編集しないでください!!! エラーがおきたら、フォルダが書き込み禁止になっていないかどうか、空ではないか どうかを確認してください!

ローカルリポジトリにアクセスするには、そのフォルダのパスが必要になります。Subversionは すべてのリポジトリパスを、"file:///C/SVNRepository/"のようなものであると 仮定することに注意してください。

プロジェクトの新しいリポジトリへのインポート

リポジトリに自分のプロジェクトをインポートする前に、以下のことをしてください:

  1. プロジェクトの作成に不要なすべてのファイルを削除してください(一時ファイル、 コンパイラによって生成されるファイル、たとえば、*.obj, コンパイルされたバイナリ、 などなど・・・)
  2. フォルダとサブフォルダ中に、ファイルを編成してください。あとでファイルを名称変更 したり移動したりすることもできますが、インポートする前にそれを済ませておくことを つよく薦めます。
  3. 推奨されるディレクトリ構造は以下のようなものです:
    /trunk/
    /branches/
    /tags/
    このように配置すれば、あとでブランチやタグを簡単に作ることができます。これは推奨 にすぎないことに注意してください。もちろんべつのディレクトリ構造を使うこともできます が、ブランチやタグを編成するのが難しくなるでしょう。もしこのディレクトリ構成を選べは TortoiseSVN は /tags/ フォルダにあるパスにたいしてコミットしようとすると、警告して くれます。

さて、ウィンドウズエクスプローラのディレクトリ構造の親フォルダを選択して、右クリック し、コンテキストメニューを表示してください。"Import..." コマンドを選択してください。 ダイアログボックスが表示されます:

Import Dialog

このダイアログで、自分のプロジェクトをインポートしたいリポジトリの場所を示すURLを入力する 必要があります。ローカルリポジトリの場所はURLの形式で入力しなくてはならないことに注意して ください。

モジュール名称は、プロジェクトの名前でも良いですし、自分の好きな名前にしてもかまいません。 普通はコンテキストメニューを表示するために選択したディレクトリの名前を使います。(デフォルト として表示されます)。

インポートメッセージはログメッセージとして利用されます。普通は単にプロジェクトを開始する だけなので、デフォルトの "initial import" が TortoiseSVN によって表示されます。

OKボタンを押せば、TortoiseSVN はリポジトリ中に、すべてのファイルを含む完全なディレクトリツリー をインポートします。これは、まだバージョン管理下にあるプロジェクトのコピーを作るものではない ことに注意してください。バージョン管理された作業コピーを手に入れるには、いまインポートしたばかり のバージョンをチェックアウトする必要があります。

作業コピーのチェックアウト

作業コピーを手にいれるには、リポジトリから作業コピーをチェックアウトしなくては なりません。

ウィンドウズエクスプローラで作業コピーをおこうと思っているディレクトリを選択してください。 右クリックしてコンテキストメニューを表示し、"Checkout..." コマンドを選択するとダイアログ ボックスが表示されます:

Checkout Dialog

もしモジュール名を入力すれば、その名前のディレクトリが作成されます。そのフィールドを 空のままにしておけば、ファイルはエクスプローラで選択したフォルダ中に直接保存されます。

ディレクトリツリー中の"trunk"の部分のみをチェックアウトすることを勧めます。 URL中のディレクトリツリーの親のパスを指定すると、自分のハードディスクがあふれて しまうかも知れません。プロジェクト中のすべてのブランチとタグもコピーされてしまうから です!

アイコンオーバーレイ

Subversionのリポジトリから作業コピーをチェックアウトすると、ウィンドウズエクスプローラ 中のファイルのアイコンが変化するのがわかります。TortoiseSVNはオーバーレイアイコンと 呼ばれる、もとのアイコンに重なって表示するようなアイコンをそれぞれのファイルに付け加えます。 それぞれのファイルの、Subversion管理下での状態によって、オーバーレイアイコンは異なり ます。チェックアウトしたばかりの新鮮な作業コピーは、緑のチェックのついたオーバーレイ が表示されます。それはSubversion状態が"正常"であることを意味します。編集を始めると すぐに、ファイルの状態は"修正"にかわり、オーバーレイアイコンはびっくりマークに変化します。 これにより、最後に作業コピーを更新してから、どのファイルを修正したか、またコミットが 必要であるか、が簡単にわかります。更新処理中に"衝突"がおきた場合は、アイコンは黄色の びっくりマークに変化します。

フォルダアイコンもオーバーレイアイコンがつきます。デフォルトでは、フォルダ自身の 状態が表現されます。しかし、設定を変えると、(コンテキストメニューの Setting... でやります)フォルダの状態は再帰的に表示されるようになります。この処理はフォルダ のオーバーレイ表示に時間がかかるようになるので、遅いマシン上ではおすすめできません。 私は (PIII, 700MHz, 512MB RAM) のスペックのマシン上でこの設定を有効にしています が、とくに問題はないようです。この設定では、それぞれのフォルダは、その配下にある すべてのファイルの状態を表現するようになります。"衝突" は "修正" よりも強く、 "修正" は、"正常" よりも強いという約束で状態表示されます。そのため、そのフォルダ 中に、衝突、あるいは修正されたファイルがあるかどうかを簡単に知ることができます。

Icon Overlays

TortoiseCVS(CVSのシェル拡張です) とは違い、バージョン化されていないファイルには オーバーレイアイコンはつきません。

ほかの人の変更を作業コピーにとりこみ、更新すること

ときどきほかのユーザがした変更を自分の作業コピーに取り込みたいことがあります。 このようなサーバからの変更を自分の作業コピーに取り込むことを更新と いいます。更新はひとつのファイルに対しても、選択した複数のファイルに対しても、 また、再帰的なディレクトリ構造全体に対しても実行することができます。 更新するには、更新したいとおもうファイルまたはディレクトリを選択し、右クリック してTortoiseSVN サブメニューから"Update"を選んでください。ウィンドウがぽっ゜分アップ して、更新処理中の様子を表示します。

 Update Progress

Update Progress finished

ほかの人の変更は自分のファイルにマージされますが、自分自身がした変更部分については 同じファイル中に保存されます。リポジトリは更新処理によっては何も影響を受けません

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

自分の変更をリポジトリに送ること

自分の作業コピーにした変更を送ることを、コミットといいます。しかし、コミットする 前に、まず更新すべきです。やり方については前の章を見てください。

作業コピーを更新し、衝突があった場合にはそれを解消すれば、自分の変更をコミットする 準備ができていることになります。コミットしたいファイルやフォルダを選択し、コンテキスト メニューから"Commit"を選んでください。ダイアログが表示され、コミット処理の経過を表示 します。

Commit Progress

衝突の解消

ときどき、リポジトリからのファイルで更新処理が衝突の結果になることがあります。 衝突はふたり以上の開発者があるファイルの同じような行を変更したときにおこります。 Subversionはあなたのプロジェクトの内容や意味についてはなにも知らないので、衝突を解消する のは開発者自身にまかせます。衝突が報告された場合はいつでも、注意してそのファイルを 開き、 <<<<<<<で始まっている行を検索してください。 衝突の領域はこんな感じでマークされています:

<<<<<<< filename
    your changes
=======
    code merged from repository
>>>>>>> revision

さらに、衝突のあったファイルごとにSubversionは三つの追加のファイルを そのディレクトリに書き込みます:

filename.*.mine

このファイルは作業コピーを更新する前に、自分の作業コピーにあった内容そのものを しめすファイルです。つまり、衝突マーカは含まれていません。このファイルは 自分の最後の修正時点のファイルそのものです。

filename.*.rOLDREV

これは作業コピーを更新する前に BASE リビジョンにあったファイルです。つまり、 最後の編集をする前にチェックアウトした時点のファイルの内容です。

filename.*.rNEWREV

これは、作業コピーを更新したときに、自分のSubversionクライアントがサーバから 受け取ったファイルです。このファイルは、リポジトリの、HEADリビジョンのものに 対応しています。

ここで * はSubversionが選んだでたらめな数を示しています。 OLDREV は、自分の.svnディレクトリ中のファイルのリビジョン番号で、NEWREV はリポジトリのHEADのりビジョン番号です。

あなたはコードがどうあるべきかを決定し、必要な修正を加え、コンテキストメニューから "Resolve"コマンドを実行し、さいごにリポジトリに自分の修正をコミットします。 もし衝突を解消(resolve)しなければSubversionはあなたの変更をコミットすることを許しません。

新しいファイルやディレクトリの追加

開発中に新しいファイルやディレクトリを追加した場合、ソース管理に対してもそれを追加 しなくてはなりません。ファイルやディレクトリを選択し、コンテキストメニューから"Add"(追加) コマンドを選択してください。

ソース管理にたいしてファイルやディレクトリを追加した後では、ファイルは"修正"の オーバーレイアイコンになり、他の開発者に利用できるようにするにはまず作業コピーを コミットする必要があることを示します。ファイルやディレクトリの追加はリポジトリには 影響を与えません!

ディレクトリを追加するとTortoiseSVN は自動的にそのディレクトリにあるすべてのファイルを 再帰的に追加します。それで、そのディレクトリに一時ファイルやコンパイラが生成した中間 ファイルがないことを注意深く確認してください。

作業コピーの外にあるファイルを作業コピーに追加したい場合は、そのようなファイルを 選択し、右ドラッグして作業コピーまでもってきてください。右マウスボタンを離すと ポップアップウィンドウが表示されるので、"add files to Subversion"(Subversionへの ファイルの追加)を選ぶことができます。するとそのファイルは作業コピーにコピーされ、 同時にバージョン管理システムに追加されます。

ファイルの削除、名称変更、移動

SubversionはCVSとは違い、ファイルの名称変更や移動を認めています。そのため TortoiseSVNサブメニューにもそのようなメニュー項目があります。

作業コピー内部でのファイルの移動は、TortoiseSVNのサブメニューを使ってもいいですし、 ドラッグ&ドロップハンドラを使うこともできます:

  1. 移動したいファイルを選択します
  2. それを右ドラッグして作業コピー内の新しい場所に移動します
  3. 右マウスボタンを離します
  4. ポップアップメニューで、"move files in Subversion to here"( Subversion のファイルをここに移動)を選択します

ファイル/ディレクトリの情報の取得/設定

ときどき、単なるアイコンオーバーレイ情報以上のより詳しい情報をファイルや ディレクトリについてほしいことがあります。Subversionが提供するすべての 情報を、エクスプローラの属性ダイアログで取得することができます。ファイルや ディレクトリを選択し、コンテキストメニューで"properties"を選択してください(注意: これはエクスプローラが提供する普通のプロパティーメニューであって、TortoiseSVN のサブメニューではありません)。属性ダイアログボックスで、Subversionの 制御下にあるファイルについては、TortoiseSVNは新しい属性ページを追加して表示します。

Properties

Subversionのページでは、選択したファイルやディレクトリについての関連情報を見ることが できます。さらに、Subversionプロパティーの読み書きをすることもできます。

選択したアイテムのログエントリーを見たい場合は単に、"Show Log..." を押せば ログダイアログが表示されます。

Log Dialog

特定のログメッセージを表示したい場合は、リスト中の対応するエントリーを選択 してください。もし自分の作業コピーと特定のリビジョンとの間の変更を見たい場合は リスト中でコンテキストメニューを使ってください。このコマンドはファイルの特定の リビジョンを受け取り、外部diffプログラムを実行することで差分を表示します。 デフォルトでは、TortoiseSVNはWinDiffのコピーを探しにいきます(これは Windows SDKに付属しているものです)しかし、TortoiseSVNの設定機能を使って 好きなGUIのdiffプログラムを設定することもできます。

Diff Context Menu

変更の取り消し

もし、最後の更新後にファイルにした変更のすべてを取り消したい場合は、 ファイルを選択し、右クリックでコンテキストメニューを表示してからTortoiseSVNの サブメニューで"Revert"コマンドを選択します。本当にそうしたいのかどうかを よく確認してください。すべての変更が失われてしまいます!

削除したファイルを戻したい時にも同じ方法を使ってください

タグ

Subversionは CVSのようにタグづけにたいする特別のコマンドを持っていません。 ある特定のリビジョンをマークする必要がある場合(たとえばリリースバージョン のようなもの)、なにもせずに、その名前に対応したリビジョン番号のリストをひかえて おいても良いですし、Subversionの安いコピーを使うこともできます。安い コピーはリンクの考え方によく似ていて、実際のコピーはせずに、特定のファイル/ リビジョンにたいするリンクを作ります。

もし推奨される形のディレクトリ構造の形でプロジェクトをインポートした場合、 追加のような感じでタグづけするかも知れません:

作業コピーの親フォルダを選択し、コンテキストメニューの"Branch/Tag..."コマンド を選択してください。ダイアログではタグのディレクトリ部分のURLを入力してください つまり、/trunk/ のかわりに、/tags/tagname とし、tagname の部分を実際には "release_v1.1"のようにします。

ブランチ

バージョン管理システムのひとつの機能に、変更を別の開発ラインに分離する能力が あります。このラインはブランチとして知られています。ブランチは普通、 コンパイラエラーやバグなどによって開発の主系を乱すことなしに新しい機能を試してみる のに利用されます。ブランチ上の新しい機能が十分におちついたら、ブランチは主系に マージされ、書き戻されます。

TortoiseSVNでブランチを作るには、親フォルダを選択してからTortoiseSVNサブメニュー で"Branch/Tag..."を選択します。Subversionではブランチもタグもまったく同様に扱われる ので(両者とも、簡単なコピーとして実装されています)ダイアログはタグ付けのものと 同じものになります。

Branch Dialog

今回は、タグフォルダにコピーを作るかわりに、/branches/の内部に作ります。唯一の 違いは、タグの場合は作成以降に修正をしてはいけないということだけです。

これで、リポジトリ中に開発のソースツリーの別のコピーを手にいれることができました。 (しかし、それほど大きなディスク容量は消費しません - それが'安いコピー'という意味 です) これを使って主系とは独立した作業ができます。しかし新しいブランチはいま リポジトリ中に現れたものです。そのブランチで作業するにはまず自分の作業コピーを 新しくできたブランチに切り替えなくてはなりません。もう一度プロジェクトの親 フォルダを選択して、コンテキストメニューから"Switch..."コマンドを選択します。

Switch Dialog

ここで、いま作ったばかりのブランチのURLを入力します。チェックボックスの "newest revision" (最新のリビジョン)はチェックしたままにしておいてください。 OKを押せば、これであなたの作業コピーは新しいブランチに切り替わりました。 もし作業コピーに変更を加えコミットすれば、すべての変更はブランチに対して おこり、主系にはおこりません。

ブランチを主系にマージして戻すこと

ブランチ上での変更に満足したら、開発の主系にそのような変更を戻したいと思うかも 知れません。あるブランチの変更を別のブランチに戻すのはマージとして 知られています。そのようなマージをするには、プロジェクトの親フォルダを選択し TortoiseSVNサブメニューで"Merge..."コマンドを選択してください。

Merge Dialog

主系のURLを入力し、OKを押します。マージしている途中、衝突がおこるかも知れません。 このような場合にどうすればよいかについては、"衝突の解消"の章を見てください。 すべての衝突を解消すれば、マージされたファイルを主系にコミットすることができます。