このドキュメントは通常のTortoiseSVNクライアントの利用方法について 説明したものです。これはバージョン管理システムについての導入ではありませんし、 SVNについての導入でもありません。自分が何をしたいか大体わかっている人が戻って くる場所なのであって、あることをどのようにやるかを完全に説明するものではありません。
すでにあなたがTortoiseSVNをインストールしていることが前提となっています。
もしサブバージョンについて知らないのなら、"Subversion: 公式ガイド" をまず読みましょう。
SVNドキュメントや、TortoiseSVNもそうですが、使われる用語の意味はほかの ソースリポジトリシステムとは違っているかも知れません。混乱をさけるため、一番基本的な 用語の短いリストを用意しました。ドキュメントの残りの部分を読む前に、このような単語に なじんでおいてください。
もしローカルリポジトリを作りたいわけではなく、サーバベースのリポジトリを使いたい 場合は、この章は飛ばしてもかまいません。
TortoiseSVNを使えば、ローカルリポジトリはとても簡単に作れます:
ローカルリポジトリにアクセスするには、そのフォルダのパスが必要になります。Subversionは すべてのリポジトリパスを、"file:///C/SVNRepository/"のようなものであると 仮定することに注意してください。
リポジトリに自分のプロジェクトをインポートする前に、以下のことをしてください:
さて、ウィンドウズエクスプローラのディレクトリ構造の親フォルダを選択して、右クリック し、コンテキストメニューを表示してください。"Import..." コマンドを選択してください。 ダイアログボックスが表示されます:
このダイアログで、自分のプロジェクトをインポートしたいリポジトリの場所を示すURLを入力する 必要があります。ローカルリポジトリの場所はURLの形式で入力しなくてはならないことに注意して ください。
モジュール名称は、プロジェクトの名前でも良いですし、自分の好きな名前にしてもかまいません。 普通はコンテキストメニューを表示するために選択したディレクトリの名前を使います。(デフォルト として表示されます)。
インポートメッセージはログメッセージとして利用されます。普通は単にプロジェクトを開始する だけなので、デフォルトの "initial import" が TortoiseSVN によって表示されます。
OKボタンを押せば、TortoiseSVN はリポジトリ中に、すべてのファイルを含む完全なディレクトリツリー をインポートします。これは、まだバージョン管理下にあるプロジェクトのコピーを作るものではない ことに注意してください。バージョン管理された作業コピーを手に入れるには、いまインポートしたばかり のバージョンをチェックアウトする必要があります。
作業コピーを手にいれるには、リポジトリから作業コピーをチェックアウトしなくては なりません。
ウィンドウズエクスプローラで作業コピーをおこうと思っているディレクトリを選択してください。 右クリックしてコンテキストメニューを表示し、"Checkout..." コマンドを選択するとダイアログ ボックスが表示されます:
もしモジュール名を入力すれば、その名前のディレクトリが作成されます。そのフィールドを 空のままにしておけば、ファイルはエクスプローラで選択したフォルダ中に直接保存されます。
ディレクトリツリー中の"trunk"の部分のみをチェックアウトすることを勧めます。 URL中のディレクトリツリーの親のパスを指定すると、自分のハードディスクがあふれて しまうかも知れません。プロジェクト中のすべてのブランチとタグもコピーされてしまうから です!
Subversionのリポジトリから作業コピーをチェックアウトすると、ウィンドウズエクスプローラ 中のファイルのアイコンが変化するのがわかります。TortoiseSVNはオーバーレイアイコンと 呼ばれる、もとのアイコンに重なって表示するようなアイコンをそれぞれのファイルに付け加えます。 それぞれのファイルの、Subversion管理下での状態によって、オーバーレイアイコンは異なり ます。チェックアウトしたばかりの新鮮な作業コピーは、緑のチェックのついたオーバーレイ が表示されます。それはSubversion状態が"正常"であることを意味します。編集を始めると すぐに、ファイルの状態は"修正"にかわり、オーバーレイアイコンはびっくりマークに変化します。 これにより、最後に作業コピーを更新してから、どのファイルを修正したか、またコミットが 必要であるか、が簡単にわかります。更新処理中に"衝突"がおきた場合は、アイコンは黄色の びっくりマークに変化します。
フォルダアイコンもオーバーレイアイコンがつきます。デフォルトでは、フォルダ自身の 状態が表現されます。しかし、設定を変えると、(コンテキストメニューの Setting... でやります)フォルダの状態は再帰的に表示されるようになります。この処理はフォルダ のオーバーレイ表示に時間がかかるようになるので、遅いマシン上ではおすすめできません。 私は (PIII, 700MHz, 512MB RAM) のスペックのマシン上でこの設定を有効にしています が、とくに問題はないようです。この設定では、それぞれのフォルダは、その配下にある すべてのファイルの状態を表現するようになります。"衝突" は "修正" よりも強く、 "修正" は、"正常" よりも強いという約束で状態表示されます。そのため、そのフォルダ 中に、衝突、あるいは修正されたファイルがあるかどうかを簡単に知ることができます。
TortoiseCVS(CVSのシェル拡張です) とは違い、バージョン化されていないファイルには オーバーレイアイコンはつきません。
ときどきほかのユーザがした変更を自分の作業コピーに取り込みたいことがあります。 このようなサーバからの変更を自分の作業コピーに取り込むことを更新と いいます。更新はひとつのファイルに対しても、選択した複数のファイルに対しても、 また、再帰的なディレクトリ構造全体に対しても実行することができます。 更新するには、更新したいとおもうファイルまたはディレクトリを選択し、右クリック してTortoiseSVN サブメニューから"Update"を選んでください。ウィンドウがぽっ゜分アップ して、更新処理中の様子を表示します。
ほかの人の変更は自分のファイルにマージされますが、自分自身がした変更部分については 同じファイル中に保存されます。リポジトリは更新処理によっては何も影響を受けません。
更新中に衝突の報告を受けた場合には、"衝突の解消"の節を読んでください。
自分の作業コピーにした変更を送ることを、コミットといいます。しかし、コミットする 前に、まず更新すべきです。やり方については前の章を見てください。
作業コピーを更新し、衝突があった場合にはそれを解消すれば、自分の変更をコミットする 準備ができていることになります。コミットしたいファイルやフォルダを選択し、コンテキスト メニューから"Commit"を選んでください。ダイアログが表示され、コミット処理の経過を表示 します。
ときどき、リポジトリからのファイルで更新処理が衝突の結果になることがあります。 衝突はふたり以上の開発者があるファイルの同じような行を変更したときにおこります。 Subversionはあなたのプロジェクトの内容や意味についてはなにも知らないので、衝突を解消する のは開発者自身にまかせます。衝突が報告された場合はいつでも、注意してそのファイルを 開き、 <<<<<<<で始まっている行を検索してください。 衝突の領域はこんな感じでマークされています:
<<<<<<< filename
your changes
=======
code merged from repository
>>>>>>> revision
さらに、衝突のあったファイルごとにSubversionは三つの追加のファイルを そのディレクトリに書き込みます:
このファイルは作業コピーを更新する前に、自分の作業コピーにあった内容そのものを しめすファイルです。つまり、衝突マーカは含まれていません。このファイルは 自分の最後の修正時点のファイルそのものです。
これは作業コピーを更新する前に BASE リビジョンにあったファイルです。つまり、 最後の編集をする前にチェックアウトした時点のファイルの内容です。
これは、作業コピーを更新したときに、自分のSubversionクライアントがサーバから 受け取ったファイルです。このファイルは、リポジトリの、HEADリビジョンのものに 対応しています。
ここで * はSubversionが選んだでたらめな数を示しています。 OLDREV は、自分の.svnディレクトリ中のファイルのリビジョン番号で、NEWREV はリポジトリのHEADのりビジョン番号です。
あなたはコードがどうあるべきかを決定し、必要な修正を加え、コンテキストメニューから "Resolve"コマンドを実行し、さいごにリポジトリに自分の修正をコミットします。 もし衝突を解消(resolve)しなければSubversionはあなたの変更をコミットすることを許しません。
開発中に新しいファイルやディレクトリを追加した場合、ソース管理に対してもそれを追加 しなくてはなりません。ファイルやディレクトリを選択し、コンテキストメニューから"Add"(追加) コマンドを選択してください。
ソース管理にたいしてファイルやディレクトリを追加した後では、ファイルは"修正"の オーバーレイアイコンになり、他の開発者に利用できるようにするにはまず作業コピーを コミットする必要があることを示します。ファイルやディレクトリの追加はリポジトリには 影響を与えません!
ディレクトリを追加するとTortoiseSVN は自動的にそのディレクトリにあるすべてのファイルを 再帰的に追加します。それで、そのディレクトリに一時ファイルやコンパイラが生成した中間 ファイルがないことを注意深く確認してください。
作業コピーの外にあるファイルを作業コピーに追加したい場合は、そのようなファイルを 選択し、右ドラッグして作業コピーまでもってきてください。右マウスボタンを離すと ポップアップウィンドウが表示されるので、"add files to Subversion"(Subversionへの ファイルの追加)を選ぶことができます。するとそのファイルは作業コピーにコピーされ、 同時にバージョン管理システムに追加されます。
SubversionはCVSとは違い、ファイルの名称変更や移動を認めています。そのため TortoiseSVNサブメニューにもそのようなメニュー項目があります。
作業コピー内部でのファイルの移動は、TortoiseSVNのサブメニューを使ってもいいですし、 ドラッグ&ドロップハンドラを使うこともできます:
ときどき、単なるアイコンオーバーレイ情報以上のより詳しい情報をファイルや ディレクトリについてほしいことがあります。Subversionが提供するすべての 情報を、エクスプローラの属性ダイアログで取得することができます。ファイルや ディレクトリを選択し、コンテキストメニューで"properties"を選択してください(注意: これはエクスプローラが提供する普通のプロパティーメニューであって、TortoiseSVN のサブメニューではありません)。属性ダイアログボックスで、Subversionの 制御下にあるファイルについては、TortoiseSVNは新しい属性ページを追加して表示します。
Subversionのページでは、選択したファイルやディレクトリについての関連情報を見ることが できます。さらに、Subversionプロパティーの読み書きをすることもできます。
選択したアイテムのログエントリーを見たい場合は単に、"Show Log..." を押せば ログダイアログが表示されます。
特定のログメッセージを表示したい場合は、リスト中の対応するエントリーを選択 してください。もし自分の作業コピーと特定のリビジョンとの間の変更を見たい場合は リスト中でコンテキストメニューを使ってください。このコマンドはファイルの特定の リビジョンを受け取り、外部diffプログラムを実行することで差分を表示します。 デフォルトでは、TortoiseSVNはWinDiffのコピーを探しにいきます(これは Windows SDKに付属しているものです)しかし、TortoiseSVNの設定機能を使って 好きなGUIのdiffプログラムを設定することもできます。
もし、最後の更新後にファイルにした変更のすべてを取り消したい場合は、 ファイルを選択し、右クリックでコンテキストメニューを表示してからTortoiseSVNの サブメニューで"Revert"コマンドを選択します。本当にそうしたいのかどうかを よく確認してください。すべての変更が失われてしまいます!
削除したファイルを戻したい時にも同じ方法を使ってください
Subversionは CVSのようにタグづけにたいする特別のコマンドを持っていません。 ある特定のリビジョンをマークする必要がある場合(たとえばリリースバージョン のようなもの)、なにもせずに、その名前に対応したリビジョン番号のリストをひかえて おいても良いですし、Subversionの安いコピーを使うこともできます。安い コピーはリンクの考え方によく似ていて、実際のコピーはせずに、特定のファイル/ リビジョンにたいするリンクを作ります。
もし推奨される形のディレクトリ構造の形でプロジェクトをインポートした場合、 追加のような感じでタグづけするかも知れません:
作業コピーの親フォルダを選択し、コンテキストメニューの"Branch/Tag..."コマンド を選択してください。ダイアログではタグのディレクトリ部分のURLを入力してください つまり、/trunk/ のかわりに、/tags/tagname とし、tagname の部分を実際には "release_v1.1"のようにします。
バージョン管理システムのひとつの機能に、変更を別の開発ラインに分離する能力が あります。このラインはブランチとして知られています。ブランチは普通、 コンパイラエラーやバグなどによって開発の主系を乱すことなしに新しい機能を試してみる のに利用されます。ブランチ上の新しい機能が十分におちついたら、ブランチは主系に マージされ、書き戻されます。
TortoiseSVNでブランチを作るには、親フォルダを選択してからTortoiseSVNサブメニュー で"Branch/Tag..."を選択します。Subversionではブランチもタグもまったく同様に扱われる ので(両者とも、簡単なコピーとして実装されています)ダイアログはタグ付けのものと 同じものになります。
今回は、タグフォルダにコピーを作るかわりに、/branches/の内部に作ります。唯一の 違いは、タグの場合は作成以降に修正をしてはいけないということだけです。
これで、リポジトリ中に開発のソースツリーの別のコピーを手にいれることができました。 (しかし、それほど大きなディスク容量は消費しません - それが'安いコピー'という意味 です) これを使って主系とは独立した作業ができます。しかし新しいブランチはいま リポジトリ中に現れたものです。そのブランチで作業するにはまず自分の作業コピーを 新しくできたブランチに切り替えなくてはなりません。もう一度プロジェクトの親 フォルダを選択して、コンテキストメニューから"Switch..."コマンドを選択します。
ここで、いま作ったばかりのブランチのURLを入力します。チェックボックスの "newest revision" (最新のリビジョン)はチェックしたままにしておいてください。 OKを押せば、これであなたの作業コピーは新しいブランチに切り替わりました。 もし作業コピーに変更を加えコミットすれば、すべての変更はブランチに対して おこり、主系にはおこりません。
ブランチ上での変更に満足したら、開発の主系にそのような変更を戻したいと思うかも 知れません。あるブランチの変更を別のブランチに戻すのはマージとして 知られています。そのようなマージをするには、プロジェクトの親フォルダを選択し TortoiseSVNサブメニューで"Merge..."コマンドを選択してください。
主系のURLを入力し、OKを押します。マージしている途中、衝突がおこるかも知れません。 このような場合にどうすればよいかについては、"衝突の解消"の章を見てください。 すべての衝突を解消すれば、マージされたファイルを主系にコミットすることができます。