TortoiseSVN

Windows用Subversionクライアント

Version 1.14

Stefan Küng

Lübbe Onken

Simon Large

倉澤 望 (鍋太郎) (nabetaro @ caldron.jp)

翻訳 

藤本 理弘 ([email protected])

翻訳 

阿部 恒彦

翻訳 

2022/09/06 19:53:28 (r29447)


目次

序章
TortoiseSVNとは
TortoiseSVNの特徴
ライセンス
開発
TortoiseSVN の歴史
謝辞
このガイドの読み方
本書で使用している表現
1. さぁはじめましょう
TortoiseSVNのインストール
システム要件
インストール
バージョン管理の基本概念
試してみましょう
リポジトリの作成
プロジェクトのインポート
作業コピーのチェックアウト
ファイルの変更
ファイルの追加
プロジェクトの変更履歴を見る
変更を取り消す
さあ使ってみよう
2. バージョン管理の基本概念
リポジトリ
バージョン管理モデル
ファイル共有の問題
ロック・変更・アンロックモデル
コピー・変更・マージモデル
Subversionではどうしているのか
Subversionの動作
作業コピー
リポジトリ URL
リビジョン
作業コピーのリポジトリ追跡方法
まとめ
3. リポジトリ
リポジトリの作成
コマンドラインクライアントを使用したリポジトリの作成
TortoiseSVNを使用したリポジトリの作成
リポジトリへのローカルアクセス
ネットワークフォルダー上のリポジトリへのアクセス
リポジトリのレイアウト
リポジトリのバックアップ
サーバー側フックスクリプト
チェックアウトリンク
リポジトリへのアクセス
4. 日常の使用ガイド
機能概要
アイコンオーバーレイ
コンテキストメニュー
ドラッグ&ドロップ
共通のショートカット
認証
ウィンドウの最大化
リポジトリへのデータのインポート
インポート
その場でインポート
特殊なファイル
作業コピーのチェックアウト
チェックアウトの深さ
変更のリポジトリへのコミット
コミットダイアログ
変更リスト
ファイルの一部だけをコミットする
コミット一覧からの項目の除外
コミットログメッセージ
コミットの進行状況
他人の変更に伴う作業コピーの更新
競合の解決
ファイルの競合
プロパティの競合
ツリーの競合
ステータス情報の取得
アイコンオーバーレイ
詳細なステータス
ローカルとリモートの状態
差分の表示
変更リスト
延期
リビジョンログダイアログ
リビジョンログダイアログの起動
リビジョンログのアクション
追加情報の取得
ログメッセージの追加取得
現在の作業コピーのリビジョン
マージ追跡機能
ログメッセージや作者の変更
ログメッセージの絞り込み
統計情報
オフラインモード
表示の更新
差分の表示
ファイルの差分
改行コードと空白のオプション
フォルダーの比較
TortoiseIDiff を使用した画像の差分
Office ドキュメントの差分
外部差分・マージツール
新しいファイルやディレクトリの追加
ファイルやフォルダーのコピー・移動・名前の変更
ファイルやディレクトリの無視
無視リストでのパターンマッチ
削除、移動、名前変更
ファイルやフォルダーの削除
ファイルやフォルダーの移動
ファイル名の大文字・小文字が競合した場合の対処
ファイル名の変更の修復
バージョン管理外のファイルの削除
変更の取り消し
クリーンアップ
プロジェクト設定
Subversion のプロパティ
TortoiseSVN のプロジェクトプロパティ
プロパティエディター
外部項目
外部フォルダー
外部ファイル
ドラッグ&ドロップで外部参照を作成
ブランチ/タグの作成
ブランチ/タグの作成
ブランチやタグを作成するその他の方法
チェックアウトするか切り替えるか...
マージ
リビジョン範囲のマージ
2つの異なるツリーをマージする
マージオプション
マージ結果のレビュー
マージ追跡
マージ後に発生した競合の扱い
機能ブランチの保守
ロック
Subversion でロックがどのように働くか
ロックの取得
ロックの解除
ロック状態のチェック
ロックしていないファイルを読み込み専用にするには
ロックのフックスクリプト
パッチの作成及び適用
パッチファイルの作成
パッチファイルの適用
誰がその行を変更したか?
ファイルの注釈履歴
注釈履歴の差分
リポジトリブラウザー
リビジョングラフ
リビジョングラフのノード
表示の変更
グラフの使用
表示の更新
ツリーの剪定
Subversion 作業コピーをエクスポート
作業コピーをバージョン管理外へ
作業コピーの再配置
バグ追跡ツール/課題追跡システムとの統合
ログメッセージへの課題IDの付与
課題追跡システムからの情報取得
Web ベースのリポジトリビューアーとの統合
TortoiseSVN の設定
一般設定
リビジョングラフの設定
アイコンオーバレイ設定
ネットワーク設定
外部プログラムの設定
保存データの設定
ログキャッシュ
クライアント側フックスクリプト
TortoiseBlame の設定
TortoiseUDiff設定
TortoiseSVN の設定のエクスポート
高度な設定
最終ステップ
5. プロジェクトモニター
プロジェクトをモニターに追加
モニターダイアログ
主な操作
6. SubWCRev プログラム
SubWCRev コマンドライン
キーワード置換
キーワード例
COM インターフェイス
7. IBugtraqProvider インターフェイス
命名規則
IBugtraqProvider インターフェイス
IBugtraqProvider2 インターフェイス
A. よくある質問(FAQ)
B. こんなときは……
大量のファイルの同時移動・コピー
ログメッセージの入力の強制
サーバー上のフックスクリプト
プロジェクトプロパティ
リポジトリからの選択したファイルの更新
リポジトリのリビジョンのロールバック(取り消し)
リビジョンログダイアログの使用
マージダイアログの使用
svndumpfilter の使用
ファイルやフォルダーに対して 2 リビジョン間の比較
共通のサブプロジェクトを含める
svn:externals の使用
ネストした作業コピーの使用
相対位置の使用
プロジェクトをリポジトリに追加
リポジトリへのショートカットの作成
バージョン管理外のファイルの無視
作業コピーをバージョン管理外に
作業コピーの削除
C. 管理者向けの便利な小技
グループポリシーでの TortoiseSVN のデプロイ
更新チェックのリダイレクト
SVN_ASP_DOT_NET_HACK 環境変数の設定
コンテキストメニューエントリの無効化
D. TortoiseSVN の自動化
TortoiseSVNのコマンド
Tsvncmd URL ハンドラ
TortoiseIDiff コマンド
TortoiseUDiffコマンド
E. コマンドラインインターフェイスのクロスリファレンス
規約と基本規則
TortoiseSVNのコマンド
チェックアウト
更新
リビジョンの更新
コミット
差分
ログの表示
変更をチェック
リビジョングラフ
リポジトリブラウザー
競合の編集
解決済み
名前変更
削除
変更の取り消し
クリーンアップ
ロックの取得
ロックの解除
ブランチ・タグ
切り替え
マージ
エクスポート
再配置
ここにリポジトリを作成
追加
インポート
注釈履歴
無視リストに追加
パッチを作成
パッチの適用
F. 実装の詳細
アイコンオーバーレイ
G. 言語パックとスペルチェッカー
言語パック
スペルチェッカー
用語集
索引

図の一覧

1.1. バージョン管理外フォルダーの TortoiseSVN メニュー
1.2. インポートダイアログ
1.3. ファイル差分ビューアー
1.4. ログダイアログ
2.1. 典型的なクライアント/サーバーシステム
2.2. 回避したい問題
2.3. ロック・変更・アンロックモデル
2.4. コピー・変更・マージモデル
2.5. ...コピー・変更・マージモデル(の続き)
2.6. リポジトリのファイルシステム
2.7. リポジトリ
3.1. バージョン管理外フォルダーの TortoiseSVN メニュー
4.1. エクスプローラーのアイコンオーバーレイ表示
4.2. バージョン管理下のフォルダーのコンテキストメニュー
4.3. バージョン管理されたフォルダー内のショートカットに対するエクスプローラーのファイルメニュー
4.4. バージョン管理下のディレクトリに対する右ドラッグメニュー
4.5. 認証ダイアログ
4.6. インポートダイアログ
4.7. チェックアウトダイアログ
4.8. コミットダイアログ
4.9. コミットダイアログのスペルチェッカー
4.10. コミットの状況を表示している進行ダイアログ
4.11. 更新が完了したときの進行ダイアログ
4.12. エクスプローラーのアイコンオーバーレイ表示
4.13. エクスプローラーのプロパティページの Subversion タブ
4.14. 変更をチェック
4.15. 変更リストがあるコミットダイアログ
4.16. 延期ダイアログ
4.17. 延期の解除ダイアログ
4.18. リビジョンログダイアログ
4.19. リビジョンログダイアログの上部のリストのコンテキストメニュー
4.20. Code Collaborator 設定ダイアログ
4.21. 2つのリビジョンを選択した時の上部のリストのコンテキストメニュー
4.22. ログダイアログ下部の一覧でコンテキストメニューを表示したところ
4.23. ログダイアログ下部の一覧で複数ファイル選択時にコンテキストメニューを表示したところ
4.24. マージ追跡リビジョンを表示したログダイアログ
4.25. 「作者別コミット数」ヒストグラム
4.26. 「作者別コミット数」円グラフ
4.27. 「時期別コミット数」グラフ
4.28. オフライン移行ダイアログ
4.29. リビジョンの比較ダイアログ
4.30. 画像差分ビューアー
4.31. バージョン管理外のファイルでのエクスプローラーコンテキストメニュー
4.32. バージョン管理下のディレクトリに対する右ドラッグメニュー
4.33. バージョン管理外のファイルでのエクスプローラーコンテキストメニュー
4.34. バージョン管理下のファイルに対するエクスプローラーのコンテキストメニュー
4.35. 変更の取り消しダイアログ
4.36. クリーンアップダイアログ
4.37. Subversion のプロパティページ
4.38. プロパティの追加
4.39. フックスクリプトのプロパティダイアログ
4.40. bool型のユーザープロパティダイアログ
4.41. state型のユーザープロパティダイアログ
4.42. 1行型のユーザープロパティダイアログ
4.43. 複数行型のユーザープロパティダイアログ
4.44. svn:externals プロパティページ
4.45. svn:keywords プロパティページ
4.46. svn:eol-style プロパティページ
4.47. tsvn:bugtraq プロパティページ
4.48. ログメッセージサイズのプロパティページ
4.49. 言語プロパティページ
4.50. svn:mime-type プロパティページ
4.51. svn:needs-lock プロパティページ
4.52. svn:executable プロパティページ
4.53. プロパティダイアログのマージログメッセージのテンプレート設定
4.54. ブランチ/タグの作成ダイアログ
4.55. 切り替えダイアログ
4.56. マージウィザード - リビジョン範囲の選択
4.57. マージウィザード - ツリーのマージ
4.58. 競合の解決ダイアログ
4.59. ツリー競合の解決ダイアログ
4.60. すべてマージダイアログ
4.61. ロックダイアログ
4.62. 変更をチェックダイアログ
4.63. パッチ作成ダイアログ
4.64. 注釈履歴ダイアログ
4.65. TortoiseBlame
4.66. リポジトリブラウザー
4.67. リビジョングラフ
4.68. URL からエクスポートダイアログ
4.69. 再配置ダイアログ
4.70. 課題追跡システムのプロパティダイアログ
4.71. 課題追跡システムクエリダイアログの例
4.72. 設定ダイアログの「全般」ページ
4.73. 設定ダイアログの「コンテキストメニュー」ページ
4.74. 設定ダイアログの「ダイアログ1」ページ
4.75. 設定ダイアログの「ダイアログ2」ページ
4.76. 設定ダイアログの「ダイアログ3」ページ
4.77. 設定ダイアログの「色」ページ
4.78. 設定ダイアログの「リビジョングラフ」ページ
4.79. 設定ダイアログのリビジョングラフの「色」ページ
4.80. 設定ダイアログの「アイコンオーバーレイ」ページ
4.81. 設定ダイアログの「アイコンセット」ページ
4.82. 設定ダイアログの「オーバーレイハンドラー」ページ
4.83. 設定ダイアログの「ネットワーク」ページ
4.84. 設定ダイアログの「差分ビューアー」ページ
4.85. 設定ダイアログの「差分/マージの高度な設定」ダイアログ
4.86. 設定ダイアログの「保存されたデータ」ページ
4.87. 設定ダイアログの「ログキャッシュ」ページ
4.88. 設定ダイアログのログキャッシュ統計
4.89. 設定ダイアログの「フックスクリプト」ページ
4.90. 設定ダイアログのフックスクリプトの設定
4.91. 設定ダイアログの「課題追跡システムとの統合」ページ
4.92. 設定ダイアログの「TortoiseBlame」ページ
4.93. 設定ダイアログの「TortoiseUDiff」ページ
4.94. 設定ダイアログの「同期」ページ
4.95. タスクバーでのデフォルトのグループ化
4.96. タスクバーでのリポジトリ毎のグループ化
4.97. タスクバーでのリポジトリ毎のグループ化
4.98. タスクバーでのグループ化にリポジトリのカラーオーバーレイが付いた様子
5.1. プロジェクトモニターのプロジェクトの編集ダイアログ
5.2. プロジェクトモニターのメインダイアログ
B.1. The TortoiseSVN right drag context menu for moving files
C.1. アップグレードの通知を表示するコミットダイアログ

表の一覧

2.1. リポジトリにアクセスするURL
4.1. ピン留めされたリビジョン
6.1. 使用できるコマンドラインスイッチ一覧
6.2. SubWCRevのエラーコードの一覧
6.3. 利用可能なキーワードの一覧
6.4. COM オートメーションのサポート
C.1. メニューエントリとその値
D.1. 使用できるコマンドとオプションの一覧
D.2. 使用できるオプションの一覧
D.3. 使用できるオプションの一覧

序章

バージョン管理は、情報の変更を管理する技術です。これは、たとえばソフトウェアのあちこちに変更を加えたり、その翌日にはその変更の一部を取り消したりチェックしたりすることに時間を費やしてきたようなプログラマたちにとって、長い間重要な技でした。そのような開発者たちが同時に働くチームを想像してみてください。恐らく同じファイルに同時に変更を加える場面があるでしょう。なぜ、このような潜在的な混沌を管理する良いシステムが求められているかがわかるでしょう。

TortoiseSVNとは

TortoiseSVN は、 Apache™ Subversion® バージョン管理システムの無料でオープンソースの Windows 版クライアントです。 TortoiseSVN はファイルやディレクトリを時間を超えて管理します。ファイルは リポジトリ に集中的に格納されます。リポジトリは普通のファイルサーバーとよく似ていますが、ファイルを古いバージョンに戻したり、いつ、だれがデータに変更を加えたのかを履歴から確認したりすることができます。このため、 Subversion などのバージョン管理システムは、一般的にタイムマシンのようなものと考えられています。

バージョン管理システムによっては、ソフトウェア構成管理(SCM)システムを兼ねている場合もあります。このようなシステムはソースコードのツリーを管理するために最適化して設計されており、ソフトウェア開発に特化した多くの機能を持っています。例えば、プログラム言語をネイティブに理解したり、ソフトウェアを構築するのに必要なツールが付属していたりといった具合にです。しかし、Subversionはそういったシステムではありません。あらゆるファイルの集合(ソースコードを含む)を管理する汎用的なシステムです。

TortoiseSVNの特徴

TortoiseSVNはSubversionクライアントとして、どのような点が優れているのでしょうか?主な特徴は次の通りです。

シェル統合

TortoiseSVNはWindowsのシェル(すなわちエクスプローラー)に統合されています。つまり、すでに使い慣れた方法で操作することができます。そして、バージョン管理の機能が必要になるたびに違うアプリケーションに切り替える必要はありません。

Windowsのエクスプローラーに限らず、TortoiseSVNのコンテキストメニューは、他のファイルマネージャや、「ファイルを開く」ダイアログのような一般のWindowsアプリケーションで共通に使用されているダイアログでも使用することができます。しかし、TortoiseSVNはWindowsエクスプローラーの拡張機能として開発されていることを認識しておいてください。つまり、他のアプリケーションの中では、アイコンオーバーレイが表示されないといったように、統合が不完全になることもあります。

アイコンオーバレイ

バージョン管理されているファイルやフォルダーの状態は、小さなオーバレイアイコンによって表されます。これで作業コピーの状態をすぐに確認することができます。

グラフィカルユーザーインターフェイス(GUI)

あるファイルやフォルダーの変更を一覧する際、リビジョンをクリックすると、それをコミットした際のコメントを読むことができます。また、変更されたファイルの一覧からファイルをダブルクリックするだけで、すぐに変更内容を確認することができます。

コミットダイアログでは、コミットに含まれる可能性のある項目の一覧が表示されます。各項目と共に表示されるチェックボックスで、コミットに含めたいファイルを選択することができます。バージョン管理されていないファイルも一覧に表示されるので、新しいファイルの追加し忘れを防ぐことができます。

Subversionコマンドへの容易なアクセス

エクスプローラーのコンテキストメニューから、すべてのSubversionコマンドを利用できます。TortoiseSVNは独自のサブメニューにそのコマンドを追加します。

TortoiseSVNはSubversionのクライアントであるため、Subversion自体が持つ特徴も紹介します。

ディレクトリのバージョン管理

CVSは個々のファイルの履歴しか追跡できませんが、Subversionでは、時系列でディレクトリツリー全体に行われた変更を追跡する仮想的なバージョン管理ファイルシステムを実装しています。ファイルおよびディレクトリがバージョン管理されます。そのため、クライアント側からファイルやディレクトリを操作するmove(移動)やcopy(コピー)コマンドが実装されています。

不可分コミット

コミットは完全にリポジトリに格納されるか、全くされないかのどちらかになります。これにより、開発者は論理的に一貫した変更を作成し、コミットすることができます。

バージョン管理されたメタデータ

すべてのファイルやディレクトリには、不可視のプロパティが添付されています。任意のキーと値の組み合わせを作成し格納することができます。プロパティはファイルの内容と同様に、時系列でバージョン管理されます。

ネットワークレイヤーの選択

Subversionはリポジトリへのアクセスが抽象化されており、新しいネットワークメカニズムを容易に実装できるようになっています。Subversionの先進的なネットワークサーバーは、Apacheウェブサーバーのモジュールになっており、HTTPの一種であるWebDAV/DeltaVで通信します。これは、Subversionに安定性や相互運用性の面で大きな利点を与え、認証、認可、データ圧縮、リポジトリ閲覧のような、様々な重要な機能を使用することができます。もっと小さいスタンドアロンのSubversionサーバーもあります。このサーバーはsshで簡単にトンネル通信ができる独自プロトコルで通信します。

一貫したデータの取り扱い

Subversionはテキストファイル(人が読める形式)でもバイナリファイル(人が読めない形式)でも、ファイルの差分をバイナリ差分アルゴリズムを用いて表現します。どちらのタイプのファイルでも、リポジトリに圧縮して格納されます。また、差分はネットワークを使って双方向に通信されます。

効率的なブランチやタグの作成

ブランチやタグを作成するときのコストは、プロジェクトの規模に比例しません。Subversionはブランチやタグを作成するのに、ハードリンクによく似た単純なプロジェクトのコピーで行います。そのため、この操作はとても小さいコストであり、一定の時間で完了し、リポジトリのほんの小さな領域しか使用しません。

ライセンス

TortoiseSVNは、 GNU General Public License (GPL) に基づいて開発されているオープンソース・プロジェクトです。個人用・商用にかかわらず、何台のPCにも、無料でダウンロードでき無料で使用できます。

ほとんどの人はただインストーラーをダウンロードしますが、このプログラムのソースコードへの完全な読み取りアクセスもできます。こちらのリンク https://osdn.net/projects/tortoisesvn/scm/svn/ から見ることができます。現在の開発ラインは /trunk/ 以下にあり、リリースされたバージョンは /tags/ 以下にあります。

開発

TortoiseSVN や Subversion は、開発者のコミュニティによって開発されています。世界中の様々な国の出身者が、偉大なソフトウェアを開発するために協力しています。

TortoiseSVN の歴史

2002年、Tim KempはSubversionが大変すぐれたバージョン管理システムであると知りましたが、使いやすいGUIクライアントがありませんでした。Windowsのシェルに統合するSubversionクライアントという発想は、TortoiseCVSという良く似たCVSクライアントにヒントを得ました。彼はTortoiseCVSのソースコードを解析し、それをTortoiseSVNの元にしました。彼はそれからプロジェクトを開始し、tortoisesvn.orgのドメインを登録し、ソースコードをオンラインに公開しました。

同じ頃、Stefan Küngはフリーの良いバージョン管理システムを探していて、SubversionとTortoiseSVNに出会いました。TortoiseSVNはまだ開発中でしたので、彼もこのプロジェクトに参加しました。彼はすぐに、既存のコードの大部分を書き直して、コマンドや機能を追加し始め、当初からのコードが全く残らないほどになりました。

Subversionが安定するにつれて、SubversionクライアントとしてTortoiseSVNを使用するユーザーが増加していきました。ユーザー層は急速に拡大しました(そして日々拡大しています)。Lübbe OnkenはTortoiseSVNのロゴとアイコンをデザインしました。また彼は、ウェブサイトと翻訳の管理をしています。

時間が経つにつれて、他のバージョン管理システムもそれぞれの Tortoise クライアントを持つようになり、エクスプローラーのアイコンオーバーレイで問題を起こすようになりました。オーバーレイの数は上限があり、 Tortoise クライアント1つでも容易に上限に達してしまいます。 Stefan Küng が TortoiseOverlays コンポーネントを実装し、すべての Tortoise クライアントで同じアイコンオーバーレイが使えるようになりました。現在はすべての Tortoise クライアントがオープンソースであり、 Tortoise 以外のクライアントもコンポーネントを共有できるものがあります。

謝辞

Tim Kemp

TortoiseSVNプロジェクトを始めたことに

Stefan Küng

TortoiseSVNが現在の姿になるまでに彼が費やした努力とリーダーシップに

Lübbe Onken

美しいアイコン、ロゴ、バグ取り、翻訳と翻訳管理に

Simon Large

マニュアルを管理してくれたことに

Stefan Fuhrmann

ログキャッシュとリビジョングラフの開発に

The Subversion Book

Subversion のすばらしい入門書に(第2章はここからのコピー)

The Tigris Style project

本書で再利用されているスタイルに

われらが協力者達

パッチや、バグレポート、新しいアイデア、メーリングリストでの質疑応答などに

われらが寄進者達

送ってくれた音楽で楽しんだ時間に

このガイドの読み方

本書は、データ管理に Subversion を使用しようとしているコンピューターに詳しい人で、コマンドラインのクライアントよりも GUI のクライアントを使用したい人向けに書かれています。 TortoiseSVN は Windows のシェル拡張ですので、ユーザーは Windows エクスプローラーに慣れており、使い方を知っていることを前提とします。

序章ではTortoiseSVNとは何かを説明します。また、TortoiseSVNプロジェクトやそこで作業している人々のコミュニティ、使用や頒布にあたってのライセンス条件を簡単に説明しています。

1章さぁはじめましょうでは、TortoiseSVNをPCにインストールし、さっそく使い始める方法を説明しています。

2章バージョン管理の基本概念では、TortoiseSVNの基盤となるSubversionバージョン管理システムを簡単に解説しています。これはSubversionプロジェクトのドキュメントを借用したもので、バージョン管理の実現方法の差異やSubversionがどのように動作するのかを説明しています。

3章リポジトリ では、単独の PC で Subversion や TortoiseSVN を試すのに便利なように、ローカルリポジトリのセットアップ方法を説明しています。また、サーバー上のリポジトリを使用する場合でも関係するリポジトリの管理についても少し解説します。

4章日常の使用ガイドはもっとも重要な章で、TortoiseSVNの主要な機能すべてとその使い方を説明しています。チュートリアルの形を採って、作業コピーのチェックアウトから始め、変更、コミット、等を行います。それからさらに高度な話題に進みます。

5章プロジェクトモニター は、あなたがチームの他のメンバーからの重要なコミットを見逃さないように Subversion プロジェクトをモニターする方法を説明しています。

6章SubWCRev プログラムはTortoiseSVNに含まれる独立したプログラムです。作業コピーからの情報を展開し、ファイルに書き出すことができます。プロジェクトにビルド情報を含めるために使用することができます。

付録B こんなときは……では、他の部分で明示されていない作業を行う上で、よく発生する質問に対する答えを示しています。

付録D TortoiseSVN の自動化では、TortoiseSVNのGUIダイアログをコマンドラインから呼び出す方法を示します。ユーザーの操作が必要なスクリプトを作成するのに便利です。

付録E コマンドラインインターフェイスのクロスリファレンスでは、TortoiseSVNのコマンドとSubversionのコマンドラインクライアントsvn.exeの同等の機能との関連を示しています。

本書で使用している表現

ドキュメントが読みやすくなるよう、TortoiseSVNの画面やメニューの名前はすべて、異なるフォントになるようマークアップを施しました。例えばログダイアログといった具合です。

メニューの選択は矢印で表しました。TortoiseSVNログを表示は、コンテキストメニューのTortoiseSVNからログを表示を選択するということです。

TortoiseSVNダイアログの中で現れるローカルコンテキストメニューは、コンテキストメニュー名前を付けて保存...のように表します。

ユーザーインターフェイスのボタンは、「続けるにはOKを押してください」というように表します。

ユーザーアクションは太字で示します。Alt+Aは、キーボードのAltキーを押したままでAキーを押します。右ドラッグは、マウスの右ボタンを押したままで項目を新しい位置にドラッグします。

システムからの出力とキーボード入力は、このように異なるフォントで表します。

重要

重要な注釈はアイコンで印をつけています。

ヒント

人生を楽にする豆知識です。

注意

自分が何をしているか注意すべきところです。

警告

最大限の注意を払う必要があるところです。この警告を無視すると、データが破損したり、その他のトラブルが起きたりする可能性があります。

第1章 さぁはじめましょう

この章は、TortoiseSVNを初めて試す方を対象にしたものです。TortoiseSVNのインストールの仕方や、ローカルのリポジトリをセットアップする方法、よく使われる一連の操作を説明します。

TortoiseSVNのインストール

システム要件

TortoiseSVN は Windows Vista 以上で動作し、32ビット版と64ビット版のどちらでも使用できます。64ビット版 Windows 用のインストーラーは32ビットの拡張部分も含みます。つまり、32ビットアプリケーションで TortoiseSVN のコンテキストメニューやオーバーレイを使用するために、別途32ビット版をインストールする必要はありません。

Windows 98、Windows ME、Windows NT4に対するサポートはバージョン1.2.0以前で終了し、Windows 2000とXPのSP2までは1.7.0以前で終了しました。Windows XP SP3は1.9.0以前で終了しました。もしそれらが必要であれば、旧バージョンをダウンロードしてインストールすることができます。

インストール

TortoiseSVNはインストーラーを使用すると簡単にインストールできます。インストーラーのファイルをダブルクリックし、画面の指示に従ってください。後はインストーラーが面倒を見てくれます。最後にPCを再起動するのをお忘れなく。

重要

TortoiseSVNをインストールするには、Administrator権限が必要です。インストーラーは必要な場合、Administrator権限を確認してきます。

TortoiseSVN のユーザーインターフェイスを翻訳する言語パックが、たくさんの言語で提供されています。言語パックのインストール方法は、付録G 言語パックとスペルチェッカーを参照してください。

もしインストール中、またはインストール後に問題が発生した場合、https://tortoisesvn.net/faq.htmlでオンラインFAQを確認してください。

バージョン管理の基本概念

実際のファイルで事故を起こさないように、 Subversion の主要な動きと使われている用語を知っておくことは重要です。

リポジトリ

Subversionは、すべてのバージョン管理対象のファイルとその履歴を格納するデータベースを使用します。このデータベースをリポジトリと呼びます。一般に、リポジトリはSubversionのサーバープログラムが動作しているファイルサーバーに配置し、必要に応じて(TortoiseSVNのような)Subversionクライアントに内容を提供します。バックアップを1つしか取らないならば、すべてのデータの重要なマスターコピーであるリポジトリのバックアップを取ってください。

作業コピー

実際にどのような作業をするのかを紹介します。各開発者は自分のローカルのPCに、自分用の作業コピーを持ちます(サンドボックスと呼ばれることもあります)。リポジトリから最新バージョンを取り出し、他の誰にも影響せずに作業し、作業が完了したら変更をコミットしてリポジトリに書き戻します。

Subversion の作業コピーにはプロジェクトの履歴は含まれていませんが、リポジトリに存在している変更前のファイルのコピーとして維持されています。これにより、どのような変更を加えたのかを容易に確認することができます。

TortoiseSVN をスタートメニューから使用することはあまりありません。 TortoiseSVN はシェル拡張ですので、まず Windows エクスプローラーを起動します。エクスプローラーでフォルダを右クリックすると、このようなコンテキストメニューにいくつかの新しい項目が表示されます。 

図1.1 バージョン管理外フォルダーの TortoiseSVN メニュー

バージョン管理外フォルダーの TortoiseSVN メニュー


試してみましょう

ここでは、小さなテスト用のリポジトリを使用して、よく使用される機能をいくつか試してみます。当然、これは単なるクイックスタートガイドなので、全機能を説明するわけではありません。いったん試してみた後は、このユーザーズガイドの残り部分を時間をかけて読んでいただければ、もっと詳しいことが分かります。また、正しい Subversion サーバーの設定に関する知識も、そちらで説明しています。

リポジトリの作成

現実のプロジェクトでは、どこか安全なサーバーにリポジトリを構築し、それを制御するために Subversion サーバーをインストールします。今回は練習なのでサーバーを使用せず、 Subversion のローカルリポジトリ機能を使用し、リポジトリをローカルのハードディスクの中に構築して直接アクセスするようにします。

最初にPC上で新しい空のディレクトリを作成します。どこに作成しても良いのですが、練習として C:\svn_repos に作成したとします。そして、すぐに作成したフォルダーを右クリックし、コンテキストメニューから TortoiseSVNここにリポジトリを作成... を実行します。こうすれば、リポジトリがフォルダー内に作成され、使用可能な状態になります。また、 フォルダー構造を作成 ボタンをクリックすれば、デフォルトの内部フォルダー構造を作成することができます。

重要

ローカルリポジトリ機能は、テストや評価にはとても便利です。しかし、1人の開発者が1台のPCのみを使って作業をして場合を除いて、 Subversion 専用のサーバーを設置すべきです。小さい会社では、サーバーのセットアップ作業を嫌って、ネットワークフォルダー上のリポジトリをアクセスするようにしたがるかもしれません。しかし、それはやめてください。データを失うことになります。なぜこの方法が良くないのか、またサーバーをセットアップする方法については、「ネットワークフォルダー上のリポジトリへのアクセス」をお読みください。

プロジェクトのインポート

これでリポジトリができましたが、その中身はまだ空です。 C:\Projects\Widget1 に追加したいファイルのセットがあるとします。エクスプローラーで Widget1 フォルダーに移動し、右クリックします。そして、 TortoiseSVNインポート... を実行すると、次のインポートダイアログが表示されます。

図1.2 インポートダイアログ

インポートダイアログ


Subversion のリポジトリは、インターネット上のどこのリポジトリでも指定できるようにURLで参照します。この場合は、私たちが持っているローカルリポジトリのURL、 file:///c:/svn_repos/trunk を指すようにする必要があります。そして、プロジェクト名 Widget1 を追加します。 file: の後に3つのスラッシュあることや、スラッシュの向きにも注意してください。

このダイアログのもう1つの重要な機能が、インポートメッセージ欄です。ここには何をしているのか説明するメッセージを入力することができます。プロジェクトの履歴を参照するとき、このコミットメッセージはどのような変更をなぜ行ったのかを知る有力なガイドになります。今回は簡単にWidget1プロジェクトをインポートとでも入力してください。OKボタンをクリックすると、フォルダーがリポジトリに登録されます。

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

これでプロジェクトがリポジトリに登録されましたので、次に日常の作業に使用する作業コピーを作成します。フォルダーをインポートしたとき、フォルダーが自動的に作業コピーになる訳ではないので注意してください。Subversionでは、新しい作業コピーを作ることをチェックアウトといいます。リポジトリのWidget1フォルダーを、PC上の開発用フォルダーC:\Projects\Widget1-Devにチェックアウトしてみましょう。フォルダーを作成し、次にそれを右クリックして、TortoiseSVNチェックアウト... を選択します。それからチェックアウト元のURLを、file:///c:/svn_repos/trunk/Widget1のような形式で入力し、OKをクリックします。これで開発用フォルダーに、リポジトリからファイルが読み込まれます。

重要

初期設定では、チェックアウトのメニュー項目はTortoiseSVNのサブメニューではなく、エクスプローラーのメニューの最上位にあります。サブメニューの外にあるTortoiseSVNのコマンドは、先頭がSVNで始まっており、SVN チェックアウト...となっています。

この作業コピーのファイルをエクスプローラーで見ると、右下に緑色のチェックが入っていることに気が付くと思います。これは、この作業コピーがリポジトリの中にあるファイルと同じ内容であることを示しています。

ファイルの変更

さて、 filename>Widget1-Dev

しかし何が変更されたのでしょうか?変更されたファイルの1つを右クリックし、 TortoiseSVN差分 を選択してみてください。 TortoiseSVN のファイル比較ツールが起動し、どの行が変更されたのかが厳密に表示されます。

図1.3 ファイル差分ビューアー

ファイル差分ビューアー


さて、変更の内容に問題がないようでしたら、リポジトリを更新しましょう。これを変更をコミットすると言います。 Widget1-Dev フォルダーを右クリックし、 TortoiseSVNコミット を選択してください。コミットダイアログには変更されたファイルが、チェックボックス付きで一覧表示されます。この中の一部のファイルのみをコミットすることもできますが、今回はすべてのファイルをコミットしましょう。メッセージ欄に何に関する変更なのかという説明を記入し、 OK をクリックします。ファイルがリポジトリにアップロードされていることを表示する進捗ダイアログが表示され、コミットが完了します。

ファイルの追加

プロジェクトの開発が進むにつれ、新規のファイルを追加する必要が出てくるかもしれません。 Extras.c とというファイルにある新しい機能を追加し、参照を既存の Makefile に追加するとしましょう。このフォルダーを右クリックして、 TortoiseSVN追加 を実行します。追加ダイアログが表示され、バージョン管理されていないファイルがすべて表示されるので、追加したいファイルを選択します。他にも、追加したいファイルを右クリックして、 TortoiseSVN追加 を実行することでファイルを追加することもできます。

次にフォルダーをコミットするとき、新しいファイルは追加と表示され、既存のファイルは変更と表示されます。なお、変更されたファイルをダブルクリックすると、どのような変更が行われたのかを確認することができます。

プロジェクトの変更履歴を見る

TortoiseSVNで最も便利な機能のひとつがログダイアログです。ここで、コミットされたファイルやフォルダの一覧と、コミット時に入力された詳細なメッセージを見ることができます。(勧めに応じてコミットメッセージを入力しましたか?入力していないなら、なぜ重要なのかが分かりますね)

図1.4 ログダイアログ

ログダイアログ


はい、ここでは少しずるをしてTortoiseSVNリポジトリからのスクリーンショットを使いました。

上の欄には、コミットされたリビジョンの一覧が、コミット時のメッセージの冒頭と一緒に表示されます。リビジョンを1つ選択すると、中央の欄にはそのリビジョンのログメッセージの全文、下の欄には変更されたファイルやフォルダの一覧が表示されます。

それぞれの欄でコンテキストメニューを使用すると、その情報に関する様々な操作ができます。下の欄のファイルをダブルクリックすると、そのリビジョンでの変更の詳細を見ることができます。詳しくは「リビジョンログダイアログ」を参照してください。

変更を取り消す

どのバージョン管理システムでも、以前に行った変更を取り消す機能を持っています。元に戻したくなったら、 TortoiseSVN では簡単に実行することができます。

まだコミットしていない変更を取り消して、ファイルを編集前の状態に戻したくなった場合は、 TortoiseSVN変更の取り消し... を選択します。これで変更が取り消され(この場合はごみ箱の中に入ります)、作業をする前にコミットされたバージョンに戻すことができます。一部の変更だけを取り消したい場合は TortoiseMerge を使用すれば、行単位に変更を確認したり、変更を取り消したりすることができます。

特定のリビジョンで行った変更を取り消したい場合は、ログダイアログを使用して変更を取り消したいリビジョンを探します。そして、 コンテキストメニューこのリビジョンにおける変更を取り消す を選択すると、そのリビジョンで変更された部分が変更前の状態に戻ります。

さあ使ってみよう

この章では TortoiseSVN の中でもっとも重要でよく使われる機能を手早く紹介してきましたが、まだまだ紹介しきれない機能がたくさんあります。このマニュアルの残りの部分を、時間をかけて読むことを強くお勧めします。特に4章日常の使用ガイドには、ふだん操作についてより詳細なことが書かれています。

有益で読みやすい文章にするために大変苦労しましたが、まだまだ充分ではないことを認識しています。時間をかけて、テストリポジトリで恐れずに試してみてください。使いこむことが最良の学習です。

第2章 バージョン管理の基本概念

この章は Subversion book にある同章をわずかに変更したものです。 Subversion book のオンライン版は、 http://svnbook.red-bean.com/ から読むことができます。

この章では短く簡単に Subversion の概要の説明します。バージョン管理システムが初めてならば、この章を読めばわかるでしょう。一般的なバージョン管理の概念から始めて、 Subversion の根底にある考え方を説明し、 Subversion の使い方の簡単な例を紹介します。

この章の事例では、一連のプログラムソースコードの共有を扱っていますが、 Subversion はどんなファイルでも扱えるということを意識しておいてください。プログラマーを助けるためだけのものではありません。

リポジトリ

Subversion は集中管理型の情報共有システムです。この核となるのがデータを格納するリポジトリです。リポジトリは情報をファイルシステムツリー(簡単にいえばファイルやディレクトリの階層)の形で格納します。複数のクライアントがリポジトリに接続し、そのファイルを読み書きします。データを書き込むと他の人が情報を使用できるようになりますし、データを読み込むと他の人の情報をクライアントが受信します。

図2.1 典型的なクライアント/サーバーシステム

典型的なクライアント/サーバーシステム

このどこが画期的なのでしょうか。普通のファイルサーバーと同じようにもみえます。確かにリポジトリファイルサーバーの一種ですが、ふだん見かけるものとは異なります。 Subversion のリポジトリが特別なのは、そこに書き込まれたすべての変更を記憶していることです。すべてのファイルに対するすべての変更、さらにディレクトリツリー自体に対して行われた変更、たとえばファイルやディレクトリの追加、削除、再配置、などを記憶しています。

クライアントがリポジトリからデータを読み出すときには、普通はファイルシステムツリーの最新のバージョンだけが見えます。しかし、ファイルシステムの 以前の 状態も見ることができます。たとえばクライアントは、先週の水曜日にこのディレクトリには何が入っていたのか?、とか最後にこのファイルを変更したのは誰で、その人は何を変更したのか? といった履歴に関する調査をすることができます。これらはあらゆる バージョン管理システム の核心になる関わる問いです。つまりバージョン管理システムは時間と共に、データを記録し修正内容を追跡するように設計されているのです。

バージョン管理モデル

どのバージョン管理システムでも、根本的な問題を解決しなければなりません。それは、どのようにユーザーに情報の共有をさせつつ、偶然にも他人の邪魔をしないようにするかです。リポジトリ内の他人の変更を、誤って上書きしてしまうことは容易に起こりうることです。

ファイル共有の問題

次のような場面を想像してみてください。2人の同僚、ハリーとサリーがいたとします。2人は同時に同じリポジトリ内のファイルを編集しようとしています。始めにハリーが変更を保存してから、(数分後に)サリーが自分の新しいファイルを偶然にも上書きする可能性があります。(システムが変更を記憶しているので)ハリーのバージョンが永遠に失われるわけではありませんが、ハリーが行った変更はサリーの新バージョンに隠されて見えなくなります。サリーがハリーの変更を取り込まなかったからです。おそらく事故でですが、ハリーの作業は事実上失われたり、少なくとも後のバージョンのファイルには現れなくなったりします。これは確実に回避しなければならな状況です。

図2.2 回避したい問題

回避したい問題

ロック・変更・アンロックモデル

多くのバージョン管理システムでは、ロック・変更・アンロックモデルというとても単純な方法で、この問題に対処しています。このようなシステムでは、リポジトリはひとつのファイルにつき同時に一人しか変更できないようにしています。この場合、ハリーは変更を加える前にあらかじめロックをしなければなりません。ファイルをロックすることは、図書館から本を貸りるようなものです。ハリーがファイルにロックをかけると、サリーはそこに変更を加えられなくなります。サリーがファイルをロックしようとしても、リポジトリはその要求を拒否します。できるのは、ファイルを読むことと、ハリーが変更を終えてロックを解除するのを待つことだけです。ハリーが変更を終えてロックを解除すると、サリーはロックして編集できるようになります。

図2.3 ロック・変更・アンロックモデル

ロック・変更・アンロックモデル

ロック・変更・アンロックモデルの問題点は、少々制限が厳しいことで、しばしばユーザーの作業の邪魔になります。

  • ロックは管理上の問題を起こす可能性があります。ハリーは、ファイルをロックしたまま忘れてしまうかもしれません。いっぽうサリーは、ファイルが編集できるようになるのをずっと待っていて、その間何もできません。ハリーが休暇を取ってしまったりすると、サリーは管理者にハリーのロックを解除してもらわなければなりません。この状況では不要な遅れと、時間の浪費が発生します。

  • ロックは不必要な作業待ちを発生させる可能性があります。ハリーがテキストファイルの先頭を編集していて、サリーは同じファイルの最後を編集したいだけだとしたらどうでしょう。変更は全く重なることがありません。簡単にファイルを同時に編集でき、互いを適切にマージできるとすれば、なんの障害も発生しないでしょう。この状況では待つ必要はないはずです。

  • ロックは誤った安心感を与える可能性があります。ハリーがファイルAをロックして編集し、サリーがファイルBをロックして編集するとします。しかし、AとBが互いに依存しあっている場合、変更すると意味的な矛盾が発生します。突然AとBが一緒には動作しなくなります。ロック方式のシステムはこの問題に対して無力です。ある意味、誤った安心感を与えていると言えるでしょう。ハリーもサリーもファイルをロックしたことで安全な状態に入ったと感じ、自分の作業が保護されていると錯覚してしまうのです。

コピー・変更・マージモデル

Subversion や CVS などのバージョン管理システムは、ロックの代わりに コピー・変更・マージ モデルを使用します。このモデルでは、ユーザーのクライアントが個別にリポジトリを読み込み、ファイルやプロジェクトの個人的な 作業コピー を作成します。そこからユーザーは並行して作業し、個人のコピーを変更します。最後に個人のコピーを新しい最終版にマージします。バージョン管理システムはマージの補助を行いますが、正しくマージする最終責任は人間が負うことになります。

例を挙げましょう。ハリーとサリーがそれぞれ同じプロジェクトの作業コピーを、リポジトリからコピーして作成したとします。2人とも同時に作業し、それぞれのコピーの同じファイル A に変更を加えました。先にサリーがリポジトリに変更を保存します。そのあとハリーが変更を適用しようとしますが、ハリーのファイル A は最新ではないとリポジトリに言われてしまいます。一方、リポジトリのファイル A には、ハリーが最後にコピーしたときから、何らかの変更が加わっています。そこでハリーは、リポジトリから新しい変更点を取得し、作業コピーのファイル A にマージするように指示を出します。幸い、サリーの変更はハリーの変更に重なりません。そのため、いったん両方の変更点を統合してしまえば、作業コピーの内容をリポジトリに書き戻すことができます。

図2.4 コピー・変更・マージモデル

コピー・変更・マージモデル

図2.5 ...コピー・変更・マージモデル(の続き)

...コピー・変更・マージモデル(の続き)

では、サリーの変更がハリーの変更に重なっていたら?そのときはどうなるのでしょう?この状況は競合と呼ばれ、ふつうは多発するものではありません。ハリーがクライアントプログラムに、リポジトリの最新の変更を自分の作業コピーにマージするよう指示を出すと、作業コピーのファイル A は競合している状態になります。このとき彼は競合した変更を両方とも見ることができ、どちらを採用するかを選択することができます。ソフトウェアは自動的に競合を解決できないことに注意してください。理解し正しく選択する力を持っているのは人間だけです。ハリーがいったん重なった変更を解決したら、(おそらくサリーと競合について話し合ったあとで)マージしたファイルを安全にリポジトリに保存できます。

コピー・変更・マージモデルは少々無秩序に見えますが、実際にはとてもスムーズに事が進みます。ユーザーは他の人を待つこともなく、並行して作業を進められます。同じファイルに対して作業を行った場合でも、ほとんどの変更は重ならないことが分かると思います。そして、競合を解決するのにかかる時間は、ロックシステムで失われる時間よりもずっと少ないのです。

このことは、最終的にひとつの重要な要因にたどり着きます。ユーザー間のコミュニケーションです。ユーザーがお互いに意見をやりとりしなければ、構文上・意味上の競合が増えていきます。どんなシステムもユーザーに完璧なコミュニケーションを強要できませんし、意味上の競合も検出できません。したがって、ロックシステムなら競合は防げるなどという間違った思い込みで安心するなど、全く意味がありません。実際には、ロックは生産性を下げる以外の何物でもないように思えます。

ロック・変更・アンロックモデルの方がよいといわれる事例もあります。マージできないファイルがある場合です。例えば、リポジトリに画像イメージが含まれている場合、2人が同時にイメージを変更してもこれをマージする方法はありません。ハリーとサリーのどちらも自分の行った変更を失ってしまいます。

Subversionではどうしているのか

通常、 Subversion はコピー・変更・マージモデルを使用しますし、ほとんどの場合この方法が求められていると思います。しかし、バージョン1.2で、 Subversion はファイルのロックもサポートしました。したがって、マージできないファイルがあったり、管理するのに単にロックポリシーを強制したりしたい場合にも、 Subversion は必要に応じてそういった機能を提供することができます。

Subversionの動作

作業コピー

作業コピーについてはすでに説明したとおりですので、今度は Subversion クライアントでどのように作業コピーを作成したり使用したりするかを見ていきましょう。

Subversion の作業コピーは、ローカルシステム上にある通常のディレクトリツリーで、ここにファイルが集められています。お望みのファイルをどれでも編集することができますし、それがソースコードのファイルなら、いつも通りそのファイルからプログラムをコンパイルできます。作業コピーは自分の個人的な作業場所です。 Subversion が他人の変更をここに組み込むことはありませんし、同様に、明確に指示するまで自分の変更が他人に公開されることもありません。

作業コピーのファイルに変更を加え、それがうまく動作することを確認したあとで、その変更を同じプロジェクトで一緒に作業しているほかの人に(リポジトリに書き込むことで) 公開 するためのコマンドが Subversion には用意されています。また、他の人の変更が公開されたときは、その変更を(リポジトリから読み出して)自分の作業コピーにマージするコマンドが用意されています。

作業コピーには、 Subversion のコマンドの実行を補助するために、作成・保守される特別なファイルがあります。具体的には、作業コピーの中に .svn という名前のサブディレクトリが作られます。これは作業コピーの 管理ディレクトリ として知られています。管理ディレクトリ内のファイルは、まだ公開していない変更があるか、また他の人の作業によって最新でなくなっているかを Subversion が認識する助けになります。 Subversion 1.7 以前では、 .svn ディレクトリは作業コピー内のバージョン管理対象のディレクトリそれぞれに作られていました。 Subversion 1.7 で完全に方法が変更され、各作業コピーが持つ管理ディレクトリは作業コピーのルートの直下に1つだけ作られるようになりました。

典型的な Subversion リポジトリでは、いくつものプロジェクトのファイル(やソースコード)を保持し、リポジトリのファイルシステムツリー以下に、プロジェクトごとのサブディレクトリを置いています。この配置では、ユーザーの作業コピーは大抵リポジトリの特定のサブツリーに相当します。

例えば、2つのソフトウェアプロジェクトがあるリポジトリがあったとします。

図2.6 リポジトリのファイルシステム

リポジトリのファイルシステム

具体的には、リポジトリのルートディレクトリに paintcalc というサブディレクトリがあります。

作業コピーを取得するために、リポジトリのサブツリーを チェックアウト しなければなりません(チェックアウト は、リソースのロックや予約が必要なように思われますが、そんなことはありません。単に、プロジェクトのプライベートなコピーを作成するだけです)。

button.c を変更したとしましょう。 .svn ディレクトリには、ファイルの変更日時と元の内容が記録されていますから、 Subversion はファイルが変更されていることがわかります。しかし、変更は明確に指示するまで公開はされません。変更を公開する操作は通常、変更をリポジトリへ コミット する(もしくは チェックイン する)と呼ばれています。

変更を他の人に公開するには、 Subversion のコミット(commit)コマンドを使用します。

さて、 button.c への変更を、リポジトリにコミットした後で、他のユーザーが /calc の作業コピーをチェックアウトすると、変更が反映された最新版のファイルが取得されます。

自分にサリーという相棒がいて、 /calc の作業コピーを自分と同時にチェックアウトしたとします。自分が button.c の変更をコミットしても、サリーの作業コピーは変更されません。 Subversion はユーザーが操作しないと作業コピーを更新しないからです。

サリーのプロジェクトを最新状態にするには、Subversion に作業コピーを 更新 するよう指示します。これは Subversion の更新(update)コマンドを使用します。これによって、自分の変更がサリーの作業コピーに組み込まれ、またチェックアウト後にコミットされた他の人の変更も同様に組み込まれます。

サリーは、どのファイルを更新するかを指定する必要はありません。Subversion は .svn ディレクトリの情報とリポジトリ内の詳細情報を使用して、どのファイルを更新するか決めるのです。

リポジトリ URL

Subversion のリポジトリは、ローカルディスクや様々なネットワークプロトコル経由など、多様な方法でアクセスできます。しかし、リポジトリの位置は常に URL で表します。 URL スキーマはアクセス方法を表します。

表2.1 リポジトリにアクセスするURL

スキーマアクセス方法
file:// ローカルないしネットワークドライブのリポジトリに直接アクセスします。
http:// Subversion を組み込んだ Apache サーバーに WebDAV プロトコルでアクセスします。
https:// http:// と同じですが、SSL 暗号化を用います。
svn:// 認証のない TCP/IP による独自プロトコルで svnserve サーバーにアクセスします。
svn+ssh:// 認証・暗号化された TCP/IP による独自プロトコルで svnserve サーバーにアクセスします。

Subversion のURLの大部分には標準的な文法を使用し、URLの中にサーバー名やポート番号を含めることができます。 file:// によるアクセス方法は、通常はローカルアクセスに使用しますが、ネットワーク上のホストに対する UNC パスにも使用できます。そのためURLは file://hostname/path/to/repos のような形式になります。同一マシン内では URL の hostname の部分を省略するか localhost としてください。このためローカルパスを表すには、file:///path/to/repos のようにスラッシュが3つ並べることになります。

また Windows 上で file:// スキームを使用する場合は、同じマシン上のカレントドライブとは別のドライブにあるリポジトリにアクセスするためには、非公式の標準構文を使う必要があります。以下のURLパス構文のどちらか一方を使えばアクセスできます。ここで X はリポジトリのあるドライブです。

file:///X:/path/to/repos
...
file:///X|/path/to/repos
...

Windows の(URL以外の)パスの形式ではバックスラッシュを使用しますが、URLには通常スラッシュを使用することに注意してください。

ネットワークフォルダー上でもFSFSリポジトリにはアクセスできますが、これはさまざまな理由によりお勧めできません

  • すべてのユーザーに直接書き込む権限を与えてしまうので、誰かが誤ってリポジトリファイルシステムを削除したり破壊したりしてしまうことがあります。

  • すべてのネットワークファイル共有プロトコルが、 Subversion が要求するロック機能をサポートしているわけではありません。いつか、リポジトリが潜在的に壊れてしまうかもしれません。

  • アクセス権を正しく設定する必要があります。Sambaはこの要求には難しい部分があります。

  • 誰かが新しいバージョンのクライアントをインストールしてリポジトリのフォーマットをアップグレードすると、全員が新しいバージョンのクライアントにアップグレードするまで、リポジトリにアクセスできなくなります。

リビジョン

svn commit (コミット)の操作は、ファイルやディレクトリの変更を、単一の不可分トランザクションで公開します。作業コピーで、ファイル内容の変更、ファイルやディレクトリの作成、削除、名前の変更、コピーなど行い、それ全体を単位とした完全な変更セットをコミットできます。

リポジトリでは、コミットを不可分トランザクションとして扱い、変更をすべて配置するか、何も配置しないかのどちらかになります。 Subversion はプログラムの異常終了や、システムの異常終了、ネットワーク障害、他のユーザーの操作に直面しても、この最小単位を保持しようとします。

リポジトリがコミットを受け付けるごとに、ファイルシステムツリーの状態が新しく作成されます。これを リビジョン と呼びます。リビジョンごとに一意の自然数が割り当てられ、直前のリビジョンよりも1だけ大きくなります。リポジトリを新規作成した直後のリビジョンは 0 で、ルートディレクトリ以外はなにも含まれていません。

リポジトリを視覚化するよい方法は、ツリーの連続で表すというものです。 0 から始まるリビジョン番号の配列が、左から右に追加されていく状況を想像してください。それぞれのリビジョン番号には対応したファイルシステムツリーがあり、それぞれのツリーはコミット後のリポジトリの状態を示すスナップショットです。

図2.7 リポジトリ

リポジトリ

作業コピーが、リポジトリの特定のリビジョンに常に対応しているとは限らないということに充分注意してください。複数の異なるリビジョンが混在している可能性があります。たとえば、最新のリビジョンが 4 であるリポジトリから、作業コピーをチェックアウトしたとします。

calc/Makefile:4
integer.c:4
button.c:4
      

この時点では作業ディレクトリは、リポジトリのリビジョン 4 と完全に一致します。しかし、ここで button.c に変更を加え、変更をコミットしたとします。他にコミットした人がいなければ、このコミットではリポジトリにリビジョン 5 を作成し、作業コピーの内容は以下のようになります。

calc/Makefile:4
integer.c:4
button.c:5
      

この時点で、サリーが integer.c を変更し、リビジョン 6 を作成したとします。 svn update で自分の作業コピーを更新すると、以下のようになります。

calc/Makefile:6
integer.c:6
button.c:6
      

サリーの integer.c への変更は、自分の作業コピーに現れますが、 button.c へ行った自分の変更はそのままです。この例では、Makefile の内容はリビジョン 4、5、6 で全く同じものですが、 Subversion は作業コピー中の Makefile のリビジョンを 6 にして、最新であることを表現します。そのため作業コピーのトップでまっさらな更新を行うと、一般的に、作業コピーはリポジトリの特定のリビジョンに完全に一致します。

作業コピーのリポジトリ追跡方法

作業ディレクトリ内のファイルに対して、Subversion は2つの本質的な情報を .svn/ 管理領域に記録します。

  • 作業しているファイルが基づいているリビジョン(これは 作業リビジョン と呼ばれる)、および、

  • ローカルコピーをリポジトリから更新したときに記録したタイムスタンプ、です。

この情報とリポジトリとのやりとりによって、 Subversion は、作業ファイルが以下の4つの状態のどれかを確認できます。

変更しておらず、最新版である

作業ディレクトリのファイルが変更されておらず、作業リビジョン以降に行われたリポジトリへのコミットでもそのファイルが変更されていない状態です。そのファイルに対するコミット(commit)は何も行われないし、更新(update)も何も行われません。

ローカルで変更しており、最新版である

作業ディレクトリのファイルは変更されているが、作業リビジョン以降に行われたリポジトリへのコミットではそのファイルが変更されていない状態です。ローカルにはコミットしていない変更があるので、そのファイルに対するコミット(commit)は成功し、ローカルの変更が公開されます。また、更新(update)では何も行われません。

変更しておらず、最新版ではない

作業ディレクトリのファイルは変更されていないが、リポジトリ上のファイルは変更されている状態です。このファイルを最新の公開リビジョンにするため、どこかで更新しなければなりません。このファイルへのコミット(commit)は何も行われませんが、更新(update)では作業コピーに最新の変更が反映されます。

ローカルで変更しておらず、かつ最新版ではない

ファイルは作業ディレクトリでも、リポジトリ上でも変更された状態です。このファイルへのコミット(commit)は 作業コピーは最新ではありません というエラーになります。まず、そのファイルを更新しなければなりません。ファイルに対して更新(update)を行うと、公開されている変更点が、ローカルで変更を行った作業コピーにマージされます。これが自動的にできないような状況の場合、ユーザーが競合の解決を行うため、そのままになります。

まとめ

この章では Subversion の基本的な考え方の数々を一覧しました。

  • リポジトリによる集中管理、クライアントの作業コピー、リポジトリのリビジョンツリーの配列、といった概念を紹介しました。

  • 2人の共同作業者が Subversion 上で、「コピー・変更・マージ」モデルを使用して、どのようにお互いの変更を公開・取得するかを簡単な例で見てきました。

  • Subversion が作業コピーの情報を追跡・管理する方法について少し触れました。

第3章 リポジトリ

リポジトリにアクセスするためにどのプロトコルを使用する場合でも、少なくとも1つはリポジトリを作成する必要があります。リポジトリは Subversion のコマンドラインクライアントでも、 TortoiseSVN でも作成できます。

まだ Subversion のリポジトリを作成していないのなら、さっそく作成しましょう。

リポジトリの作成

コマンドラインクライアントを使用したリポジトリの作成

  1. リポジトリのルートフォルダーとして SVN という空のフォルダー(ここでは D:\SVN\ とします)を作成してください。

  2. D:\SVN\ の中に MyNewRepository というフォルダーを作成してください。

  3. コマンドプロンプト(またはDOS-Box)を開いて D:\SVN\に移動し、以下のコマンドを実行してください。

    svnadmin create --fs-type fsfs MyNewRepository
    

これで、 D:\SVN\MyNewRepository に新しいリポジトリを作成できました。

TortoiseSVNを使用したリポジトリの作成

図3.1 バージョン管理外フォルダーの TortoiseSVN メニュー

バージョン管理外フォルダーの TortoiseSVN メニュー

  1. Windows エクスプローラーを開いてください。

  2. 新しいフォルダーを作成し、名前をつけてください(例えば SVNRepository)。

  3. 新しく作成したフォルダーで右クリックし、 TortoiseSVNここにリポジトリを作成... を選択してください。

    リポジトリは新しいフォルダーの内部に作成されます。 そのファイルを自分で編集しないでください!!! エラーが発生したら、フォルダーが空であるか、または書き込み禁止されていないかを確認してください。

    リポジトリ内にディレクトリ構造を作成したいと思うかもしれません。その場合は、 「リポジトリのレイアウト」に示したレイアウトオプション参照してください。

    ローカルのリポジトリを識別しやすくするために、 TortoiseSVN ではリポジトリを作成する際にカスタムフォルダーアイコンが設定されます。公式のコマンドラインクライアントを使用してリポジトリを作成した場合は、このフォルダーアイコンは設定されません。

ヒント

ローカルのテスト用途でない限り、 file:// アクセスは使用しないこともお勧めします。サーバーを使用した方が、一人で開発する場合を除いて、全てにおいてより安全でより信頼性が高くなります。

リポジトリへのローカルアクセス

ローカルリポジトリにアクセスするには、そのフォルダーへのパスが必要です。 Subversion ではすべてリポジトリのパスを file:///C:/SVNRepository/ という形で表すことを覚えておいてください。すべてスラッシュ(「/」)を使用することに注意してください。

ネットワークフォルダー上のリポジトリにアクセスするには、ドライブ文字の割り当てと UNC パスの両方が使えます。 UNC パスは file://ServerName/path/to/repos/ といった形です。先頭にスラッシュ(「/」)が2つあることに注意してください。

SVN 1.2 以前では、UNC パスは file:///\\ServerName/path/to/repos というもっと曖昧な形でした。この形もまだサポートしていますが、お勧めしません。

ネットワークフォルダー上のリポジトリへのアクセス

原理上、FSFSリポジトリはネットワークフォルダー上に配置でき、file://プロトコルを用いて複数のユーザーからアクセスできますが、これは絶対にお勧め しません 。実際のところ、このような使い方を私たちは思いとどまってほしいと強く思いますし、様々な理由からサポートもしません。

  • 第一に、すべてのユーザーにリポジトリへ直接書き込みアクセスする権限を与えることになるので、誰かが誤ってリポジトリ全体を削除したり、何らかの方法で使用できなくしたりすることができてしまいます。

  • 第二に、すべてのネットワークファイル共有プロトコルが、 Subversion が要求するロック機能をサポートしているわけではなく、リポジトリが壊れた状態に見えてしまう可能性があります。すぐには起こらないかも知れませんが、ある日2人のユーザーが、同時にリポジトリにアクセスしようとすることもあるでしょう。

  • 第三に、ファイルのアクセス権をきちんと設定しなければなりません。ネイティブの Windows 共有ではうまくいくかも知れませんが、 Samba では特に困難です。

  • 誰かが新しいバージョンのクライアントをインストールしてリポジトリのフォーマットをアップグレードすると、全員が新しいバージョンのクライアントにアップグレードするまで、リポジトリにアクセスできなくなります。

file:// アクセスは、ローカルでの1ユーザーのみのアクセスを想定しており、そのようにテストとデバッグを行っています。リポジトリを共有したい場合は、 まさに 適切なサーバーをセットアップする必要がある場面であり、それは見かけほど難しくはありません。サーバーの選択・設定のガイドラインは、 「リポジトリへのアクセス」 をお読みください。

リポジトリのレイアウト

データをリポジトリにインポートする前に、データをどのような構成にするかをはじめに考える必要があります。おすすめのレイアウトを採用すれば、あとがより楽になるでしょう。

リポジトリの構成には標準的な、おすすめの方法があります。多くの人は開発のメインラインを保持するためのトランク(trunk)ディレクトリ、ブランチコピーを入れるブランチ(branches)ディレクトリ、そしてタグコピーを入れるタグ(tags)ディレクトリを作成します。リポジトリに単一のプロジェクトでしか使わない場合には、次のように、この3つのディレクトリをリポジトリ最上位に作ります。

/trunk
/branches
/tags
    

このレイアウトは一般的に使われていますので、 TortoiseSVN で新しくリポジトリを作成する際には、このディレクトリ構造を作成をするかどうか確認します。

リポジトリに複数のプロジェクトがあるなら、以下のようにサブディレクトリでまとめたレイアウトにしたり、

/trunk/paint
/trunk/calc
/branches/paint
/branches/calc
/tags/paint
/tags/calc
    

以下のようにプロジェクトでまとめたりします。

/paint/trunk
/paint/branches
/paint/tags
/calc/trunk
/calc/branches
/calc/tags
    

プロジェクト同士があまり密接に連携しておらず、それぞれ個々にチェックアウトできるなら、プロジェクトごとにまとめる方法が便利でしょう。プロジェクト同士が連携している場合には、一度に全てチェックアウトしたいと思うことでしょうし、ひとつの配布パッケージに結合されるプロジェクトなどはサブディレクトリでまとめた方がいいでしょう。この方法ならば、ひとつのトランクをチェックアウトするだけで済み、またサブプロジェクト間の関係も容易に把握できます。

トップレベルに /trunk /tags /branches を配置するアプローチを採用する場合でも、ブランチやタグを作るたびにトランクの全体をコピーしなければならないと言うことはありません。また、ある意味ではこの構造は最も柔軟な形となります。

関連がないプロジェクトはリポジトリを分けるという方法もあります。変更をコミットする際、リビジョン番号はプロジェクトごとに振られるのではなく、リポジトリ全体の変更に振られます。関連のない2つのプロジェクトがリポジトリを共有すると、リビジョン番号に大きなギャップが生じます。 Subversion プロジェクトと TortoiseSVN プロジェクトは同じホストアドレスにありますが、独立して開発できるよう、またビルド番号で混乱しないよう、リポジトリが分けられています。

もちろん、以上の標準的なレイアウトを無視しても構いません。自分たちでうまく作業できるように、様々な整理の仕方があるでしょう。ここで選択したものを、永遠に使い続けなければならないわけではないということを覚えておいてください。いつでもリポジトリを再構成できます。ブランチやタグは特定のディレクトリですから、 TortoiseSVN はお好みにあわせて移動したり名前を変更したりできます。

あるレイアウトから別のレイアウトへ切り替えるのは、ただ単にサーバー側で移動するだけです。リポジトリの構成が気に入らなければ、ディレクトリを移動させてください。

そのため、まだ基本的なフォルダー構造を、リポジトリに作成していないのであれば、今のうちにやっておくべきです。これを行うには、2通りの方法があります。 /trunk /tags /branches 構造を単に作成したいだけであれば、リポジトリブラウザーを使用して、3つのフォルダーを作成できます(3つのコミットに分かれます)。もっと深い階層を作成する場合は、まずディスクにフォルダー構造を作成し、その後一度にコミットする方法が簡単です。以下のように行います。

  1. ハードディスクに新しい空のフォルダーを作成してください。

  2. このフォルダーの中に任意のトップレベルフォルダー構造を作成してください。まだ中にはファイルを置かないでください。

  3. このフォルダー構造を含んでいるフォルダーの上で右クリックして、 TortoiseSVNインポート... を選択することで、フォルダ構造をリポジトリにインポートすることができます。インポートダイアログでは、リポジトリのURLを入力してOKをクリックしてください。これで、 temp フォルダーがリポジトリのルートの中に入り、基本的なリポジトリ構造を作ることができます。

中身をインポートしたフォルダーの名前はリポジトリに現れないことに注意してください。たとえば、以下のようなフォルダー構造を作成した場合、

C:\Temp\New\trunk
C:\Temp\New\branches
C:\Temp\New\tags

リポジトリルートに C:\Temp\New をインポートすると、次のようになります。

/trunk
/branches
/tags

リポジトリのバックアップ

どのタイプのリポジトリを使用する場合でも、定期バックアップの保守作業を行い、バックアップを検査することは非常に重要です。サーバーを破損すると、最新のバージョンのファイルにはアクセスできるかもしれませんが、リポジトリがなければ履歴が永遠に失われてしまいます。

一番単純な(ただしおすすめできない)方法は、単純にリポジトリのフォルダーをバックアップ領域にコピーすることです。しかし、データにアクセス中の別のプログラムが一切ないことを確認しておく必要があります。ここでいうアクセスとはすべてのアクセスを意味します。もしコピー中にリポジトリにアクセス(Webブラウザーが開かれている、WebSVNなど)があると、バックアップしたデータは不正になります。

おすすめは

svnadmin hotcopy path/to/repository path/to/backup

を実行して安全にリポジトリーのコピーを作成する方法です。その後、コピーしたものをバックアップします。

svnadmin は Subversion コマンドラインクライアントのインストール時に自動でインストールされます。TortoiseSVN のインストール時にこの項目をチェックすることで簡単にインストールできます。Subversion のウェブサイトから直接最新のコマンドラインツールをダウンロードすることもできます。

サーバー側フックスクリプト

フックスクリプトは、リポジトリのイベント(新しいリビジョンの作成やバージョン管理外のプロパティの変更など)を引き金に動作するプログラムです。いずれのフックも、イベントが何か、操作の対象は何か、イベントを発生させた人物のユーザー名、といった情報を受け取ります。フックの出力や終了ステータスによって、フックプログラムは動作の続行、停止、中断を切り替えることになります。実装されているフックについての詳細は、 Subversion Book の Hook Scripts の章を参照してください。

フックスクリプトは、リポジトリのあるサーバーで実行されます。 TortoiseSVN では、イベントが発生した時にローカルで実行される、クライアント側フックスクリプトも設定できます。詳細は 「クライアント側フックスクリプト」をご覧ください。

フックスクリプトのサンプルは、リポジトリの hooks ディレクトリにあります。これらのサンプルスクリプトは Unix/Linux サーバー用であり、Windows ベースのサーバーの場合は修正が必要となります。フックはバッチファイルもしくは実行形式です。以下のサンプルは pre-revprop-change フックを実装したバッチファイルの例です。

rem ログメッセージのみを変更可能にする。
if "%4" == "svn:log" exit 0
echo 「%4」プロパティは変更できません >&2
exit 1

標準出力へ出力されたものは、すべて破棄されてしまうことに注意してください。コミットを拒否するダイアログにメッセージを表示したい場合は、標準エラー出力に出力しなければなりません。このバッチファイルでは >&2 を使用しています。

フックを上書きする方法

フックスクリプトがコミットを拒否した場合、それが最終決定となります。しかし、スクリプトの中に 合言葉 を埋め込むことで、その操作を上書きすることができます。スクリプトが処理を拒否しようとした場合に、特殊なパスフレーズ、特殊なパスフレーズ、固定長のフレーズ、プリフィックス付きのファイル名などをログメッセージからスキャンさせ、合言葉を見つけた場合にはコミットを実行することができるようにします。もし合言葉が見つからない場合は、合言葉が合いませんと表示してブロックするようにします。 :-)

チェックアウトリンク

Subversion リポジトリを他の人に使用できるようにする場合は、ウェブサイトからリンクを張るかもしれません。他の TortoiseSVN のユーザーに チェックアウトリンク を提供すると、アクセスしやすくなります。

TortoiseSVN をインストールするときに、新しく tsvn: プロトコルを登録します。 TortoiseSVN のユーザーがこのリンクをクリックすると、リポジトリの URL が入力された状態でチェックアウトダイアログが開くようになります。

このようなリンクを自分のHTMLページに含めるには、次のようなコードを追加してください。

<a href="tsvn:http://project.domain.org/svn/trunk">
</a>

もちろん、適切な画像を含めれば、もっと見栄えが良くなるでしょう。 TortoiseSVN のロゴ を使用したり、好きな画像を使用したりすればよいでしょう。

<a href="tsvn:http://project.domain.org/svn/trunk">
<img src=TortoiseCheckout.png></a>

また、特定のリビジョンを指定したリンクにすることもできます。次のようにしてください。

<a href="tsvn:http://project.domain.org/svn/trunk?100">
</a>

リポジトリへのアクセス

TortoiseSVN (または、その他の Subversion クライアント)を使用する場合、リポジトリを配置する場所が必要です。リポジトリをローカルに配置して、 file:// プロトコルでアクセスしたり、サーバー上に配置して http://svn:// プロトコルでアクセスしたりすることもできます。2つとも暗号化したものを使用することができます。 https://svn+ssh:// を使うか、SASL とともに svn:// を使用することもできます。

もし SourceForge のような公開ホスティングサービスを使っている場合や、誰かがすでにセットアップしたサーバーを使っている場合には、特にすることはありません。4章日常の使用ガイドに移動してください

サーバーを持っておらず、一人で作業している場合や、 Subversion や TortoiseSVN を試験環境で評価中の場合、ローカルリポジトリを作成するのが最適かもしれません。 3章リポジトリ の始めで説明しているように、自分のPCにリポジトリを作成してください。使い始めるための方法を探すのであれば、この章の残りを読み飛ばして 4章日常の使用ガイド へ直接進んでもかまいません。

複数のユーザーが使用するリポジトリを、ネットワークフォルダー上に構築しようと考えているなら、考え直してください。なぜこの方法が良くないのか、詳細は 「ネットワークフォルダー上のリポジトリへのアクセス」 をお読みください。サーバーの構築は見かけほど難しくありませんし、信頼性や、恐らく速度も向上します。

Subversion サーバーのオプションの詳細や、状況に応じた最適な構成については、 Subversion book の Server Configuration を参照してください。

初期のころの Subversion では、サーバーを設定するために、サーバー設定について充分に理解していなければならなかったため、このマニュアルの以前のバージョンでは、サーバーをセットアップする方法を詳細に説明していました。最近は、セットアップや設定プロセスをガイドしてくれる、パッケージ化されたサーバーインストーラーがいくつか配布されているので簡単になりました。私たちが把握しているインストーラーとしては、

があります。最新版は Subversion のウェブサイトから、いつでも入手することができます。

それ以外の手順については、 TortoiseSVN のウェブサイトで説明されています。

第4章 日常の使用ガイド

目次

機能概要
アイコンオーバーレイ
コンテキストメニュー
ドラッグ&ドロップ
共通のショートカット
認証
ウィンドウの最大化
リポジトリへのデータのインポート
インポート
その場でインポート
特殊なファイル
作業コピーのチェックアウト
チェックアウトの深さ
変更のリポジトリへのコミット
コミットダイアログ
変更リスト
ファイルの一部だけをコミットする
コミット一覧からの項目の除外
コミットログメッセージ
コミットの進行状況
他人の変更に伴う作業コピーの更新
競合の解決
ファイルの競合
プロパティの競合
ツリーの競合
ステータス情報の取得
アイコンオーバーレイ
詳細なステータス
ローカルとリモートの状態
差分の表示
変更リスト
延期
リビジョンログダイアログ
リビジョンログダイアログの起動
リビジョンログのアクション
追加情報の取得
ログメッセージの追加取得
現在の作業コピーのリビジョン
マージ追跡機能
ログメッセージや作者の変更
ログメッセージの絞り込み
統計情報
オフラインモード
表示の更新
差分の表示
ファイルの差分
改行コードと空白のオプション
フォルダーの比較
TortoiseIDiff を使用した画像の差分
Office ドキュメントの差分
外部差分・マージツール
新しいファイルやディレクトリの追加
ファイルやフォルダーのコピー・移動・名前の変更
ファイルやディレクトリの無視
無視リストでのパターンマッチ
削除、移動、名前変更
ファイルやフォルダーの削除
ファイルやフォルダーの移動
ファイル名の大文字・小文字が競合した場合の対処
ファイル名の変更の修復
バージョン管理外のファイルの削除
変更の取り消し
クリーンアップ
プロジェクト設定
Subversion のプロパティ
TortoiseSVN のプロジェクトプロパティ
プロパティエディター
外部項目
外部フォルダー
外部ファイル
ドラッグ&ドロップで外部参照を作成
ブランチ/タグの作成
ブランチ/タグの作成
ブランチやタグを作成するその他の方法
チェックアウトするか切り替えるか...
マージ
リビジョン範囲のマージ
2つの異なるツリーをマージする
マージオプション
マージ結果のレビュー
マージ追跡
マージ後に発生した競合の扱い
機能ブランチの保守
ロック
Subversion でロックがどのように働くか
ロックの取得
ロックの解除
ロック状態のチェック
ロックしていないファイルを読み込み専用にするには
ロックのフックスクリプト
パッチの作成及び適用
パッチファイルの作成
パッチファイルの適用
誰がその行を変更したか?
ファイルの注釈履歴
注釈履歴の差分
リポジトリブラウザー
リビジョングラフ
リビジョングラフのノード
表示の変更
グラフの使用
表示の更新
ツリーの剪定
Subversion 作業コピーをエクスポート
作業コピーをバージョン管理外へ
作業コピーの再配置
バグ追跡ツール/課題追跡システムとの統合
ログメッセージへの課題IDの付与
課題追跡システムからの情報取得
Web ベースのリポジトリビューアーとの統合
TortoiseSVN の設定
一般設定
リビジョングラフの設定
アイコンオーバレイ設定
ネットワーク設定
外部プログラムの設定
保存データの設定
ログキャッシュ
クライアント側フックスクリプト
TortoiseBlame の設定
TortoiseUDiff設定
TortoiseSVN の設定のエクスポート
高度な設定
最終ステップ

このドキュメントでは、 TortoiseSVN クライアントの日々の使い方を説明しています。バージョン管理システムの解説 ではなく 、 Subversion (SVN) の解説 でもありません 。やりたいことがおよそ分かっているが、どうやって操作するか思い出せない場合に、調べる場所として便利です。

Subversion でのバージョン管理の入門書が必要なら、 Subversion によるバージョン管理 というすばらしい本をお薦めします。

このドキュメントは、 TortoiseSVN や Subversion と同様、現在も作成途中です。間違いがあったら私たちが修正できるよう、メーリングリストに投稿してください。日常操作ガイドのスクリーンショットの中には、現在のソフトウェアの状態を反映していないものがあるかもしれません。ご容赦ください。 TortoiseSVN の作業は空き時間でしているのです。

日常操作ガイドを最大限に活用するには、

  • すでに TortoiseSVN をインストールしてあること

  • バージョン管理システムになじみがあること

  • Subversion の基本を知っていること

  • サーバーのセットアップが済んでいるなど、 Subversion のリポジトリにアクセスできるようになっていること

を前提とします。

機能概要

この章では、このマニュアルのほぼすべてに適用される TortoiseSVN の機能の一部をを説明します。多くの機能は、 Subversion の作業コピーの中でしか機能しないことに注意してください。

アイコンオーバーレイ

図4.1 エクスプローラーのアイコンオーバーレイ表示

エクスプローラーのアイコンオーバーレイ表示


TortoiseSVN のもっとも目に見える機能のひとつが、作業コピーのファイルに現れるアイコンオーバーレイです。これにより、ファイルが変更されているかどうかが一目瞭然となります。オーバーレイが表す内容については、 「アイコンオーバーレイ」 をご覧ください。

コンテキストメニュー

図4.2 バージョン管理下のフォルダーのコンテキストメニュー

バージョン管理下のフォルダーのコンテキストメニュー


TortoiseSVN のコマンドは、すべて Windows エクスプローラーのコンテキストメニューから呼び出します。ファイルやフォルダーを右クリックすると、多くは直接見えています。コマンドは、ファイルやフォルダーであるかどうか、その親フォルダーがバージョン管理下にあるかどうかで変わります。 TortoiseSVN のメニューは、エクスプローラーのファイルメニューにも現れます。

ヒント

めったに使用されない幾つかのコマンドは、拡張コンテキストメニューでのみ使用できます。拡張コンテキストメニューを表示するためには、 Shift キーを押しながら右クリックしてください。

場合によっては、TortoiseSVN のエントリを、複数目にするかもしれません。これはバグではありません。

図4.3 バージョン管理されたフォルダー内のショートカットに対するエクスプローラーのファイルメニュー

バージョン管理されたフォルダー内のショートカットに対するエクスプローラーのファイルメニュー


この例では、バージョン管理下のフォルダー内にバージョン管理外のショートカットがある場合、エクスプローラーのファイルメニューに TortoiseSVN のエントリが 3つ 現れます。ひとつはフォルダー用、ひとつはショートカット用、最後にショートカットが指すオブジェクト用です。見分けるためにアイコンの右下に、ファイル、フォルダー、ショートカットのメニューエントリか、複数選択した項目かを示すマークがつきます。

ドラッグ&ドロップ

図4.4 バージョン管理下のディレクトリに対する右ドラッグメニュー

バージョン管理下のディレクトリに対する右ドラッグメニュー


作業コピーの中にファイルやフォルダーを右ドラッグしたり、バージョン管理下のディレクトリにバージョン管理外のファイルやフォルダーを右ドラッグしたりすると、そのドラッグハンドラによって他のコマンドが有効になります。

共通のショートカット

共通の操作は Windows のショートカットでよく知られていますが、ボタンに表示されるわけではありませんし、メニューもありません。「表示を更新する」のように、したいことが明確なのに方法が分からない場合は、ここをチェックしてみてください。

F1

もちろんヘルプです。

F5

現在の表示を最新の情報に更新します。もしかしたら、最も便利なワンキーコマンドかもしれません。例えば……エクスプローラーでは、作業コピーのアイコンオーバーレイを更新します。コミットダイアログでは作業コピーを再走査し、コミットが必要なファイルを探します。リビジョンログダイアログではリポジトリに再接続し、最新の変更をチェックします。

Ctrl+A

すべて選択します。エラーメッセージが出て電子メールにコピー&ペーストしたいときに使用できます。 Ctrl+A でエラーメッセージを選択して...

Ctrl+C

選択中の文字列をコピーします。文字列が選択されていない時も、たとえばリストの項目やメッセージボックスの場合は、リスト項目の中身やメッセージボックスがクリップボードにコピーされます。

認証

アクセスしようとしているリポジトリがパスワードで保護されている場合、認証ダイアログが表示されます。

図4.5 認証ダイアログ

認証ダイアログ


ユーザー名とパスワードを入力してください。チェックボックスをチェックすると、証明書が保存されます。証明書は Subversion のデフォルトディレクトリ(%APPDATA%\Subversion\auth)にある、次の3つのサブディレクトリに格納されます。

  • svn.simple には基本認証(ユーザー名/パスワード)の証明書が格納されます。パスワードは WinCrypt を使用して保存され、プレーンテキスト形式では保存されません。

  • svn.ssl.server には SSL サーバー証明書が格納されます。

  • svn.username には、(パスワードがいらない)ユーザー名のみで認証用する証明書が格納されます。

認証情報のキャッシュをクリアするには、TortoiseSVNの設定ダイアログの 保存されたデータページから行えます。すべて消去ボタンで、すべてのリポジトリのキャッシュされた認証データを消去します。消去...ボタンではキャッシュされた認証データのうちどれを消去するかを選択するダイアログが表示されます。「保存データの設定」 を参照してください。

Windows のログオフ時やシャットダウン時に認証データを削除したい場合は、 %APPDATA%\Subversion\auth ディレクトリを削除するシャットダウンスクリプトを使用すれば実現できます。例えば、

@echo off
rmdir /s /q "%APPDATA%\Subversion\auth"

このようなスクリプトをインストールする方法は、http://www.windows-help-central.com/windows-shutdown-script.html に説明があります。

認証とアクセスコントロールに関して、サーバーをどのようにセットアップするかに関する情報は、 「リポジトリへのアクセス」を参照ください。

ウィンドウの最大化

TortoiseSVN のダイアログの多くは、大量の情報を表示します。しかし、これを画面全体に最大化するよりは、縦方向・横方向のみ最大化した方が便利な場合があります。 最大化 ボタンに便利なショートカットを用意しています。マウスで中クリックすると縦に最大化され、右クリックすると横方向に最大化されます。

リポジトリへのデータのインポート

インポート

すでにいくつかのプロジェクトが登録されているリポジトリにインポートする場合、リポジトリ構造はすでに決まっていることでしょう。新しいリポジトリにデータをインポートする場合には、どのようにリポジトリを構成するかを考えるのに、時間を費やす価値はあります。もっとアドバイスが必要であれば、 「リポジトリのレイアウト」をお読みください。

この章では、 Subversion のインポート(import)コマンドについて解説しています。このコマンドは、ディレクトリ階層を一度にリポジトリにインポートするよう設計されています。この動作には、いくつか欠点もあります。

  • 「常に無視するファイル」で設定する以外に、インポートするファイルやフォルダーを選択する方法がない。

  • インポートしたフォルダーが作業コピーにならない。サーバーからファイルをコピーし反映するには、チェックアウトが必要である。

  • 間違った階層のフォルダーを、リポジトリにインポートしてしまいがちである。

このような理由から、リポジトリに初期構造の /trunk /tags /branches を作成する場合を除いて、import コマンドを使用せずに、 「その場でインポート」 で説明している2段階の手順で実行することをお勧めします。ここでは、基本的なインポートのしかたを示します。

リポジトリにプロジェクトをインポートする前に、次の作業を行ってください。

  1. プロジェクトの構築に必要ないファイル(一時ファイル、 *.obj のようなコンパイラーが生成したファイル、コンパイルされたバイナリ、……)は削除してください。

  2. フォルダーやサブフォルダーにファイルを整理してください。あとでファイルを削除・移動することもできますが、インポートの前にプロジェクトの構造をしっかり決めておくことを強くお勧めします。

そして Windows エクスプローラーで、プロジェクトのディレクトリ構造の最上位フォルダーを選択し、右クリックでコンテキストメニューを出してください。 TortoiseSVNインポート... コマンドを選択すると、次のダイアログボックスが表示されます。

図4.6 インポートダイアログ

インポートダイアログ


このダイアログで、プロジェクトのインポート先のリポジトリの場所を示すURLを入力する必要があります。リポジトリには、インポートしようとするローカルフォルダーは現れず、その中身だけが現れるということ注意してください。例えば次のような構造があるとします。

C:\Projects\Widget\source
C:\Projects\Widget\doc
C:\Projects\Widget\images

ここで、 C:\Projects\Widgethttp://mydomain.com/svn/trunk にインポートすると、Widget サブディレクトリではなく、その中のサブディレクトリが trunk の直下に現れるので、驚くかもしれません。サブディレクトリ名は、 http://mydomain.com/svn/trunk/Widget-X というようにURLの一部として指定する必要があります。インポートコマンドでは、リポジトリの中にサブディレクトリがない場合、自動的に作成されることに注意してください。

インポートメッセージは、ログメッセージとして使われます。

デフォルトでは、常に無視するパターンにマッチしたファイル・フォルダーはインポートされません無視ファイルを含める チェックボックスを使用すると、この動作を上書きします。常に無視するパターンの設定の詳細は 「一般設定」をご覧ください。

OK を押すと、TortoiseSVN は全てのファイルが入った完全なディレクトリを、リポジトリにインポートします。これでプロジェクトがバージョン管理下にあるリポジトリに格納されました。なお、インポートしたフォルダーは、バージョン管理下に入りません。バージョン管理下の 作業コピー を取得するには、インポートしたときのバージョンをチェックアウトする必要があります。もしくは、フォルダーをその場でインポートする方法をご覧ください。

その場でインポート

既にリポジトリが存在していて、新しいフォルダー構造を追加する場合は、次のように操作してください。

  1. リポジトリブラウザーを使用して、リポジトリに新しいプロジェクトフォルダーを直接作成します。標準的なレイアウトを使用している場合は、リポジトリのルート直下ではなく、 trunk のサブフォルダーとして作成した方が良いでしょう。リポジトリブラウザーは、ちょうど Windows のエクスプローラーのようにリポジトリ構造を表示しますので、どのように整理されているかを見ることができます。

  2. 新しいフォルダーを、インポートしたいフォルダーの上位層にチェックアウトします。ローカルフォルダーが空でないという警告が表示されますが、無視してください。バージョン管理下のフォルダーの中に、バージョン管理外の内容がある状態になります。

  3. バージョン管理下のフォルダー上で TortoiseSVN追加... を使用して、内容の一部または全部を追加してください。ファイルの追加や削除、フォルダーへの svn:ignore プロパティの設定など、必要な変更を加えることができます。

  4. 最上位のフォルダーをコミットしてください。これで新しいバージョン管理下のツリーと、既存フォルダーから作成したローカルの作業コピーを得られます。

特殊なファイル

バージョン管理下のファイルに、ユーザー別のデータを含める必要がある場合があります。つまり、それぞれのユーザー・開発者別に、環境に合わせて変更しなければならないファイルがある場合です。そういったファイルは、ユーザーがそれぞれいつでもリポジトリにコミットしてしまうことができるために、バージョン管理が難しくなります。

このような場合、テンプレートファイルを使用することをお勧めします。開発者が必要な全てのデータを含むファイルを作成し、そのファイルをバージョン管理下に置きます。開発者はそのファイルをチェックアウトします。それから、それぞれの開発者がそのファイルのコピーを作成し、名前を変更します。そうするとコピーを変更してもなんの問題もありません。

たとえば、TortoiseSVN の構築スクリプトを参照してください。このファイルの名前は default.build.user ですが、リポジトリにはありません。default.build.user.tmpl ファイルがあるだけです。default.build.user.tmpl はテンプレートファイルで、開発者ごとにコピーを作成し、 default.build.user と名前を変更するようになっています。このファイルの中には、ユーザーがどの行を編集・変更すればいいか判るように、セットアップのしかたをコメントとして追加しています。

ユーザーが不安にならないように、default.build.userを親フォルダーの無視リストに追加してあります。つまり、Subversionのsvn:ignoreプロパティをそのファイルに設定しています。これにより(バージョン管理外のファイルのように)コミットごとに表示されることがなくなります。

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

リポジトリから作業コピーを取得するには、 チェックアウト する必要があります。

Windows エクスプローラーで、作業コピーを作成したい場所のディレクトリを選択してください。 右クリック してコンテキストメニューを表示し、 TortoiseSVNチェックアウト... コマンドを選択してください。すると次のダイアログが表示されます。

図4.7 チェックアウトダイアログ

チェックアウトダイアログ


存在しないフォルダー名を指定すると、その名前のディレクトリが作成されます。

重要

初期設定では、チェックアウトのメニュー項目はTortoiseSVNのサブメニューではなく、エクスプローラーのメニューの最上位にあります。サブメニューの外にあるTortoiseSVNのコマンドは、先頭がSVNで始まっており、SVN チェックアウト...となっています。

チェックアウトの深さ

チェックアウトの際、 深さ を選択することで、子フォルダーを再帰処理する深さを選択できます。大きなツリーの一部だけをチェックアウトしたい場合は、まずツリーの一番上のフォルダーのみをチェックアウトし、それから選択されたフォルダーを再帰的に更新してください。

再帰的

子フォルダーやそのサブフォルダーを含む、ツリー全体をチェックアウトします。

直接の子階層(フォルダーを含む)

指定したディレクトリと、直下のすべてのファイルや子フォルダーをチェックアウトしますが、子フォルダー内のファイルはチェックアウトしません。

子階層のファイルのみ

指定したディレクトリと、直下のすべてのファイルをチェックアウトしますが、子フォルダーはチェックアウトしません。

この項目のみ

ディレクトリのみチェックアウトします。その中のファイルや子フォルダーはチェックアウトしません。

作業コピー

作業コピーに指定した深さを記憶します。このオプションは、チェックアウトダイアログでは使用されませんが、その他の深さの設定を持つダイアログでは、デフォルト設定となっています。

除外

フォルダーをすでに取り込んでしまった後で、作業コピーの深さを小さくするために使用します。このオプションは、 特定リビジョンへ更新 ダイアログでしか使用できません。

手っ取り早く必要な項目だけをチェックアウトし、その項目だけを保持しておくのであれば、 項目を選択... ボタンをクリックしてください。新しいダイアログが開くので、作業コピーに入れたいすべての項目をチェックして、それ以外の項目のチェックを外してください。作業コピーは部分的なチェックアウトという状態になります。この作業コピーを更新した場合は、チェックアウトされたファイルだけが更新され、存在しないファイルは更新されません。

作業コピーを部分的にチェックアウトした場合(つまり、チェックアウトする深さに再帰的以外を指定した場合)、次のような方法で後から簡単にサブフォルダーを追加したり除外したりすることができます。

「特定リビジョンへ更新」を使用して部分的に更新

チェックアウトされたフォルダーを右クリックして、TortoiseSVN特定リビジョンへ更新...を選択し、項目を選択...を選択してください。最初にチェックアウトしたときと同様のダイアログが表示されるので、チェックアウトに含めたい項目を選択したり解除したりします。この方法はとても柔軟ですが、フォルダーの中の項目が個別に更新されているときは遅くなる可能性があります。

リポジトリブラウザーを使用して部分的に更新

チェックアウトされたフォルダーで右クリックして、TortoiseSVNリポジトリブラウザーでリポジトリブラウザーを起動してください。作業コピーを追加しようとしているサブフォルダーを選択し、 コンテキストメニュー特定リビジョンへ更新... を実行してください。

「変更をチェック」を使用して部分的に更新

「変更をチェック」ダイアログでは、まず、Shiftを押しながらリポジトリをチェックボタンをクリックしてください。リポジトリに存在していてチェックアウトされていないファイルやフォルダーがすべて、リモート操作による追加としてダイアログに表示されます。作業コピーに追加したいフォルダーを右クリックし、 コンテキストメニュー更新 を実行してください。

この機能は、大きなツリーの一部をチェックアウトする時だけでなく、ひとつの作業コピーを更新する際にも非常に便利です。 Project01 から Project99 といったサブフォルダーがある大きなツリーがあり、 Project03Project25Project76/SubProj だけをチェックアウトしようとしているとしましょう。以下のような手順となります。

  1. 親フォルダーを、深さをこの項目のみとしてチェックアウトしてください。すると、空の最上位フォルダーができます。

  2. リポジトリの内容を表示するため、このフォルダーを選択し、 TortoiseSVNリポジトリブラウザー を実行してください。

  3. Project03 を右クリックし、コンテキストメニュー項目を特定リビジョンへ更新... を選択してください。デフォルトの設定のまま、 OK をクリックしてください。これでそのフォルダーがすべて取得されます。

    Project25 に対して同じ手順を繰り返します。

  4. Project76/SubProj に移動し、同様に行ってください。このとき Project76 フォルダーには、 SubProj 以外の項目が取得されていないことに注意してください。内容を取得せずに、中間フォルダーのみが作成されたのです。

作業コピーの深さの変更

作業コピーをある深さでチェックアウトしたあと、 コンテキストメニュー項目を特定リビジョンへ更新... を使用することで、後から深さを変更できます。そのダイアログで、 深さを記憶する のチェックボックスにチェックしてください。

古いサーバーを使用する場合

1.5以前のサーバーでは、作業コピーの深さの指定機能がないため、常にリクエストを効率的に処理できません。コマンドは正しく動作しますが、旧式のサーバーは、クライアントに必要でないデータまでフィルターせずに送ってしまうため、大量のネットワーク通信が発生する可能性があります。可能であれば、サーバーを1.5以上にアップグレードしてください。

プロジェクトに外部参照プロジェクトへの参照が含まれていて、同時にチェックアウト したくない 場合、 外部参照を除外する チェックボックスを使用してください。

重要

外部参照を除外する にチェックを付けたり、深さを増やしたりしたい場合は、作業コピーを更新するのに TortoiseSVN更新 ではなく、 TortoiseSVN特定リビジョンへ更新... を実行してください。通常の更新では外部参照を全て取得し、現在の深さを保持してしまいます。

ディレクトリツリーのトランク(trunk)部分か、それ以下をのみをチェックアウトすることをお勧めします。URLでディレクトリツリーの親パスを指定すると、プロジェクトのあらゆるブランチとタグを取得してしまうので、ハードディスクを使い切ってしまうかもしれません。

エクスポート

.svn ディレクトリを除いてコピーしたい場合があるかもしれません。例えば、ソースを圧縮したアーカイブファイルを作成するときなどです。どのように行うかは、 「Subversion 作業コピーをエクスポート」 をご覧ください。

変更のリポジトリへのコミット

作業コピーへの変更を送信することを、変更を コミット するといいます。しかしコミットする前に、作業コピーが最新になっているかどうか確認しなければなりません。 TortoiseSVN更新 を直接行うか、はじめに TortoiseSVN変更をチェック を使用して、サーバーやローカルのファイルに変更がないかどうか確認します。

コミットダイアログ

作業コピーが最新で競合がない場合、変更をコミットする準備ができています。コミットするファイルやフォルダーを選択し、 TortoiseSVNコミット... を実行してください。

図4.8 コミットダイアログ

コミットダイアログ


コミットダイアログには変更されたファイルや、追加・削除・バージョン管理外のファイルが表示されます。変更されたファイルをコミットしたくない場合は、ファイルのチェックをはずしてください。バージョン管理外のファイルを含める場合は、追加・コミットするファイルにチェックをつけてください。

バージョン管理中のファイルや変更されたファイルのすべてを手早くチェックしたり外したりしたい場合は、項目が表示されている一覧の上部にある項目をクリックしてください。

項目の状態に応じた色やオーバーレイについての詳細は、「ローカルとリモートの状態」をご覧ください。

別のリポジトリパスに切り替えた項目には、(s)マークが付きます。何かを切り替えてブランチで作業した後、トランクに戻すのを忘れている可能性もあります。これは警告マークです。

ファイルをコミットするかフォルダーをコミットするか

ファイルをコミットする際、コミットダイアログは選択したファイルのみ表示します。フォルダーをコミットする際には、コミットダイアログはファイルを自動で選択します。作成した新しいファイルを忘れていた場合でも、フォルダーをコミットすればそのファイルを探します。フォルダーをコミットするというのは、全てのファイルが変更されたとみなすという意味ではありません。単に楽ができるということです。

コミットダイアログにある大量のバージョン管理外ファイル

コミットダイアログにバージョン管理外のファイル(例えば、コンパイラーが生成したファイルやエディターのバックアップなど)を表示しすぎだと思う場合は、以下のような方法で対処できます。

  • 設定ページで除外リストにファイル(またはワイルドカード)を追加します。これはすべての作業コピーに影響します。

  • TortoiseSVN無視リストに追加svn:ignore にファイルを追加します。 svn:ignore プロパティを設定したディレクトリにのみ影響します。 Subversion のプロパティダイアログで、そのディレクトリの svn:ignore プロパティを変更できます。

  • TortoiseSVN無視リストに追加(再帰的)svn:global-ignore にファイルを追加します。 svn:global-ignore プロパティを設定したディレクトリに加え、すべてのサブフォルダーに影響します。

詳細は 「ファイルやディレクトリの無視」をご覧ください。

コミットダイアログで変更のあるファイルをダブルクリックすると、変更を確認するよう外部差分ツールが起動します。スクリーンショットにあるようにコンテキストメニューでもっとオプションを指定できます。ここからファイルをドラッグして、テキストエディターやIDEといったアプリケーションに持っていくこともできます。

項目の左にあるチェックボックスをクリックして、選択状態を切り替えられます。ディレクトリに対して、 Shift を押しながら選択すると、再帰的に動作します。

下の欄に表示される列はカスタマイズすることができます。列見出しの上で右クリックすると、表示される列を選択するコンテキストメニューが表示されます。また、列の境界上にマウスを持っていくとドラッグハンドルが表示され、列幅を変更できます。以上のカスタマイズは保存されるので、次回も同じ列見出しで表示されます。

デフォルトでは変更をコミットすると、コミット完了後に保持していたファイルのロックが自動的に解除されます。ロックを保持したままにしたい場合は、 ロックを保持 チェックボックスにチェックしておきます。チェックボックスのデフォルト状態は、 Subversion 設定ファイルの no_unlock オプションから取得されます。 Subversion 設定ファイルの編集については、 「一般設定」 をご覧ください。

タグへコミットする時に警告する

ふつう、コミットはトランクやブランチに対して行いますが、タグに対しては行いません。すなわち、タグは固定されているものだと考えられており、変更するべきではありません。

コミットがタグURLに関連付けられている場合、TortoiseSVNは最初に実際に何が行われるのかを確認するダイアログを表示します。そのようなコミットは間違いで行われることが多いからです。

しかし、このチェックはリポジトリの配置が推奨パターンのどれかである場合にのみ機能します。つまり3つのメインエリアを識別するためにtrunkbranchestagsの名称を使用している場合のみです。このようにセットアップされていない場合、どれがtag/branch/trunkなのか(分類パターンとして知られています)は、設定ダイアログ「「リビジョングラフの設定」」から設定できます。

ドラッグ&ドロップ

作業コピーが同じリポジトリからチェックアウトされているなら、別の場所からコミットダイアログにファイルをドラッグできます。例えば、遠くの階層を見るのに、複数エクスプローラーのウィンドウを開かなければならないような、巨大な作業コピーも扱えるかもしれません。長々フォルダーを変更チェックする、トップレベルフォルダーからコミットするのを避けたければ、あるフォルダーのコミットダイアログを開き、他のウィンドウから同時に不可分コミットしたい項目をドラッグしてください。

作業コピーの中にあるバージョン管理外のファイルも、コミットダイアログにドラッグできます。その際は自動的に追加が実行されます。

コミットダイアログの下部のリストから、ログメッセージ欄にファイルをドラッグすると、その欄に全ファイルのパスが文字列で挿入されます。コミット時のログメッセージに、コミットにより影響を受けるパスを記述したい場合に便利です。

外部での名前変更の修復

Subversion の外部でファイルの名前が変更された場合、ファイル一覧で紛失ファイルとして表示されたり、バージョン管理外ファイルとして表示されたりします。履歴を失わないように Subversion に関連を通知する必要があります。古い名前(紛失)と新しい名前(バージョン管理外)を選択し、 コンテキストメニュー移動を修復 を実行すれば、名前の変更が行われたことを示すことができます。

外部でのコピーの修復

ファイルのコピーをしたのに、 Subversion コマンドで行うのを忘れた場合、新しいファイルが履歴を失わないように、そのコピーを修復できます。古い名前(通常ないし変更)と新しい名前(バージョン管理外)を選択し、 コンテキストメニューコピーの修復 を実行するだけで、ファイルのコピーが行われたことを示すことができます。

変更リスト

コミットダイアログは、関連するファイルのグループ化を助ける Subversion の変更リスト機能をサポートしています。この機能については、 「変更リスト」 をご覧ください。

ファイルの一部だけをコミットする

時には、ファイルに対して行った変更の一部だけをコミットしたくなることがあるでしょう。例えば、何かを作業をしている途中で緊急の修正をコミットする必要に迫られ、しかも作業中のファイルに変更を加えなければならなくなった場合などです。

ファイルを右クリックし、コンテキストメニューコミット後に復元を実行してください。これでファイルの現状のコピーが作成されます。それからファイルをテキストエディターなどを使用して編集し、コミットしたくない変更点をすべて元に戻してください。変更を保存した後で、ファイルをコミットします。

TortoiseMergeの使い方

TortoiseMergeを使用してファイルを編集する場合、変更点を今までのように編集する方法のほか、含めたい変更をすべてマークする方法があります。変更されたブロック上で右クリックし、コンテキストメニューこの変更をマークを実行して変更を含めます。最後に右クリックし、コンテキストメニューマークした変更のみを残すを実行すると、マークした変更のみを含め、マークされていない変更を破棄するように右ビューを更新します。

コミットが完了すると、ファイルのコピーが自動的に復元され、コミットされていなかった変更点が元に戻ります。

コミット一覧からの項目の除外

バージョン管理下のファイルが頻繁に変更されても、コミットしたくないことがあります。これはビルドプロセスの弱点を表しています。なぜそのファイルをバージョン管理下に置いたのでしょう?テンプレートファイルを使用するべきではありませんか?しかし、時にこれはやむを得ないことがあります。古典的な理由としては、使用しているIDEが、ビルドする際に必ずタイムスタンプを更新してしまうということがあります。すべてのビルド設定を含んでいるため、プロジェクトファイルをバージョン管理下に置かなければなりませんが、単にタイムスタンプが更新されただけではコミットする必要はありません。

このような厄介なことを解決するのに、 ignore-on-commit という変更リストを用意されています。この変更リストに追加されたファイルは、コミットダイアログで自動的にチェックが外されます。チェックを入れれば、変更をコミットすることができます。

コミットログメッセージ

コミットする変更を説明するログメッセージを必ず入力してください。後日プロジェクトのログメッセージを閲覧するときに、いつ、何が起きたかを確認できます。メッセージは長くても簡潔でもお好みでよいのですが、多くのプロジェクトで、使用する言語や、厳密なフォーマットといった記述する内容のガイドラインがあります。

メールで使用するような規約を用いて、ログメッセージの簡単な整形を行うことができます。 text にスタイルを適用する場合、 *text* で太字、 _text_ で下線、^text^ で斜体になります。

図4.9 コミットダイアログのスペルチェッカー

コミットダイアログのスペルチェッカー


TortoiseSVN にはログメッセージを正しく書けるよう、スペルチェッカーが内蔵されています。これで間違った単語を強調表示できます。訂正候補にアクセスするには、コンテキストメニューを使用してください。もちろん、 すべて の技術用語が登録されているわけではないので、正しい綴りの単語がエラーとして表示される可能性があります。こうした用語は、コンテキストメニューから個人辞書に登録できます。

ログメッセージウィンドウは、ファイル名や関数の自動補完機能も持っています。コミットしようとしている(テキスト)ファイルから、クラス名や関数名を(ファイル名と同様に)抽出するのに正規表現を使用します。3文字入力したり、 Ctrl+Space を押したりしたとき、このリストにある単語と一致すると、名前全体を選択するドロップダウンを表示します。 TortoiseSVN が標準で持っている正規表現は、 TortoiseSVN をインストールした bin フォルダーに格納されています。自分で正規表現を定義し、 %APPDATA%\TortoiseSVN\autolist.txt に格納しておくこともできます。もちろん自分の autolist は TortoiseSVN をアップデートしても上書きされません。正規表現になじみがないのであれば、 http://ja.wikipedia.org/wiki/正規表現 にある説明や、 http://www.regular-expressions.info/ にあるオンラインドキュメントやチュートリアルをご覧ください。

完全に正しい正規表現を書くのは難しいので、式の組み合わせを整理しやすくするために、式を入力し、ファイル名を入力すれば、それがマッチするかどうかをテストできるテストダイアログを用意しています。コマンドプロンプトから、 TortoiseProc.exe /command:autotexttest とコマンドを入力すれば起動します。

ログメッセージウィンドウにはコミットメッセージのスニペット機能もついています。ショートカットキーを押すとスニペットの一覧が表示され、一覧から入力するスニペットを選択するとテキストが挿入されます。TortoiseSVN により提供されるスニペットは TortoiseSVN をインストールしたフォルダのbinの中にあります。%APPDATA%\TortoiseSVN\snippet.txt を編集することで自作のスニペットを作成することもできます。# はコメントキャラクターです。\n\r で改行を挿入できます。また、バックスラッシュを挿入するには \\ のようにエスケープします。

以前入力したログメッセージを再利用できます。最近のログメッセージをクリックして、その作業コピーで入力した最新のログメッセージ一覧を表示します。保存しているログメッセージの数は、 TortoiseSVN 設定ダイアログでカスタマイズできます。

TortoiseSVN の設定ダイアログの 保存データ ページで、保存されたコミットメッセージをすべて消去することができます。 最近のログメッセージ ダイアログで Delete キーを押すと、特定の保存されたログメッセージを消去することができます。

入力欄のコンテキストメニューファイル名のリストを貼付を実行すると、チェックしたパスをログメッセージに入れることができます。

ファイルリストにあるファイルをログメッセージの入力欄にドラッグするだけでも、ログメッセージにパスを入力することができます。

特殊なフォルダープロパティ

コミットログメッセージのフォーマットを制御したり、スペルチェッカーで使用する言語を指定する、特殊なフォルダープロパティがいくつかあります。詳細な情報は 「プロジェクト設定」をご覧ください。

バグ追跡ツールとの統合

バグ追跡ツールが有効なら、 バグID/課題番号():

コミットの進行状況

OKを押すと、コミットの進行状況を表示するダイアログが表示されます。

図4.10 コミットの状況を表示している進行ダイアログ

コミットの状況を表示している進行ダイアログ


進行ダイアログでは、コミット状態に応じて色分けで表示されます。

青色

変更のコミット

紫色

新規追加のコミット

暗赤色

削除・置換のコミット

その他すべての項目

これはデフォルトの色設定ですが、設定ダイアログで色をカスタマイズできます。詳細は 「TortoiseSVN の色の設定」をご覧ください。

他人の変更に伴う作業コピーの更新

図4.11 更新が完了したときの進行ダイアログ

更新が完了したときの進行ダイアログ


定期的に、他の人が行った変更を作業コピーに取り込まなければなりません。サーバーから作業コピーに変更を取り込む作業を、更新と言います。更新は単一のファイルに対して行うことも、複数の選択したファイルに対して行うことも、ディレクトリ構造に対して再帰的に行うこともできます。更新するには、更新したいファイルやディレクトリを選択し、右クリックで表示されるエクスプローラーのコンテキストメニューから、 TortoiseSVN更新 を実行してください。更新の進行を表すウィンドウがポップアップし、更新が始まります。他の人が行った変更が、作業コピーにマージされますが、作業コピーで行った変更はすべて保持されます。更新では、リポジトリに影響を与えません

進行ダイアログは更新の内容を色分けして、目立つようになっています。

紫色

作業コピーに新しい項目が追加された。

暗赤色

作業コピーから余分な項目が削除された、作業コピーの紛失項目が置き換えられた。

緑色

リポジトリからの変更がローカルの変更に正常にマージできた。

明赤色

リポジトリからの変更をローカルの変更にマージした結果、競合が発生して解決が必要になった。

作業コピー内の変更のない項目をリポジトリの新しいバージョンに更新した。

これはデフォルトの色設定ですが、設定ダイアログで色をカスタマイズできます。詳細は 「TortoiseSVN の色の設定」をご覧ください。

更新中に競合(同じファイルの同じ行を同時に変更して、それが一致しなかった場合に発生する)が発生したら、ダイアログでは競合を赤で表します。その行をダブルクリックして、外部マージツールを起動し競合を解決できます。

更新が完了すると、項目の更新・追加・削除・競合などの概略を進行ダイアログに表示します。概略情報は Ctrl+C でクリップボードにコピーできます。

標準の更新コマンドは、ただ作業ディレクトリをリポジトリの最新の HEAD リビジョンに更新します。指定するオプションは何もなく、ほとんどの場面ではこれで充分です。更新作業でこれ以上の制御をしたい場合は、代わりに TortoiseSVN特定リビジョンへ更新... を使用してください。このコマンドでは、最新のものだけでなく、特定のリビジョンに作業コピーを更新することができます。作業コピーがリビジョン100になっていて、それをリビジョン50の状態に戻したいのであれば、リビジョン50に更新するだけです。

同じダイアログで、現在のフォルダーを更新するときの 深さ を選択することもできます。選択肢の意味については、 「チェックアウトの深さ」をご覧ください。デフォルトでは 作業コピー が選択されており、これは現在の深さを維持します。また、深さを記憶するを選択することもできます。これを選択すると、以降の更新ではそれが新しい深さの初期値として使用されます。

項目を選択... ボタンをクリックすると、チェックアウト時に特定の項目を簡単に含めたり除外したりすることができます。新しいダイアログが開かれるので、作業コピーに入れたいすべての項目をチェックして、それ以外の項目のチェックを外してください。

更新の時には、特定の外部プロジェクトを無視するかどうかを選択できます(つまり、プロジェクトは svn:externals を使用して参照されます)。

注意

リビジョンを指定してファイルやフォルダーを更新した場合、そのファイルを変更するべきではありません。これをコミットしようとすると、作業コピーは最新ではありませんのエラーが発生します。ファイルへの変更を取り消し、直前のリビジョンから新しくはじめたい場合、リビジョンログダイアログから以前のリビジョンに戻してしてください。詳しい方法や代替案については、 「リポジトリのリビジョンのロールバック(取り消し)」をご覧ください。

特定リビジョンへ更新 は、履歴中の以前の時点ではどうだったかを見るのに時々は便利です。ですが一般的に、単独のファイルを以前のリビジョンに更新するのは、作業コピーを矛盾した状態にしかねないので、よい方法とは言えません。もし名前が変更されたことがあるファイルを更新すると、古いリビジョンではその名前では存在していなかったため、作業コピーから消えてしまい、探さなければならなくなるかもしれません。また、こうしたファイルには通常の緑のオーバーレイが表示されるので、最新のファイルと区別がつかないことにも注意してください。

単にそのファイルの古いリビジョンのローカルコピーが欲しければ、ログダイアログで選んだファイルに対して、 コンテキストメニューリビジョンを保存... コマンドを使用する方がよいでしょう。

複数のファイルやフォルダー

エクスプローラーで複数のファイルやフォルダーを選択し、 更新 を選択した場合、そのファイルやフォルダーをひとつずつ更新していきます。 TortoiseSVN は同じリポジトリから取得したファイルやフォルダーは、全く同じリビジョンに確実に更新します。この更新中に他の人からのコミットが発生してもです。

競合の解決

リポジトリから自分のファイルを更新・マージしたり、別の URL に作業コピーを切り替えたりすると、時には 競合 することもあります。競合には以下の二種類があります。

ファイルの競合

複数の開発者が、同じファイルの同じ行を変更すると、ファイルの競合が発生します。

ツリーの競合

開発者がファイルやフォルダーの移動・名前変更・削除を行い、別の開発者も移動・名前変更・削除を行ったり、単に変更すると、ツリーの競合が発生します。

ファイルの競合

ファイルの競合は、複数の開発者があるファイルの同じ行を変更した際に発生します。 Subversion はプロジェクトの事情を何も知らないため、開発者間の競合については解決できません。テキストファイルの場合、競合している箇所は以下のようなマークがつけられます。

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

また、競合しているファイルについては、3つのファイルが Subversion によって追加されます。

filename.ext.mine

作業コピーを更新する前に、作業コピーに存在していた(競合の印がついていない)ファイルです。このファイルには最新の変更のみが含まれています。

filename.ext.rOLDREV(OLDREV=旧リビジョン番号)

作業コピーを更新する前(BASE リビジョン)のファイルです。最新の編集を行う前にチェックアウトした時のファイルです。

filename.ext.rNEWREV(NEWREV=新リビジョン番号)

作業コピーを更新したときに Subversion クライアントが受信したファイルです。リポジトリの最新(HEAD リビジョン)に相当します。

TortoiseSVN競合の編集 で外部マージツールや競合エディターを起動するか、テキストエディターを使用して手作業で競合を解決するかしてください。コードがどうあるべきか決定し、必要な変更をしてから保存してください。TortoiseMergeやその他の有名なマージツールを使用した方が、3画面表示でこれらのファイルを確認でき、競合マーカーを気にする必要がないため、より簡単でしょう。テキストエディターを使用する場合は、 <<<<<<< という文字列で始まる行を検索してください。

その後、TortoiseSVN競合の解決コマンドを実行し、リポジトリに変更をコミットしてください。なお、競合の解決コマンドは、実際に競合を解決する訳ではありません。変更をコミットできるようにfilename.ext.minefilename.ext.r*ファイルを削除するだけです。

バイナリファイルが競合した場合、 Subversion はそのファイルをマージしようとしません。ローカルファイルには変更が加えられず(自分が変更したままで)、filename.ext.r*ファイルを作られます。自分の変更を取り消し、リポジトリのバージョンにしたい場合は、「変更の取り消し」コマンドを使ってください。リポジトリのバージョンを自分の変更したファイルで置き換えるのなら、「競合の解決」コマンドを実行してからコミットしてください。

親フォルダーを右クリックし、

プロパティの競合

複数の開発者が同じプロパティを変更した場合、プロパティの競合が発生します。ファイルの内容と同様に、競合は開発者のみが解決できます。

一方の変更を取り消してもう一方で上書きする場合は、ローカルのプロパティを用いて解決するリモートのプロパティを用いて解決するを選択してください。変更をマージする必要がある場合は、手作業でプロパティを編集を選択し、どのプロパティをどうするか決めてから、解決してください。

ツリーの競合

開発者がファイルやフォルダーを移動・名前変更・削除したときに、別の開発者が移動・名前変更・削除を行っていたり、変更をしていたりすると、ツリーの競合が発生します。ツリーの競合はさまざまな状況で起こり得ますし、その競合を解決するにはそれぞれ異なった手順が必要です。

また、ファイルが Subversion によりローカルで削除されると、ローカルファイルシステムからも削除されるため、ツリーの競合があったとしても競合のオーバーレイを表示できず、競合を解決しようにも右クリックもできません。 競合の編集 オプションを用いる代わりに、 変更をチェック ダイアログを使用してください。

TortoiseSVN は変更をマージするための正しい場所を見つけるのを支援することができますが、競合を整理するにはさらに作業が必要かもしれません。作業ベースを更新すると、常に更新時のリポジトリにある各項目のリビジョンが含まれます。更新後に変更を取り消した場合、そのリポジトリの状態へと戻り、変更開始時の状態には戻りません。

ローカルで削除、更新により編集を受信

  1. 開発者Aが Foo.c を変更し、リポジトリにコミットする。

  2. 開発者Bは同時に、作業コピーで Foo.cBar.c に移動したか、単に Foo.c またはその親フォルダ―を削除した。

開発者Bの作業コピーを更新した結果、次のようにツリーの競合が発生します。

  • Foo.c が作業コピーからすでに削除されていますが、ツリーの競合としてマークされます。

  • 削除ではなく名前変更の結果が競合した場合、Bar.cは追加としてマークされますが、開発者Aの変更点は含まれていません。

開発者Bは、現在、開発者Aの変更を保持するかどうかを選ばなければなりません。ファイルの名前変更の場合では、名前変更されたファイル Bar.c に対して、 Foo.c に行った変更をマージできます。単なるファイルやディレクトリの削除の場合には、開発者Aの変更を保持し、削除を取り消すという選択もできます。もしくは、何もせずに競合を解決したとみなし、事実上開発者Aの変更を破棄することもできます。

Bar.c に名前を変更する前のファイルが見つかれば、競合の編集ダイアログで変更をマージするかどうか尋ねてきます。複数のファイルが移動元である可能性がある場合は、それぞれのファイルのボタンが表示され、正しいファイルを選べます。

ローカルで編集、更新により削除を受信

  1. 開発者Aが Foo.cBar.c に移動し、リポジトリにコミットします。

  2. 開発者Bは Foo.c を、自分の作業コピーで変更します。

またはフォルダーの移動の場合...

  1. 開発者Aは、親フォルダー FooFolderBarFolder に移動し、リポジトリへコミットします。

  2. 開発者Bは Foo.c を、自分の作業コピーで変更します。

開発者Bの作業コピーを更新した結果、ツリーが競合しました。単純なファイルの競合では次のようになります。

  • Bar.c は作業コピーに通常ファイルとして追加されます。

  • Foo.c は(履歴と共に)追加されたとマークされ、ツリーが競合状態になります。

フォルダーの競合では次のようになります。

  • BarFolder は作業コピーに、通常のフォルダーとして追加されます。

  • FooFolder は(履歴と共に)追加されたとマークされ、ツリーが競合状態になります。

    Foo.c は変更されたとマークされます。

開発者Bは、開発者Aの再配置を受け入れて変更を移動先のファイルにマージするか、開発者Aの変更を取り消してローカルのファイルを保持するかを決めなければならなくなります。

彼女の移動を伴うローカルの変更をマージするには、開発者Bは競合ファイルFoo.cがリポジトリで何というファイル名に名前変更または移動されたかを調べなければなりません。これはマージ元のダイアログで行うことができます。それから、正しいソースを表すボタンを使用して、競合を解決します。

開発者Aの変更は誤りだと開発者Bが判断した場合は、競合の編集ダイアログの解決済みとするボタンを選択します。これは競合したファイルやフォルダーを、解決済みとしてマークしますが、開発者Aの変更は手作業で削除する必要があります。何が移動されたかを見つけ出すには、またログダイアログが役に立ちます。

ローカルで削除、更新により削除を受信

  1. 開発者Aが Foo.cBar.c に移動し、リポジトリにコミットします。

  2. 開発者Bが Foo.cBix.c に移動します。

開発者Bの作業コピーを更新した結果、次のようにツリーの競合が発生します。

  • Bix.c は、履歴と共に、追加されたとマークされます。

  • Bar.c は、作業コピーへ「通常」の状態で追加されます。

  • Foo.c は、削除されたとマークされ、ツリーが競合状態になります。

競合を解決するには、 Foo.c がリポジトリで名前変更・移動されたことに対する競合したファイルの名前を、開発者Bが調べなければなりません。これはログダイアログで行えます。

開発者Bが、 Foo.c の新しい名前の方を残すと決めた場合、開発者Aにしてもらうか、自分で名前変更できます。

開発者Bが、手作業で競合を解決した後で、競合の編集ダイアログのボタンで、ツリーの競合を解決済みにする必要があります。

ローカルで紛失、マージにより編集を受信

  1. トランクで作業している開発者Aが、 Foo.c を変更しリポジトリにコミットします。

  2. ブランチで作業している開発者Bが、 Foo.cBar.c に移動し、リポジトリにコミットします。

開発者Aのトランクへの変更を、開発者Bのブランチにマージすると、作業コピーは以下のようにツリーの競合状態になります。

  • Bar.c は、状態が「通常」で、すでに作業コピーにあります。

  • Foo.c は、紛失マークがつき、ツリーの競合状態になります。

この競合を解決するには、開発者Bが競合の解決ダイアログでファイルに解決済みにし、競合リストから取り除く必要があります。さらに、紛失ファイル Foo.c を、リポジトリから作業コピーへコピーするか、 Foo.c へ行った開発者Aの変更を、名前変更した Bar.c にマージするか、競合に解決マークを付ける他は何もしないかを決めなければなりません。

紛失したファイルをリポジトリから取得し、それから解決済みとすると、自分のコピーが再度削除されます。まず競合を解決しなければなりません。

ローカルで編集、マージにより削除を受信

  1. トランクで作業している開発者Aが、Foo.cBar.c に移動し、リポジトリにコミットします。

  2. ブランチで作業している開発者Bが、 Foo.c を変更しリポジトリにコミットします。

  1. トランクで作業している開発者Aが、親フォルダー FooFolderBarFolder に移動し、リポジトリにコミットします。

  2. ブランチで作業している開発者Bが、自分の作業コピーにある Foo.c を変更します。

開発者Aのトランクへの変更を、開発者Bのブランチにマージすると、作業コピーは以下のようにツリーの競合状態になります。

  • Bar.c には追加マークが付きます。

  • Foo.c はツリーの競合として、変更マークが付きます。

開発者Bは、開発者Aの再配置を受け入れて変更を移動先のファイルにマージするか、開発者Aの変更を取り消してローカルのファイルを保持するかを決めなければならなくなります。

再配置された結果にローカルの変更をマージするためには、開発者Bはまず、競合したファイル Foo.c がリポジトリ中でどのようなファイル名に名前変更・移動されたのかを探さなければなりません。マージ元のログダイアログを使用すると調べることができます。競合エディターは、どのパスがマージで使用されたのかを知らず、作業コピーのログを表示するだけですので、自分で探さなければなりません。現在のところ、この手順を自動化したり、単純化したりする方法がないからです。いったん変更を移植してしまえば、競合したパスは余分なものとなり、削除できます。

開発者Bが、開発者Aの変更は誤りだと判断した場合、競合の編集ダイアログの 解決済みとする ボタンを選択しなければなりません。これは 競合したファイルやフォルダーを、解決済みとしてマークしますが、開発者Aの変更は手で削除する必要があります。何が移動されたかを見つけ出すには、またマージソースのログダイアログが役に立ちます。

ローカルで削除、マージにより削除を受信

  1. トランクで作業している開発者Aが、Foo.cBar.c に移動し、リポジトリにコミットします。

  2. ブランチで作業している開発者Bが、Foo.cBix.c に移動し、リポジトリにコミットします。

開発者Aのトランクへの変更を、開発者Bのブランチにマージすると、作業コピーは以下のようにツリーの競合状態になります。

  • Bix.c は通常(未変更)状態としてマークされます。

  • Bar.c は履歴と共に追加マークが付きます。

  • Foo.c には紛失マークが付き、ツリーの競合状態となります。

競合を解決するには、 Foo.c がリポジトリで名前変更・移動されたことに対する競合したファイルの名前を、開発者Bが調べなければなりません。これはマージ元のログダイアログで行えます。

開発者Bが、 Foo.c の新しい名前の方を残すと決めた場合、開発者Aにしてもらうか、自分で名前変更できます。

開発者Bが、手作業で競合を解決した後で、競合の編集ダイアログのボタンで、ツリーの競合を解決済みにする必要があります。

他ツリーの競合

他にも、競合にファイルではなくフォルダーが含まれるために、単純にツリーの競合としてマークされている場合があります。例えば、トランクとブランチの両方に同じ名前のフォルダーを追加してからマージしようとした場合には、ツリーの競合と表示されます。マージ対象のフォルダーを維持したい場合は、単に解決済みとしてください。マージ元のどちらか一方を使用する場合は、最初のターゲットの1つに対してSVN 削除を実行し、再びマージを実行する必要があります。もっと複雑な場合は、手作業で解決する必要があります。

ステータス情報の取得

作業コピーで作業をしていると、ファイルに対して変更・追加・削除や名前の変更を行ったのかどうか、また他の人が変更してコミットしたファイルがあるかどうか知る必要があるでしょう。

アイコンオーバーレイ

図4.12 エクスプローラーのアイコンオーバーレイ表示

エクスプローラーのアイコンオーバーレイ表示


Subversion のリポジトリから作業コピーにチェックアウトすると、 Windows エクスプローラー上でファイルのアイコンが変化しているのが分かります。これこそ TortoiseSVN を有名にした理由のひとつです。 TortoiseSVN はオーバーレイアイコンと呼ばれるアイコンを、元のファイルアイコンの上に重ねて表示します。ファイルの Subversion における状態によってオーバーレイアイコンが変わります。

作業コピーにチェックアウトしたばかりのファイルには緑のチェックマークをオーバーレイします。Subversion の状態は 通常 です。

ファイルの編集をはじめるとすぐに状態が 変更 に変わり、アイコンオーバレイも赤いエクスクラメーションマークに変わります。これで最後に作業コピーを更新してからどのファイルに変更を加え、コミットする必要があるかどうか分かります。

更新中に 競合 が発生したら、黄色いエクスクラメーションマークのアイコンに変わります。

ファイルに svn:needs-lock プロパティを設定していると、 Subversion はそのファイルにロックをかけるまで読み取り専用にします。そのようなファイルには、編集前にロックするまで、このオーバーレイが表示されます。

ファイルをロックしており、かつ Subversion の状態が 通常 であれば、もう他人にファイルの変更を許可しても良いのにロックを解除し忘れないように、このアイコンが表示されます。

バージョン管理から 削除 されるカレントフォルダー内のファイルやフォルダー、またバージョン管理が紛失したフォルダー内にあるファイルにこのアイコンがつけられます。

バージョン管理に 追加 されるファイルやフォルダーには+印がつきます。

横棒印は、ファイルやフォルダーが、バージョン管理的に 無視 されていることを示します。このオーバーレイはオプションです。

バージョン管理下にないファイルやフォルダーで、無視されていない場合には、このアイコンが表示されます。このオーバーレイはオプションです。

実際のところ、上記のアイコンのすべてがシステムで使用されている訳ではないことが分かると思います。 Windows で使用できるオーバーレイの数はかなり制限されていますし、また TortoiseCVS の古いバージョンを一緒に使用していると、使用できるオーバーレイスロットが不足します。TortoiseSVN は Good Citizen ™ (良い市民)になれるように、他のアプリケーションにも使用する機会を与えるように、オーバーレイの使用を制限しています。

Tortoise クライアントが今より増えた場合(TortoiseCVS、TortoiseHg、...)、アイコンの限界は現実的な問題になります。この問題を回避するために、 TortoiseSVN プロジェクトではすべての Tortoise クライアントで共通に使用できる、 DLL で読み込むアイコンセットを導入しました。すでに統合されているかどうかを確認するには、クライアントの供給元に確認してください。 :-)

Subversion の状態に対応するアイコンオーバーレイの付き方や、その他の技術詳細は、 「アイコンオーバーレイ」 をご覧ください。

詳細なステータス

図4.13 エクスプローラーのプロパティページの Subversion タブ

エクスプローラーのプロパティページの Subversion タブ


オーバーレイアイコンより詳しい、ファイルやディレクトリに関する詳細情報を確認したい場合、エクスプローラーのプロパティダイアログから、 Subversion が提供するすべての情報を確認することができます。ファイルやディレクトリを選択し、コンテキストメニューの Windows メニュープロパティ を選択するだけです(TortoiseSVN のサブメニュー内のものではなく、エクスプローラーのプロパティであることに注意してください)。 Subversion の管理下のファイルやフォルダーでプロパティを表示すると、 TortoiseSVN 独自のプロパティページが表示されます。ここで、選択したファイルやフォルダーに関するすべての情報を見ることができます。

ローカルとリモートの状態

図4.14 変更をチェック

変更をチェック


自分でどのファイルを変更したか、また他の人がどのファイルを変更しコミットしたかを知ることは非常に有用です。これには TortoiseSVN変更をチェック... コマンドが役に立ちます。このダイアログは作業コピー内にある何らかの変更をしたファイルや、バージョン管理外のファイルをすべて表示します。

リポジトリをチェック をクリックすると、リポジトリで行われた変更を参照できます。競合が起こりそうな場合、更新前にこれで変更点を確認できます。リポジトリの全てのフォルダーを更新しないで、選択したファイルのみ更新することもできます。デフォルトでは、 リポジトリをチェック ボタンは、リモートの状態を作業コピーにチェックアウトした深さまで検索します。リポジトリ内のチェックアウトしていないファイルやフォルダーまで確認したい場合は、 Shift キーを押しながら リポジトリをチェック ボタンをクリックしてください。

このダイアログでは、状態が色分けして表示されます。

青色

ローカルで変更された項目です。

変更されていないファイルが移動されたディレクトリの中にあった場合、状態は状態の列に+を表示し、色が青になります。

紫色

追加された項目です。履歴から追加された項目には テキストの状態 列に + 印がつきます。また、項目のコピー元がツールチップに表示されます。

暗赤色

削除された・紛失した項目です。

緑色

ローカル及びリポジトリ内で変更された項目。更新時にマージされます。更新時に競合する かも しれません。

明赤色

ローカルで変更されリポジトリでは削除された、ないしリポジトリで変更されローカルで削除された項目。更新時に競合が 発生します

変更がなくバージョン管理外の項目です。

これはデフォルトの色設定ですが、設定ダイアログで色をカスタマイズできます。詳細は 「TortoiseSVN の色の設定」をご覧ください。

オーバーレイアイコンは他の状態を表示するためにも使われます。次のスクリーンショットは、必要な時に表示される可能性のあるすべてのオーバーレイを示しています。

オーバーレイは次の状態を示しています。

  • チェックアウトの深さがこの項目のみ、つまりこの項目のみであることを示します。

  • チェックアウトの深さが子階層のファイルのみ、つまりこの項目と、子フォルダーを除いたすべての子階層のファイルのみであることを示します。

  • チェックアウトの深さが直接の子階層、つまりこの項目と、すべての子階層のファイルとフォルダーを含め、子フォルダーの子フォルダーは除外されていることを示します。

  • ネストされた項目、つまり、作業コピーの中にある作業コピー。

  • 外部項目、つまり、svn:externalsプロパティで追加されたすべての項目。

  • コミット後に復元された項目。詳しくは「ファイルの一部だけをコミットする」をご覧ください。

  • svn:mergeinfoプロパティが変更された項目。それ以外のプロパティが変更されても、このオーバーレイは使われません。

異なるリポジトリのパスに切り替えた項目には、(s)印が示されます。ブランチで何かの作業を行った後で、トランクに切り替え忘れることがあるかもしれません。これが警告のサインです。コンテキストメニューを使用すれば、通常のパスに切り替えることができます。

このダイアログのコンテキストメニューから、変更点の差分を表示することができます。 自分 が行ったローカルの変更をチェックするには、 コンテキストメニュー作業ベースと比較 を使用してください。他人が行ったリポジトリへの変更は、 コンテキストメニューUnified形式で差分を表示 を使用してください。

個々のファイルの変更を取り消すこともできます。誤ってファイルを消してしまった場合には、 紛失 と表示されますし、 変更の取り消し を実行すればファイルを回復することができます。

バージョン管理外のファイルや無視されたファイルは、 コンテキストメニュー削除 でごみ箱に送ることができます。完全に(ごみ箱を経由させずに)ファイルを削除するには、 Shift キーを押したまま 削除 をクリックしてください。

ファイルの中を確認したければ、テキストエディターや IDE のような別のアプリケーションにファイルをドラッグするか、エクスプローラーのフォルダーにドラッグするかすれば、コピーを保存することができます。

リストの列はカスタマイズできます。列見出しの上で右クリックすると、表示する列を選択するコンテキストメニューが表示されます。また、列の境界上にマウスを持っていくとドラッグハンドルが表示され、列幅を変更できます。カスタマイズ結果は保存されるので、次回以降も同じ列見出しになります。

関連のない複数の仕事を一度に行った場合、変更リストにファイルをグループ化することもできます。詳しくは 「変更リスト」 をご覧ください。

ダイアログの下部に、作業コピーで使われている、リポジトリリビジョンの範囲の概要を表示しています。これは 更新 リビジョンではなく コミット リビジョンであり、ファイルが更新されたリビジョンではなく、ファイルが最後にコミットされた時のリビジョン範囲を表しています。作業コピー全体ではなく、表示されている項目のみのリビジョン範囲であることに注意してください。作業コピー全体に対してこの情報を表示する場合は、 表示する項目未変更 チェックボックスにチェックを入れてください。

ヒント

作業コピーに含まれるすべてのファイルやフォルダーを一度に表示したいような場合は、 変更をチェック ダイアログが一番簡単です。 表示する項目未変更 チェックボックスにチェックをつけると、作業コピー内のすべてのファイルが表示されます。

外部での名前変更の修復

Subversion の外部でファイルの名前が変更された場合、ファイル一覧で紛失ファイルとして表示されたり、バージョン管理外ファイルとして表示されたりします。履歴を失わないように Subversion に関連を通知する必要があります。古い名前(紛失)と新しい名前(バージョン管理外)を選択し、 コンテキストメニュー移動を修復 を実行すれば、名前の変更が行われたことを示すことができます。

外部でのコピーの修復

ファイルのコピーをしたのに、 Subversion コマンドで行うのを忘れた場合、新しいファイルが履歴を失わないように、そのコピーを修復できます。古い名前(通常ないし変更)と新しい名前(バージョン管理外)を選択し、 コンテキストメニューコピーの修復 を実行するだけで、ファイルのコピーが行われたことを示すことができます。

差分の表示

ファイルの中でどのような変更をしたのか確認する場合は、変更のあるファイルを選択して、TortoiseSVN のコンテキストメニューから 差分を表示 を選択してください。外部差分ビューアーが起動し、現在のファイルとチェックアウト・更新を行った直後のコピー(作業ベース、 BASE リビジョン)とを比較できます。

ヒント

作業コピー内にない場合や、複数のバージョンがある場合でも、差分を表示できます。

エクスプローラーで比較したい2つのファイルを選択(例えば Ctrl を押しながらクリック)し、 TortoiseSVN のコンテキストメニューから 差分を表示 を選択してください。最後にクリックしたファイル(フォーカスのある、つまり点線の四角で囲まれているもの)を最新として扱います。

変更リスト

常に一度にひとつの作業しか行わず、作業コピーには論理的にひとかたまりの変更しか存在しなければ理想的でしょう。しかし現実では、関連のない複数の作業を同時に行わなければならない場合がよくあります。そしてその場合、コミットダイアログには、変更したファイルがすべて混ざった状態で表示されてしまいます。 変更リスト 機能は、ファイルをグループにまとめ、どうするべきかを判りやすくしてくれます。もちろん、変更したファイルが重複していない場合に限ります。異なる仕事で同じファイルを変更した場合、変更を分割する方法はありません。

変更リストは様々な場所で目にすることができますが、最も重要なのは、コミットダイアログと変更のチェックダイアログです。いくつかの機能とたくさんのファイルに対して作業を行い、その後で変更のチェックダイアログを開きましょう。初めて変更のチェックダイアログを開くと、変更のあるファイルがすべて表示されます。機能単位に変更リストを作成し、ファイルをグループ化するとしておくとよいでしょう。

変更リストに項目を追加するには、ファイルを選択して コンテキストメニュー変更リストへ移動 を使用してください。初期状態では変更リストがありませんので、最初に新しい変更リストを作成します。変更リストに何のために使用するのか分かる名前を付けて、 OK をクリックしてください。ダイアログが項目のグループを表示するように変化します。

いったん変更リストを作成すると、別の変更リストや Windows エクスプローラーからも、項目をドラッグ&ドロップできます。エクスプローラーからドラッグすれば、ファイルを変更する前に変更リストに追加できるので便利です。変更のチェックダイアログからも同じことができますが、未変更ファイルすべてを表示しなければなりません。

図4.15 変更リストがあるコミットダイアログ

変更リストがあるコミットダイアログ


コミットダイアログでは、同じファイルが変更リストでグループ化されて表示されます。グループを視覚的に表示する機能とは別に、グループの見出しをコミットするファイルを選択するために使用することもできます。

ignore-on-commitという変更リスト名は、TortoiseSVNが自身で使用するために予約しています。これは、ローカルで変更があってもコミットしたくない、バージョン管理下のファイルをマークするのに使用します。この機能は、「コミット一覧からの項目の除外」で説明します。

通常、変更リストに属するファイルをコミットすれば、変更リストに所属させておく必要はなくなると考えられます。そのためデフォルトでは、コミットしたファイルは、変更リストから除外されます。変更リストに入れたままにしておきたい場合は、コミットダイアログの下部にある 変更リストを保持する をチェックしてください。

ヒント

変更リストは純粋にローカルクライアントの機能です。変更リストを作成・削除しても、リポジトリや他人の作業コピーには影響しません。単に自分でファイルを管理する、便利な方法でしかありません。

警告

なお、変更リストを使用する場合、外部参照はグループとして表示されなくなりました。変更リストがあるときは、ファイルやフォルダーが外部参照ではなく変更リストでグループ化されます。

延期

望んでいなくても、今までの作業を中断し、他の作業に取り掛からなくてはならないことがあります。例えば、すぐ対処が必要な深刻な問題が発生し、新機能に関する作業を中断しなければならない場合などです。可能であれば、完了した変更をコミットしてから緊急の課題に取り掛かるべきですが、しばしばそれらの変更はビルドを破壊したり、そもそもまだコミットできる状態ではなかったりします。

So if you can't commit your local changes yet, you have to put them aside while you're working on the urgent issue. The shelving feature helps you do exactly that: you can store your local changes on a shelve, get your working copy in a clean state again and work on the issue. After you're finished with the urgent issue and you've committed those changes, you can unshelve your shelved work and continue working on your previous task again.

Two new commands are implemented for this. One for shelving and one for unshelving.

To shelve your local changes, select your working copy and use Context MenuShelve The following dialog allows you to select the files you want to shelve and give a name under which you want to store them.

図4.16 延期ダイアログ

延期ダイアログ


If you select an existing shelf, then a new version is created for that shelf. If you provide a new name, a new shelf is created for the selected files.

If you click the Shelve button, the shelf is created and your working copy files are reset to a clean state. If you click the Checkpoint button, the shelf is created but your local modifications are kept.

To unshelve your changes, use Context MenuUnshelve to get the unshelve dialog. This dialog shows you a list of all shelved items. Select the shelved item you want and the version to apply back to your working copy and click Apply.

図4.17 延期の解除ダイアログ

延期の解除ダイアログ


ヒント

Shelves are purely a local client feature. Creating and removing Shelves will not affect the repository, nor anyone else's working copy.

Experimental

The shelving feature is still marked as experimental.

That means that while shelving works as advertised, it is still in a stage where it's heavily improved and worked on. That also means that there's no guarantee that the shelves you create are upwards compatible and future versions might not be able to use them. And of course the UI might change as well in future versions to accommodate new features and behaviors.

リビジョンログダイアログ

変更してコミットするたびに、変更点ついてのログメッセージを残しておきましょう。これを見れば、後からどんな変更をなぜ行ったのかがわかりますし、開発プロセスの詳細なログにもなります。

リビジョンログダイアログでは、すべてのログメッセージが取得され表示されます。画面は3つの部分に分かれています。

  • 上部のリストには、ファイルやフォルダーの変更がコミットされたリビジョンの一覧が表示されます。この欄にはコミット日時、そのリビジョンをコミットした人、ログメッセージの冒頭などが表示されます。

    青く表示されている行は、何かがこの開発ラインに(おそらくブランチから)コピーされてきたことを示しています。

  • 中央の欄には、選択したリビジョンのログメッセージ全体が表示されます。

  • 下部のリストには、選択したリビジョンで変更したファイルやフォルダーの一覧が表示されます。

他にも、コンテキストメニューのコマンドを使用すれば、プロジェクトの履歴についての追加情報を取得できます。

リビジョンログダイアログの起動

図4.18 リビジョンログダイアログ

リビジョンログダイアログ


ログダイアログは、様々な場所から表示することができます。

  • TortoiseSVN のコンテキストサブメニューから

  • プロパティページから

  • 更新が終わった進行ダイアログから。前回の更新から変更のあったリビジョンのみ、ログダイアログに表示されます。

  • リポジトリブラウザーから

リポジトリが使用できない場合、 オフラインにしますか? というダイアログが表示されます。詳しくは、 「オフラインモード」で説明します。

リビジョンログのアクション

上のリストの アクション 列には、そのリビジョンで何が行われたのかを示すアイコンが表示されます。4種類のアイコンが、それぞれ1列ずつ表示されます。

そのリビジョンでファイルやディレクトリが変更された場合、変更 アイコンが1列目に表示されます。

そのリビジョンでファイルやディレクトリが追加された場合、追加 アイコンが2列目に表示されます。

そのリビジョンでファイルやフォルダーが削除された場合、削除 アイコンが3列目に表示されます。

そのリビジョンでファイルやフォルダーが置換された場合、置換 アイコンが4列目に表示されます。

そのリビジョンでファイルやディレクトリが移動されたり名前が変更されたりした場合、移動 アイコンが4列目に表示されます。

そのリビジョンでファイルやフォルダーが移動または名前変更によって置換された場合、移動置換 アイコンが4列目に表示されます。

そのリビジョンでファイルやフォルダーがマージされた場合、マージ アイコンが4列目に表示されます。

そのリビジョンでファイルやフォルダーが逆マージされた場合、逆マージ アイコンが4列目に表示されます。

追加情報の取得

図4.19 リビジョンログダイアログの上部のリストのコンテキストメニュー

リビジョンログダイアログの上部のリストのコンテキストメニュー


ログダイアログの上部のリストには、より詳細な情報にアクセスできるコンテキストメニューがあります。このメニューにはファイルのログでしか現れないものや、フォルダーのログでしか現れないものがあります。

作業コピーと比較

作業コピーと選択したリビジョンを比較します。デフォルトの差分ツールは、 TortoiseSVN と共に提供されている TortoiseMerge です。フォルダーに対するログダイアログの場合、変更のあったファイルが一覧表示され、個々のファイルに対して変更を確認することができます。

作業ベースと比較/注釈履歴

選択したリビジョンと作業ベースのファイルの注釈履歴を取得し、差分ツールを使用して比較します。詳しくは 「注釈履歴の差分」を参照してください。(ファイルのみ)

Unified形式で変更を表示

選択したリビジョンで行われた変更点を、Unified差分ファイル(GNUパッチ形式)で表示します。差分のみが数行で表示されます。視覚的なファイル比較よりも分かりにくいのですが、すべての変更をまとめてコンパクトな形式で確認できます。

Shift キーを押しながらメニュー項目をクリックすると、最初にUnified差分ファイルのためのオプションを設定するためのダイアログが開きます。これらのオプションの中に、行末文字や空白文字の変更を無視するものが含まれています。

直前のリビジョンと比較

選択したリビジョンを直前のリビジョンと比較します。作業コピーとの比較と同じように動作します。フォルダーに対してこの操作を実行すると、まず比較するファイルを選択する「変更されたファイル」ダイアログが表示されます。

直前のリビジョンと比較/注釈履歴

ファイルを選択する「変更されたファイル」ダイアログが表示されます。選択したリビジョンと直前のリビジョンの注釈履歴を取得し、差分ツールを使用して結果を比較します。(フォルダーのみ)

リビジョンを保存...

選択したリビジョンをファイルに保存し、そのファイルの古いバージョンを入手します。(ファイルのみ)

開く/プログラムを指定して開く...

ファイル形式に対応する既定のビューアー、もしくは選択したプログラムのどちらかを用いて、選択したファイルを開きます。(ファイルのみ)

注釈履歴...

選択したリビジョンまでのファイルの注釈履歴を表示します。(ファイルのみ)

リポジトリの閲覧

選択したファイルやフォルダーを閲覧するため、リポジトリブラウザーを選択したリビジョンで開きます。

リビジョンからブランチ/タグを作成

選択したリビジョンからブランチやタグを作成します。タグを作成し忘れて、リリースに入れることを前提としていない変更をすでにコミットしてしまったような場合に便利です。

項目を特定リビジョンへ更新

作業コピーを選択したリビジョンに更新します。時間をさかのぼり、作業コピーを過去の状態にしたい場合や、リポジトリに他のコミットが行われた後で、作業コピーを一度に更新したい場合に便利です。単体のファイルではなく、作業コピー全体のディレクトリを更新するとよいでしょう。そうでなければ作業コピーに矛盾が発生してしまいます。

以前の変更点を永久に取り消したい場合は、代わりに このリビジョンに戻す を使用してください。

このリビジョンに戻す

以前のリビジョンに戻します。既にいくつか変更を行った後で、リビジョン N へ戻したい場合に使用するコマンドです。変更の取り消しは作業コピーで行われますので、変更をコミットするまではリポジトリに影響を 与えません 。選択したリビジョン以降の変更が すべて 取り消され、ファイルやフォルダーが以前のリビジョンに置き換えられてしまうので注意してください。

作業コピーが未変更の状態の場合、この操作を実行すると、作業コピーが変更の状態になります。すでに変更されている場合、このコマンドは作業コピーの変更を 取り消す 方向にマージします。

内部的には、 Subversion は選択されたリビジョンの後に行われたすべての変更の逆マージを実行し、以前のコミットの効果を元に戻すという動作をします。

この操作の後で、 元に戻したものを元に戻し 、作業コピーを以前の変更されていない状態に戻す場合、Windows エクスプローラーから TortoiseSVN変更の取り消し を実行し、逆マージ操作で行われたローカルの変更を取り消してください。

以前のリビジョンで、どんなファイルやフォルダーがあったのかを見たいだけであれば、代わりに 特定リビジョンへ更新リビジョンを保存... を使用してください。

このリビジョンにおける変更を取り消す

選択したリビジョンの変更を取り消します。作業コピーの変更が取り消されるので、この操作はリポジトリにまったく影響を 及ぼしません 。 そのリビジョンで行われた変更のみが元に戻されることに注意してください。作業コピーのファイル全体が以前のリビジョンに置き換えられるわけではありません。関係ない変更を行った後で、以前の変更を元に戻すのに便利です。

作業コピーが未変更の状態の場合、この操作を実行すると、作業コピーが変更の状態になります。すでに変更されている場合、このコマンドは作業コピーの変更を 取り消す 方向にマージします。

内部的には、 Subversion は選択したリビジョンで行われた変更の逆マージを実行し、以前のコミットの効果を元に戻すという動作をします。

このリビジョンに戻す で説明しているように、 元に戻したものを元に戻す こともできます。

このリビジョンをマージ...

選択したリビジョンを異なる作業コピーにマージします。フォルダー選択ダイアログでマージ結果を格納する作業コピーを選択できますが、確認ダイアログはなく、またマージのテストもできません。変更されていない作業コピーを用い、選択したリビジョンをマージするのに失敗したら変更を取り消すとよいでしょう。これはあるブランチから別のブランチへ、選択したリビジョンをマージするのに便利な機能です。

チェックアウト...

選択したリビジョンの選択したフォルダーを新たにチェックアウトします。 URL とリビジョンを確認するダイアログが現れるので、チェックアウトする場所を選択してください。

エクスポート...

選択したリビジョンの選択したファイルやフォルダーをエクスポートします。 URL とリビジョンを確認するダイアログが現れるので、エクスポートする場所を選択してください。

作者・ログメッセージを編集

以前に行ったコミットのログメッセージや作者を編集します。どのように行うかは、 「ログメッセージや作者の変更」をご覧ください。

リビジョンプロパティを表示

ログメッセージと作者に限らず、任意のリビジョンプロパティを表示・編集します。 「ログメッセージや作者の変更」をご覧ください。

クリップボードにコピー

選択したリビジョンのログ詳細をクリップボードにコピーします。これにはリビジョン番号、著者、日時、ログメッセージ、変更した項目の一覧がコピーされます。

ログメッセージを検索...

入力したテキストでログメッセージを検索します。ログメッセージの入力された部分と、 Subversion が作成した動作の概要(下の欄に表示)も検索対象になります。大文字小文字は区別されません。

Code Collaboratorのレビューを作成...

このメニューは、 SmartBear Code Collaborator がインストールされている場合にのみ表示されます。最初に実行すると、 Code Collaborator と Subversion の両方のユーザー認証を求めるダイアログが表示されます。いったん設定が格納されると、 Ctrl を押したままメニュー項目を実行しない限り、設定ダイアログは表示されなくなります。設定や選択されたリビジョンが Code Collaborator の GUI クライアントの起動に使用され、選択されたリビジョンに対して新しいレビューが作成されます。

図4.20 Code Collaborator 設定ダイアログ

Code Collaborator 設定ダイアログ


図4.21 2つのリビジョンを選択した時の上部のリストのコンテキストメニュー

2つのリビジョンを選択した時の上部のリストのコンテキストメニュー


同時に2つのリビジョンを(Ctrl を押しながら)選択すると、コンテキストメニューの内容が以下の機能に変わります。

リビジョンを比較

選択した2つのリビジョンを差分ツールで比較します。デフォルトの差分ツールは、 TortoiseSVN に同梱されている TortoiseMerge です。

フォルダーに対して実行した場合、変更のあったファイルを一覧表示するダイアログが表示され、差分を表示するオプションを指定できます。リビジョン比較ダイアログについては、 「フォルダーの比較」をご覧ください。

リビジョンの注釈履歴

2つのリビジョンの注釈履歴をとり、差分ツールで比較できます。詳細は、 「注釈履歴の差分」をご覧ください。

Unified形式で差分を表示

選択した2つのファイルの差分を、Unified差分ファイルで表示します。ファイルとフォルダーで動作します。

クリップボードにコピー

前述したように、ログメッセージをクリップボードにコピーします。

ログメッセージを検索...

前述したように、ログメッセージを検索します。

2つ以上のリビジョンを選択(通常 CtrlShift を押しながら選択)すると、コンテキストメニューには「これらのリビジョンにおける変更を取り消す」項目が現れます。これがリビジョンのグループを変更を一度に取り消す、最も簡単な方法です。

また、前述のとおり、選択したリビジョンを別の作業コピーにマージできます。

選択したすべてのリビジョンが、同じ作者のものであれば、すべてのリビジョンの作者を一気に編集できます。

図4.22 ログダイアログ下部の一覧でコンテキストメニューを表示したところ

ログダイアログ下部の一覧でコンテキストメニューを表示したところ


ログダイアログの下の欄にも、

変更を表示

選択されたファイルの選択されたリビジョンにおける変更を表示する。

変更の注釈履歴

選択したファイルの、選択したリビジョンと直前のリビジョンの注釈をとり、視覚差分ツールで比較できます。詳細は、 「注釈履歴の差分」 をご覧ください。

Unified形式で変更を表示

ファイルの変更点をUnified差分ファイルで表示します。このコンテキストメニューは、ファイルに 変更 がある時のみ有効です。

開く/プログラムを指定して開く...

選択したファイルを、ファイル形式に応じた既定のビューアーか選択したプログラムで開きます。

注釈履歴...

注釈履歴ダイアログを開き、選択したリビジョンの担当情報を参照できます。

このリビジョンにおける変更を取り消す

選択したファイルのこのリビジョンでの変更を取り消します。

プロパティを表示

選択した項目の Subversion のプロパティを表示します。

ログを表示

単体のファイルを選択しているとき、ファイルのリビジョンログを表示します。

マージのログを取得する

単体のファイルを選択しているとき、ファイルのマージされた変更を含めリビジョンログを表示します。詳細は 「マージ追跡機能」 をご確認ください。

リビジョンを保存...

選択したリビジョンをファイルに保存し、そのファイルの古いバージョンを入手します。

エクスポート...

このリビジョンの選択された項目を、ファイルの階層を保持したままエクスポートします。

のためのコンテキストメニューがあります。ログダイアログの下の欄で複数のファイルが選択されていた場合、コンテキストメニューは次のように変化します。

図4.23 ログダイアログ下部の一覧で複数ファイル選択時にコンテキストメニューを表示したところ

ログダイアログ下部の一覧で複数ファイル選択時にコンテキストメニューを表示したところ


リビジョンを保存...

選択したリビジョンをファイルに保存し、そのファイルの古いバージョンを入手します。

複数の更新を表示...

選択されたファイルの選択されたリビジョンで行われた変更を表示します。なお、変更の表示機能が複数回呼び出されるので、選択されている差分ツールによっては複数が起動したり、タブに表示されたりします。16件以上のファイルが選択されていた場合は、操作を行うかどうかの確認が表示されます。

複数のローカルファイルを開く...

これは選択されたファイルに対応するローカルの作業コピーを、拡張子に登録されたアプリケーションを使用して開きます。[作業コピーのファイルをWindowsのエクスプローラー上でダブルクリックした場合と同じです。]ファイルの拡張子のアプリケーションへの関連付け方法や、アプリケーションの能力によっては、速度が遅くなることがあります。最悪の場合、選択されたそれぞれのファイルに対してアプリケーションの新しいインスタンスが起動される可能性があります。

Ctrlを押しながらこのコマンドを実行すると、作業コピーのファイルは常にVisual Studioで開かれます。このように動作するのは、Visual StudioがTortoiseProc.exeと同じプロセス統合レベル(管理者として実行されているかどうか)の同じユーザーコンテキストで動作している場合のみです。これはソリューションが重要ではないが変更されたファイルを読み込んでいる場合に便利かもしれません。拡張子.cpp、.h、.cs、.rc、.resx、.xaml、.js、.html、.htm、.asp、.aspx、.php、.css、.xmlのファイルがディスク上にある場合のみ開かれます。一度に最大100件のファイルをVisual Studioで開くことができ、開いているVisual Studioに常に新しいタブとして読み込まれます。Visual Studioでコードの変更を見るメリットは、内蔵のコードナビゲーション、参照の検索、スタティックコードの分析、その他のVisual Studioに内蔵された各種ツールを利用できることです。

エクスポート...

選択されたリビジョンの選択されたファイルやフォルダーをエクスポートします。URLとリビジョンを確認するダイアログが表示されますので、エクスポートする場所を選択してください。

ヒント

「変更」と「差分」という用語が使い分けられていることにお気づきと思います。では差分とはなんでしょうか?

Subversion では、リビジョン番号を2つの異なる意味で使用しています。一般的にリビジョンといえば、その時点でのリポジトリの状態を表しますが、一方ではリビジョンを作成した際の一連の変更を表す場合に使用することもあります。例えば、r1234での変更といえば、r1234の変更のコミットで実装された機能 X のことを表します。どちらの意味で使用されているかを明確にするために、2つの用語を使い分けます。

リビジョン N とリビジョン M を選択すると、その2つのリビジョンの 差分 をコンテキストメニューで表示できるようになります。 Subversion のコマンドでは、これは diff -r M:N に相当します。

リビジョン N を選択した場合、そのリビジョンで行った 変更 をコンテキストメニューで表示できるようになります。 Subversion のコマンドでは、これは diff -r N-1:Ndiff -c N に相当します。

下のリストには、選択したリビジョンで変更されたすべてのファイルが表示されます。そのため、コンテキストメニューには常に 変更を表示 となるのです。

ログメッセージの追加取得

ログダイアログは以下のような場合、変更履歴を最後まで表示しないことがあります。

  • 大きなリポジトリでは何百何千もの変更があり、すべて取得するには時間がかかるため。しかし通常参照する変更は最近のものだけでしょう。デフォルトでは取得するログメッセージは100件に制限されていますが、 TortoiseSVN設定 「TortoiseSVN ダイアログ設定1」)で変更できます。

  • コピー/名前の変更が発生したら停止 がチェックされていると、ログの表示は選択されたファイルやフォルダーが他の場所からコピーされてきた時点で停止します。これはブランチ(やタグ)を参照するときに、ブランチの作成時点で停止するので、ブランチ内部の変更をすばやく表示できるので便利です。

    通常、このオプションをチェックしないままにしておきたいのではないでしょうか。 TortoiseSVN はチェックボックスの状態を記憶していますので、その設定が尊重されます。

    マージダイアログからログダイアログを表示すると、このチェックボックスは、デフォルトで常にチェックされます。これは通常のマージ作業ではブランチ内部の変更を調べるものであり、ブランチの作成時点を超えて遡るようなことはないからです。

    Subversion は現在、名前の変更をコピー・削除で行います。そのため、このオプションにチェックがついていると、ファイルやフォルダーの名前を変更した時点でログの表示が停止することに注意してください。

ログメッセージをもっと見たい場合は、次の100件 をクリックして次の100件のログメッセージを取得してください。必要なだけ繰り返せます。

このボタンの隣に多機能ボタンがあります。前回使用したオプションが記憶されていますが、三角形をクリックすると、他のオプションを指定できます。

表示する範囲を指定... を使用すると、表示するリビジョンの範囲を指定することができます。ダイアログが表示されるので、開始リビジョンと終了リビジョンを指定してください。

すべて表示 を使用すると、 HEAD からリビジョン 1 までさかのぼって すべての ログメッセージを表示することができます。

ログダイアログを開いている間に他のコミットが実行された場合など、最新のリビジョンに更新したい場合は、 F5 キーを押してください。

ログキャッシュを読み込みなおすには、 Ctrl+F5 キーを押してください。

現在の作業コピーのリビジョン

ログダイアログは、現在の作業コピーのリビジョンではなく、 HEAD リビジョンからログを表示するため、まだ作業コピーに取得されていない部分のログメッセージが表示されることがよくあります。これを明確にするために、作業コピーのリビジョンに一致するコミットメッセージは太字で表示されます。

フォルダーのログが表示される際、太字で表示されるリビジョンは、フォルダー内のファイルの最新のリビジョンになります。これには作業コピーのクロールが必要です。クロールは別スレッドで実行するため、ログ表示に遅延は起こりませんが、フォルダーによってはすぐに太字で表示されないことがあります。

マージ追跡機能

Subversion 1.5 以降では、プロパティでマージ情報を保持しています。これにより、マージでの変更点の詳細な履歴を得られます。例えば、ブランチで新機能を開発し、それをトランクにマージした場合、たとえブランチでの開発で1000回コミットしたとしても、トランクではマージした1回分のログしか存在しなくなります。

図4.24 マージ追跡リビジョンを表示したログダイアログ

マージ追跡リビジョンを表示したログダイアログ

マージを含んだコミットのリビジョンの詳細を見る場合、 マージされたリビジョンを含める チェックボックスを使用してください。これによりログメッセージを再取得しますが、マージされたリビジョンに由来するのログメッセージが挿入されます。マージされたリビジョンは、別ツリーで変更されているので、灰色で表示されます。

もちろん、マージは決して単純ではありません。ブランチでの機能開発中、メインラインコードと同期を取り続けるために、トランクからたびたび行わなければならないでしょう。そのため、ブランチのマージ履歴には、別レイヤのマージ履歴が含まれていることでしょう。ログダイアログでは、異なるレイヤをインデントレベルで表します。

ログメッセージや作者の変更

リビジョンプロパティは、項目の Subversion プロパティとは異なるものです。リビジョンプロパティは、ログメッセージやコミット日時、コミットした人(作者)といった、リポジトリの特定のリビジョン番号に関連する説明的な項目です。

時には、一度入力したログメッセージを変更したいこともあるでしょう。綴り間違いがあったり、またメッセージを改善したり、その他の理由で変更したくなるかもしれません。また、コミットした作者を変更したくなるかもしれません。認証を設定し忘れてしまったとか……

Subversion では、必要に応じてリビジョンプロパティをいつでも変更できます。しかし、その変更を元に戻せない(この変更はバージョン管理外になります)ので、デフォルトではこの機能は無効になっています。有効にするには、 pre-revprop-change フックを設定する必要があります。この手順の詳細については、 Subversion Book の Hook Scripts をご覧ください。 Windows マシンでのフックの実装については、 「サーバー側フックスクリプト」 をご覧ください。

いったん必要なフックをサーバーに設定してしまえば、任意のリビジョンに対して、作者やログメッセージ(またはその他のリビジョンプロパティ)を変更できます。ログダイアログの上部のリストのコンテキストメニューを使用してください。中央の欄のコンテキストメニューを使用して、ログメッセージを編集することもできます。

警告

Subversion のリビジョンプロパティはバージョン管理されないため、リビジョンプロパティ(例えば svn:log コミットメッセージプロパティ)を変更すると、直前の値を 完全に 上書きしてしまいます。

重要

TortoiseSVN はすべてのログ情報のキャッシュを保持しているため、変更を行った作者やログメッセージはローカル環境でのみ表示されます。ログキャッシュが更新されるまでの間、他のユーザーには、キャッシュされた(古い)作者やログメッセージが表示されます。「表示の更新」を参照してください

ログメッセージの絞り込み

興味あるログメッセージを限定して表示させたい場合は、何百もあるリストをスクロールするよりも、ログダイアログの上端にある絞り込みコントロールを使用したほうが便利です。日付の範囲を指定すると、その範囲のメッセージだけに絞り込むことができます。検索ボックスに文字列を入力すると、その文字列が含まれるメッセージだけに絞って表示できます。

検索アイコンクリックすると、検索対象となる情報の種類や、 正規表現 を使用するかどうかを選択できます。普段は単純な文字列検索で充分でしょうが、より複雑な検索条件を指定したい場合は、正規表現を使用することができます。検索ボックスの上にマウスを置くと、正規表現の記号や特殊文字の使い方がツールチップで表示されます。絞り込み文字列がログ項目と一致するかどうかがチェックされ、絞り込み文字列と 一致 した項目のみが表示されます。

単純な文字列での検索の仕方は、検索エンジンと似ています。複数の文字列を空白で区切って入力すると、すべての文字列を含む項目が検索されます。文字列の前に - を付けると、その文字列が含まれないものが検索されます(語句の否定検索)。そして、最初に ! を付けると、検索文字列全体が否定になります。前に + を付けた文字列は、以前に - を付けて除外した文字列であっても、含まれるものが検索されます。なお、含まれる・除外される指示の順番が重要であることに気を付けてください。空白を含む文字列を検索する場合は、文字列を引用符で囲んでください。引用符の文字を含む文字列を検索する場合は、引用符を2つ並べてエスケープしてください。なお、バックスラッシュ文字はエスケープ文字 ではなく 、単純な文字列検索では特別な意味を持たないことに注意してください。次のサンプルを見たほうが簡単でしょう。

Alice Bob -Eve

は、 Alice と Bob を含み、 Eve を含ま内文字列を検索します。

Alice -Bob +Eve

は、 Alice を含んでかつ Bob を含まないか、 Eve を含む文字列を検索します。

-Case +SpecialCase

は、 Case という文字列を含まないが、 SpecialCase という文字列は含む文字列を検索します。

!Alice Bob

は、 Alice も Bob も含まない文字列を検索します。

!-Alice -Bob

は、ド・モルガンの法則を思い出してください。 NOT(NOT Alice AND NOT Bob) なので、 (Alice OR Bob) となります。

"Alice and Bob"

は、 Alice and Bob という文字列を検索します。

""

は、テキストのどこかに二重引用符が含まれている文字列を検索します。

"Alice says ""hi"" to Bob"

は、 Alice says "hi" to Bob という文字列を検索します。

正規表現についての説明はこのマニュアルの範囲外です。 http://ja.wikipedia.org/wiki/正規表現 にある説明や、 http://www.regular-expressions.info/ にあるオンラインのドキュメントやチュートリアルをご覧ください。

絞り込みは、すでに取得したメッセージのみが対象になることに注意してください。リポジトリからメッセージをダウンロードすることはありません。

また、 影響を受けるパスのみ表示 を使用すると、下の欄のパス名を絞り込みすることもできます。影響を受けるパスとは、ログを表示するために使われたパスを含むパスです。フォルダーのログを取得する場合は、そのフォルダー以下すべてが対象になります。ファイルの場合は、そのファイルのみが対象になります。通常、パスのリストには影響を受けるパス以外にも、同時にコミットされたパスが灰色で表示されます。ボックスをチェックすると、それらのパスは非表示になります。

運用上、ログメッセージを特定の書式に統一したい場合があります。変更点の説明文が、上部のリストに表示される冒頭の部分に表示されない場合などです。 tsvn:logsummary プロパティを使用すると、上部のリストに表示されているログメッセージの一部を抽出できます。このプロパティの使い方は、 「TortoiseSVN のプロジェクトプロパティ」 をご覧ください。

リポジトリブラウザーからログのフォーマット変更はできません

ログのフォーマット変更は、 Subversion のプロパティとして保持されているため、チェックアウトした作業コピーを使用するときのみ表示されます。リモートからプロパティを取得するのには時間がかかるため、リポジトリブラウザーから起動した場合はこの機能が表示されません。

統計情報

ログダイアログの 統計 ボタンは、リビジョンについての興味深い情報を表示します。作業者が何人いるのか、コミットは何回行われているのか、週ごとの進行状況、等といった情報です。これで、誰ががんばり屋で誰がなまけ者か一目で分かります。;-)

統計ページ

このページでは、期間やリビジョン数、最小・最大・平均などの集計値のような参考になる数値を提供します。

「作者別コミット数」ページ

図4.25 「作者別コミット数」ヒストグラム

「作者別コミット数」ヒストグラム


このグラフは、プロジェクト内のどのユーザーがアクティブかを、ヒストグラム、積み重ね棒グラフ、円グラフで表します。

図4.26 「作者別コミット数」円グラフ

「作者別コミット数」円グラフ


少数の主要な作者と、多数の細かい協力者がいる環境では、細分化されてグラフが読みにくくなります。グラフの下にあるスライダーを使用して閾値(全コミットにおけるパーセンテージ)を設定すると、活動状況が閾値以下の人が その他 カテゴリにグループ化されます。

「時期別コミット数」ページ

図4.27 「時期別コミット数」グラフ

「時期別コミット数」グラフ


このページでは、プロジェクトの活動状況を、一定期間のコミット回数 および 作者別で表示します。これによりプロジェクトがいつ活動していたか、そのとき誰が作業したかといった判断材料になるでしょう。

多数の作者がいる場合、グラフにたくさんの線が表示されます。この画面ではさらに2つの表示方法が使用できます。 折れ線グラフ は、作者の活動状況ごとに表示し、 積み重ね面グラフ は、作者の活動状況を積み重ねて表示します。後者では線が交差しなくなるためため、グラフは読みやすくなりますが、個別の作者の状況は読みにくくなります。

デフォルトでは、分析する際、ユーザー名の大文字と小文字が区別されます。そのため、 PeterEganPeteRegan というユーザーは別人として扱われます。しかし多くの場合、ユーザー名の大文字と小文字を区別しておらず、時には混同して入力されます。つまり、 DavidMorgandavidmorgan を同一として扱うということです。 作者名の大文字/小文字を区別しない チェックボックスを使用して、どのように扱うかを決めてください。

この統計はログダイアログと同じ期間が対象になることに注意してください。1リビジョンしか表示していないときには、統計には大した情報は現れません。

オフラインモード

図4.28 オフライン移行ダイアログ

オフライン移行ダイアログ


ログキャッシュを有効にしている場合、サーバーに接続できなくても、ログダイアログやリビジョングラフはオフラインモードで使用できます。これはキャッシュからのデータを使用し、作業を継続できますが、おそらく最新でも完全でもありません。

ここでは以下の3つの選択肢があります。

オフラインにする

現在の操作を完全にオフラインモードにしますが、ログデータが次回要求されたときに、リポジトリへの接続を再試行します。

常にオフライン

リポジトリのチェックを明確に要求されるまで、オフラインモードのままにします。 「表示の更新」をご覧ください。

キャンセル

おそらく陳腐化したであろうデータで操作を継続したくない場合は、単にキャンセルとしてください。

デフォルトに設定する チェックボックスは、このダイアログを再度表示しないようにし、選択を常に使用します。ここで設定したとしても、 TortoiseSVN設定 で、デフォルト値の変更(削除)が行えます。

表示の更新

新しいログメッセージを取得するためにサーバーを再チェックする場合、単純に F5 で表示を更新できます。ログキャッシュを使用している場合(デフォルトで有効)、新しいログメッセージがあるかリポジトリをチェックし、新しいもののみを取得します。ログキャッシュがオフラインモードになっている場合、オンラインモードに切り替えを試みます。

ログキャッシュを使用しており、メッセージの内容や作者を更新したい場合、Shift+F5Ctrl+F5 で表示しているメッセージをサーバーから再取得し、ログキャッシュを更新できます。これは現在表示されているメッセージにしか効果はなく、そのリポジトリのキャッシュ全体が無効になるわけではないことに注意してください。

差分の表示

プロジェクト開発を進める上でもっとも共通の需要のひとつが、何を変更したかを確認するということです。同じファイルの2つのリビジョン間や、2つの異なるファイルの違いを確認したくなることがあるでしょう。 TortoiseSVN には、 TortoiseMerge というテキストファイルの差分を表示する内蔵ツールがあり、 TortoiseIDiff という画像ファイルの差分を見るためのツールもあります。もちろん、任意の差分プログラムを使うこともできます。

ファイルの差分

ローカルの変更

自分 が作業コピー内でどんな変更を行ったか確認する場合は、エクスプローラーのコンテキストメニューで TortoiseSVN差分を表示 を選択してください。

別のブランチ/タグとの差分

(ブランチで作業していて)トランクの変更点を見る場合や、(トランクで作業していて)特定のブランチの変更点を見る場合、エクスプローラーのコンテキストメニューを使用できます。 Shift キーを押したままファイルを右クリックし、 TortoiseSVNURL を指定して差分を表示 を選択してください。その後で表示されるダイアログでは、ローカルのファイルと比較するリポジトリの URL を指定してください。

2つのツリー、たとえば2つのタグや、ブランチ/タグとトランクを選択して差分を取るときは、リポジトリブラウザーを使用することもできます。そこでコンテキストメニューの リビジョンを比較 を使用することで比較ができます。 「フォルダーの比較」をご覧ください。

以前のリビジョンとの差分

特定のリビジョンと作業コピーの差分を取る場合は、リビジョンログダイアログを使用します。比較したいリビジョンを選択し、コンテキストメニューから 作業コピーと比較 を選択してください。

最後にコミットしたリビジョンと、変更されていないと思われる自分の作業コピーとの差分を見る場合は、単にファイルを右クリックし、TortoiseSVN直前のバージョンとの差分を表示 を選択してください。ここでは、(作業コピーに記録されている)最終コミット日時以前のリビジョンと、作業ベースとの差分を表示します。これにより、現在の作業コピーの元となる直前の変更点を参照できます。作業コピーよりも新しい変更点は表示されません。

2つのリビジョン間の差分

すでにコミットした2つのリビジョン間の差分を取るのなら、リビジョンログダイアログを使用し、(通常 Ctrl を使用して)比較したい2つのリビジョンを選択してください。それから、コンテキストメニューで リビジョンを比較 を選択してください。

フォルダーのリビジョンログから行った場合、リビジョン比較ダイアログが現れ、フォルダーにある変更されたファイルの一覧を表示します。 「フォルダーの比較」をご覧ください。

コミットしたすべての変更

特定のリビジョンで行ったすべてのファイルの変更点を一目で確認したいなら、Unified差分ファイル(GNUパッチ形式)を使用できます。ここでは差分が本文内の数行のみで表示されます。視覚的なファイル比較よりは読みにくくなりますが、すべての変更を一度に確認できます。リビジョンログダイアログから確認したいリビジョンを選択し、コンテキストメニューから Unified形式で差分を表示 を選択してください。

ファイル間の差分

2つの異なるファイルの差分を確認したい場合、エクスプローラーで直接両方(Ctrl を押しながら)選択してください。その後、エクスプローラーのコンテキストメニューからTortoiseSVN差分 を選択します。

差分を表示するファイルが同じフォルダーにない場合、TortoiseSVN差分元として選択コマンドで比較する1つ目のファイルを選択し、それから2つ目のファイルを表示してTortoiseSVN"<パス名>"との差分を表示</パス名>

作業コピーのファイル・フォルダーと URL 間の差分

作業コピーのファイルと、 Subversion リポジトリのファイルとの差分を確認する場合は、エクスプローラーで直接そのファイルを選択し、 Shift キーを押しながら右クリックしてコンテキストメニューを表示させ、TortoiseSVNURL を指定して差分を表示 を選択してください。作業コピーのフォルダーの場合も同様です。 TortoiseMerge ではパッチファイルの場合の同様、変更のあったファイルの一覧が表示され、それぞれの差分を個別に確認できます。

注釈履歴の差分

リビジョンログダイアログから差分と注釈履歴を組み合わせて表示させ、ファイルの差分ばかりでなく、作者、リビジョン、更新日時を確認することができます。詳しくは、 「注釈履歴の差分」 をご覧ください。

フォルダー間の差分

TortoiseSVN の内蔵ツールは、ディレクトリ階層の比較をサポートしていません。しかし、その機能をサポートしている外部ツールを使えばディレクトリを比較できます。 「外部差分・マージツール」 で使用できるツールをご紹介します。

サードパーティの差分ツールを設定している場合、差分コマンドを選択する際にShift を押すと代替ツールを使用できます。その他の差分ツールの設定については、 「外部プログラムの設定」 をご覧ください。

改行コードと空白のオプション

プロジェクトを続けていくと、時には改行コードを CRLF から LF に変更したり、セクションのインデントを変更したりすることがあります。不幸なことに、かなりの行を変更しなければならないにもかかわらず、コードの意味に変化はありません。以下のオプションでは、比較や差分を適用する際の変更点の把握方法を管理します。これらの設定は、 TortoiseMerge の設定のほか、 マージ注釈履歴 ダイアログから行うことができます。

改行コードを無視する は、改行コードのみの変更を無視します。

空白を比較する は、インデントや行内の空白の追加・削除を変更点に含めます。

空白の変更を無視する は、空白の数や種類(インデントや、タブとスペースの変更など)のみの変更を無視します。空白がないところに追加されたり、存在する空白が完全に削除されたりした場合は、変更として表示されます。

すべて空白を無視する は、空白のみの変更をすべて無視します。

当然、内容の変更のある行は、常に差分に含まれます。

フォルダーの比較

図4.29 リビジョンの比較ダイアログ

リビジョンの比較ダイアログ


リポジトリブラウザーで2つのツリーを選択したり、ログダイアログでフォルダーのの2つのリビジョンを選択したりすると、 コンテキストメニューリビジョンを比較 が実行できるようになります。

このダイアログでは、変更されたすべてのファイルが表示され、コンテキストメニューから個々に比較や注釈履歴の取得を行えます。

変更ツリー をエクスポートすることができます。これは、プロジェクトのツリー構造の中で、変更されたファイルのみを他人に渡したい場合に便利です。この操作は選択したファイルにのみ作用しますので、あらかじめエクスポートするファイル(通常はすべて)を選択してから、 コンテキストメニュー選択をエクスポート... を実行してください。そして、変更ツリーを保存する場所を指定してください。

また、 コンテキストメニュー選択ファイルのリストを保存... を使用すると、変更されたファイルの 一覧 をエクスポートすることができます。

ファイルの一覧 行われた操作(変更・追加・削除)をエクスポートする場合、 コンテキストメニュー選択範囲をクリップボードにコピー を使用してください。

最上部のボタンは、比較の方向を変更します。AからBへの変更を表示しているとき、必要に応じて、BからAへの変更も表示できます。

リビジョン番号が表示されているボタンで、リビジョン範囲を変更することができます。範囲を変更すると、2つのリビジョン間の差分が自動的に更新されます。

ファイル名の一覧が非常に長い場合、検索ボックスを使用して、特定のテキストを含むファイル名のみを抽出できます。単純文字列検索を行いますので、Cのソースファイルを指定したい場合は、 *.c ではなく .c と指定してください。

TortoiseIDiff を使用した画像の差分

テキストファイルの差分を取るツールは、 TortoiseMerge を含めてたくさんありますが、私たちはよく画像ファイルに、どんな変更が加えられたかを知りたくなることもありました。そのために TortoiseIDiff を作成しました。

図4.30 画像差分ビューアー

画像差分ビューアー


一般的な画像ファイル形式のファイルを選択して TortoiseSVN差分を表示 を実行すると、画像の差分を表示するために TortoiseIDiff が起動します。デフォルトでは画像が横に並んで表示されますが、表示メニューやツールバーで上下に表示するように切り替えることができます。また、ライトボックスを使用した時のように、画像を重ねて表示することもできます。

画像をズームイン・アウトしたり、移動したりすることもできます。画像を左ドラッグすることで、移動することができます。 画像位置を同期 オプションを選択しておくと、スクロールバーやマウスホイールで画像を移動する時、両方の画像が同期して移動するようになります。

画像情報ボックスには、ピクセル単位のサイズや、解像度、色深度など、画像ファイルの詳細を表示されます。このボックスが邪魔になるなら、 表示画像情報 で隠すことができます。これと同じ情報は、画像のタイトルバーの上にマウスを移動すると表示されます。

画像を重ねて表示している場合、画面左端のスライダーを使用して、画像の相対的な輝度(アルファブレンド)を制御できます。スライダー上をクリックすると、透明度を直接設定できますし、スライダをドラッグすると、確認しながら透明度を変更できます。 Ctrl+Shift+ホイール でも透明度を変更できます。

スライダの上にあるボタンを押すと、透明度を 0% と 100% で切り替えられます。また、ボタンをダブルクリックすると、もう一度ボタンをクリックするまで、1秒ごとに透明度を自動で交互に切り替わります。複数の小さな変更を探すのに便利でしょう。

重ね合せでは分からない差分を確認したい場合もあります。プリント基板の画像イメージに2つのリビジョンがあり、どの配線が変更されたかを調べたい場合などです。アルファブレンドを無効にすると、各ピクセルの色が XOR されて差分が表示されます。変更のない部分は真っ白になり、変更点だけ色が表示されます。

Office ドキュメントの差分

テキストファイル以外の文書の差分を表示するには、ファイルフォーマットを理解できるソフトウェアを使用する必要があります。通常は、その文書を作成するために使用したソフトウェアを使用します。よく使用される Microsoft Office や OpenOffice.org には差分を表示するための機能があり、 TortoiseSVN には有名な拡張子のファイルの差分を表示する際に、これらのソフトウェアをしかるべき設定で呼び出すことができるスクリプトが添付されています。どのような拡張子がサポートされているかを確認したり、新しく追加したりするためには、 TortoiseSVN設定を実行し、 外部プログラム セクションの 高度な設定 をクリックしてください。

Office 2010 使用時の問題

Office 2010 の クイック実行 版をお使いの場合、文書の差分を表示しようとすると、 Windows Script Host から、 ActiveX コンポーネントはオブジェクトを作成できません: word.Application というようなエラーが表示されることがあります。差分機能を使用するには、 MSI 版の Office を使用する必要があるようです。

外部差分・マージツール

私たちが提供するツールで必要なことが実現できない場合は、オープンソース・商用のツールがたくさんあるので、その中から使用できるものを試してみてください。それぞれに特徴がありますし、この一覧は完全なものではありませんが、検討に値するものをいくつか以下に紹介します。

WinMerge

WinMerge is a great open-source diff tool which can also handle directories.

Perforce Merge

Perforce は商用の RCS ですが、差分・マージツールは無料でダウンロードできます。詳細な情報は Perforce をご覧ください。

KDiff3

KDiff3 は、ディレクトリも扱えるフリーの差分ツールです。 こちら からダウンロードできます。

SourceGear DiffMerge

SourceGear Vault は商用の RCS ですが、差分・マージツールは無料でダウンロードできます。詳細な情報は SourceGear をご覧ください。

ExamDiff

ExamDiff Standard はフリーウェアです。ファイルを扱えますが、ディレクトリは扱えません。 ExamDiff Pro はシェアウェアで、ディレクトリに対する差分や編集機能などたくさん追加されています。どちらもバージョン 3.2 以降なら unicode を扱えます。 PrestoSoft からダウンロードできます。

Beyond Compare

ExamDiff Pro に似て、ディレクトリの差分と unicode を扱えるすばらしいシェアウェアです。 Scooter Software からダウンロードしてください。

Araxis Merge

Araxis Merge はファイルやフォルダーの両方に対応した、差分やマージに便利な商用ツールです。マージ時に3方向の比較を行うことができ、また関数の順番の変更に対応できる同期リンク機能を持っています。 Araxis からダウンロードしてください。

TortoiseSVN でこれらのツールを使用するよう設定する方法は 「外部プログラムの設定」 をご覧ください。

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

図4.31 バージョン管理外のファイルでのエクスプローラーコンテキストメニュー

バージョン管理外のファイルでのエクスプローラーコンテキストメニュー


開発工程の中で新しいファイルやディレクトリを作成したら、ソース管理に追加する必要があります。追加するファイルやディレクトリを選び、TortoiseSVN追加 を実行してください。

ファイルやディレクトリをソース管理に追加すると、 追加 アイコンオーバレイが表示され、他の開発者もそのファイルやディレクトリを使用できるよう、早く作業コピーをコミットすることを促します。ファイルやディレクトリの追加だけではリポジトリに影響 しません

複数の追加

すでにバージョン管理下にあるフォルダーでも追加コマンドを実行できます。この場合、追加ダイアログにはバージョン管理下のフォルダー内にある、バージョン管理外の全ファイルが表示されます。新しいファイルが複数あり、そのファイルを一度に追加する必要があるときに便利です。

作業コピーの外部にあるファイルを追加するには、ドラッグ&ドロップを使用して次のように操作します。

  1. 追加するファイルを選択する

  2. 作業コピー内の新しい位置にそれらを右ドラッグする

  3. マウスの右ボタンを離す

  4. コンテキストメニューSVN この作業コピーにファイルを追加 を選択する。そのファイルが作業コピーにコピーされ、バージョン管理に追加される。

作業コピーにあるファイルを、コミットダイアログへ左ドラッグ&ドロップするだけでも追加できます。

ファイルやフォルダーを間違って追加した場合は、コミットする前に TortoiseSVN追加を元に戻す... を使用して、追加を取り消しすことができます。

ファイルやフォルダーのコピー・移動・名前の変更

リポジトリ内の別なプロジェクトにある既存のファイルを流用したくなり、プロジェクトをまたがってコピーしたくなる場合があります。上記のようにファイルを単純にコピーして追加しても良いのですが、そうするとそれまでの履歴が見えなくなってしまいます。また、後で元のファイルにバグ修正が行われた場合、新しいコピーが Subversion 内の元のファイルに関連づけられていないと、修正を自動的にマージすることができません。

作業コピーの中にあるファイルやフォルダーをコピーするには、右ドラッグメニューを使うのがもっとも簡単です。ファイルやフォルダーを右ドラッグで、作業コピーから他のフォルダー、または同じフォルダー内に向けてドラッグすると、マウスのボタンを離すと同時にコンテキストメニューが現れます。

図4.32 バージョン管理下のディレクトリに対する右ドラッグメニュー

バージョン管理下のディレクトリに対する右ドラッグメニュー


これで既存のバージョン管理下の内容を、新しい場所にコピーできます。必要なら同時に名前を変更することもできます。

作業コピーにあるバージョン管理下のファイルや、2つの作業コピーの間でコピーや移動を行う場合は、おなじみのカット&ペースト操作を使用することもできます。バージョン管理下のファイルをクリップボードにコピーするには、 Windows 標準の コピー切り取り を実行してください。クリップボードにバージョン管理下のファイルがある状態で、 TortoiseSVN貼り付け (注意: Windows 標準の 貼り付け ではありません)を使用すると、新しい作業コピーの場所にファイルをコピーや移動することができます。

TortoiseSVNブランチ/タグの作成 を使用して、ファイルやフォルダーを作業コピーからリポジトリの別の場所にコピーできます。詳細は、 「ブランチ/タグの作成」 をご覧ください。

コンテキストメニューリビジョンからブランチ/タグを作成 を使用して、ログダイアログにあるファイルやフォルダーの旧バージョンをリポジトリの新しい場所へ、ログダイアログから直接、コピーできます。詳細は、 「追加情報の取得」 をご覧ください。

また、リポジトリブラウザーを使用して、ファイルを任意の場所に配置したり、リポジトリから作業コピーに直接コピーしたりすることができます。さらにリポジトリ内の2つの場所の間でコピーできます。詳細は 「リポジトリブラウザー」 をご覧ください。

リポジトリ間のコピーはできません

TortoiseSVN では、リポジトリの 内部 でファイルやフォルダーはコピーや移動を行うと履歴が保持されますが、リポジトリ間をまたがってファイルやフォルダーをコピーや移動を行うと、履歴が保持されません。リポジトリが同じサーバー上にあったとしても同様です。現状のファイルの内容をコピーし、別なリポジトリに新しい内容として追加することはできます。

同じサーバーの2つの URL が、同じリポジトリを指しているか違うリポジトリを指しているかはっきりしない場合、リポジトリブラウザーを使用して一方の URL を開き、リポジトリルートがどこにあるかを探してください。同じリポジトリブラウザーウィンドウに両方の場所があれば、それらは同じリポジトリにあります。

ファイルやディレクトリの無視

図4.33 バージョン管理外のファイルでのエクスプローラーコンテキストメニュー

バージョン管理外のファイルでのエクスプローラーコンテキストメニュー


ほとんどのプロジェクトでは、バージョン管理するべきでないファイルやフォルダーがあります。 *.obj, *.lst のようなコンパイラーが生成するファイルや、もしかしたら実行ファイルを格納する出力フォルダーも該当するかもしれません。変更をコミットする際、 TortoiseSVN ではコミットダイアログにバージョン管理外のファイルが表示されます。もちろんこの表示をオフにすることもできますが、そうすると、新しいソースファイルを追加し忘れるおそれがあります。

こういった問題を避けるには、生成されたファイルをプロジェクトの無視リストに追加しておくといいでしょう。こうすると、生成されたファイルはコミットダイアログに現れなくなりますが、本当にバージョン管理する前のソースファイルは現れたままになります。

バージョン管理外のファイルの上で右クリックし、コンテキストメニューで TortoiseSVN無視リストに追加 コマンドを選択すると、選択したファイルのみを追加するか、または同じ拡張子を持つファイルすべてを追加するかを選択するサブメニューが表示されます。どちらのサブメニューにも(再帰的)がついたものもあります。複数のファイルを選択した場合はサブメニューが表示されずに、指定されたファイルやフォルダーが追加されます。

コンテキストメニューで(再帰的)バージョンを選択すると、項目は選択されたフォルダーにとどまらず、すべてのサブフォルダーのものも同様に無視されます。但し、これにはSVNクライアントのバージョン1.8以上が必要です。

無視リストから項目を削除したい場合は、その項目で右クリックし、TortoiseSVN無視リストから削除 を選択してください。フォルダーの svn:ignore プロパティを直接変更することもできます。この場合、次項で説明するファイル名展開を使用して、より汎用的なパターンで指定することができます。プロパティを直接指定する方法については、 「プロジェクト設定」 をご覧ください。複数の無視パターンは改行で区切ってください。空白で区切っても動作しません。

常に無視するパターンのリスト

他にファイルを無視する方法として、 常に無視するパターンのリスト に追加する方法があります。大きな違いは、常に無視するパターンのリストがクライアントのプロパティであるという点です。これは 全ての Subversion プロジェクトに適用されますが、クライアント PC でしか適用されません。ふつうは、できれば svn:ignore プロパティを使用した方がいいでしょう。指定されたプロジェクトエリアで適用され、プロジェクトをチェックアウトした人すべてに働くからです。詳細は 「一般設定」 をご覧ください。

バージョン管理下の項目を無視する

バージョン管理下のファイルやフォルダーを無視させることはできません。これは Subversion の仕様です。間違えてバージョン管理下に入れてしまった場合は、 「バージョン管理外のファイルの無視」 にある、バージョン管理外にする方法をご覧ください。

無視リストでのパターンマッチ

Subversion の無視パターンは、ワイルドカードとしてメタ文字を使用してファイルを特定する、 UNIX で使用されてきたファイル名展開を使用します。特別な意味を持つのは次の文字です。

*

空文字列(文字なし)を含む任意の文字列にマッチします。

?

任意の1文字にマッチします。

[...]

角かっこで囲まれた文字のうちの1文字にマッチします。かっこ内では、 - を挟んだ2つの文字は、辞書的にその2文字間にある何れかの文字にマッチします。例えば、 [AGm-p]AGmnop のいずれかにマッチします。

パターン比較では大文字と小文字を区別しますが、これは Windows で問題の原因になるかもしれません。両方指定すれば、強制的に大文字小文字を区別しないようにできます。例えば、 *.tmp を大文字小文字にかかわらず無視するには、 *.[Tt][Mm][Pp] のようなパターンで指定してください。

展開方法の公式な定義が必要であれば、シェルコマンド言語の IEEE 仕様書 Pattern Matching Notation を参照してください。

常に無視するパターンのリストにはパスを含めない

パターンにパス情報を含めないでください。パターンの比較は、ファイル名やフォルダー名ごとに行われます。 CVS フォルダーをすべて無視したい場合、無視リストには、単に CVS と追加してください。以前のバージョンのように、CVS */CVS と指定する必要はありません。 prog フォルダーにある tmp フォルダーをすべて無視したいけれども、 doc フォルダーにあるものは無視したくない場合は、常に無視するパターンのリストではなく svn:ignore プロパティを使用してください。常に無視するパターンを使用して、これを確実に実現する方法はありません。

削除、移動、名前変更

Subversion では、ファイルやフォルダーの名前の変更や移動が可能です。そのため TortoiseSVN のサブメニューには、「削除」や「名前を変更」コマンドがあります。

図4.34 バージョン管理下のファイルに対するエクスプローラーのコンテキストメニュー

バージョン管理下のファイルに対するエクスプローラーのコンテキストメニュー


ファイルやフォルダーの削除

Subversionからファイルやフォルダーを削除するには、 TortoiseSVN削除 を実行してください。

TortoiseSVN削除 を実行すると、ファイルやフォルダーは作業コピーからすぐに削除され、次のコミットでリポジトリから削除するようにマークされます。項目の親フォルダーには削除 オーバーレイアイコンを表示します。変更をコミットする前ならば、親フォルダーに対して TortoiseSVN変更の取り消し を実行すると、ファイルを取り戻すことができます。

項目をリポジトリから削除しても、バージョン管理外のファイルやフォルダーとして残しておきたい場合は、 拡張コンテキストメニュー削除(作業コピーは保持) を使用してください。エクスプローラーのリストウインドウ(右画面)で Shift キーを押したまま項目を右クリックすると、拡張コンテキストメニューが表示されます。

TortoiseSVN のコンテキストメニューを使用せずに、項目をエクスプローラーで削除した場合、コミットの際に、コミットダイアログにはそのファイルが紛失と表示され、バージョン管理からも削除するかどうか確認してきます。しかし、作業コピーに対して更新を実行すれば、 Subversion は紛失したファイルを特定し、リポジトリから最新のファイルを取得して置き換えます。バージョン管理下のファイルを削除する場合は、必ず TortoiseSVN削除 を使用するようにしてください。そうすると Subversion は項目を本当に削除するべきかどうか推測する必要がなくなります。

削除したファイルやフォルダーを取り戻す

ファイルやフォルダーを削除してリポジトリにコミットした後では、 TortoiseSVN変更の取り消し コマンドだけでは取り戻せなくなります。しかし、ファイルやフォルダーが全く失われてしまった訳ではありません。もしファイルやフォルダーを削除したリビジョンが分かるのであれば(分からない場合はログダイアログから探し出して)、リポジトリブラウザーを開いてそのリビジョンに切り替えます。そして、削除されたファイルやフォルダーを選択して、右クリックして コンテキストメニューコピー... を実行し、コピー先として作業コピーのパスを指定してください。

ファイルやフォルダーの移動

ファイルやフォルダーの名前をその場で変更するならば、 コンテキストメニュー名前を変更... を使用してください。新しい名前を入力すれば完了です。

作業コピー内でファイルを(例えば異なるサブフォルダーへ)移動する場合は、マウスの右ドラッグ&ドロップ操作を使用して次のように操作してください。

  1. 移動したいファイルやディレクトリを選択する

  2. 作業コピー内の新しい位置にそれらを右ドラッグする

  3. マウスの右ボタンを離す

  4. ポップアップメニューの コンテキストメニューSVN バージョン管理ファイルをここに移動する を選択する

親フォルダーでのコミット

名前の変更や移動は、削除した後に追加という形で行われるため、コミットは名前変更または移動したファイルの親フォルダーに対して行わなければなりません。そうでないと、名前変更または移動したファイルがコミットダイアログに表示されません。名前変更または移動した際の削除の部分をコミットしないと、リポジトリ上にそれが残ってしまい、共同作業者が更新した際に、古いファイルが削除されません。つまり、新旧の 両方 のファイルがある状態になってしまいます。

フォルダー内のいずれかのファイルに変更を加える前に、 必ず フォルダーの名前の変更をコミットしてください。そうしないと、作業コピーが混乱してしまいます。

ファイルの移動やコピーは、他にも Windows のコピー/切り取りコマンドを使って行うこともできます。コピーしたいファイルを選択し、右クリックしてエクスプローラーの コンテキストメニューコピー を実行します。それからコピー先のフォルダーを開いて右クリックし、 TortoiseSVN貼り付け を選択します。ファイルを移動する場合は、 コンテキストメニューコピー の代わりに コンテキストメニュー切り取り を使用します。

また、リポジトリブラウザーを用いて、項目を移動することもできます。詳細は 「リポジトリブラウザー」 をご覧ください。

外部参照の SVN 移動は行わない

svn:externals で作成したフォルダーに対して、TortoiseSVN の 移動名前を変更 コマンドを実行しては いけません 。この操作は外部参照の項目を親リポジトリから削除してしまうことになり、おそらく他の人たちを驚かせてしまいます。外部参照フォルダーを移動する必要があるときには、通常の(シェルでの)移動を行い、移動元と移動先の各親フォルダーに対して svn:externals プロパティを設定しなおしてください。

ファイル名の大文字・小文字が競合した場合の対処

リポジトリ内に、大文字か小文字かのみが異なる名前のファイル(例えば TEST.TXTtest.txt)がある場合、 Windows のクライアントでは、親ディレクトリの更新やチェックアウトができなくなります。 Subversion は文字の大小を区別していますが、Windows はそうではないからです。

これは2人が別々の作業コピーから、大文字か小文字かのみが異なる名前のファイルをコミットした場合に発生します。また Linux のような、大文字と小文字を区別するファイルシステムを使用するシステムからコミットした場合も、発生します。

この場合は、どちらかを一方のみを残し、もう一方をリポジトリから削除(または名前変更)しなりません。

2つのファイルが同じ名前にならないようにする方法

大文字・小文字が競合するようなチェックインを拒否するサーバースクリプトが、https://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/ にあります。

ファイル名の変更の修復

時に、親切な IDE がリファクタリングの一環でファイルの名前変更を行います。そしてもちろん Subversion に通知しません。変更をコミットすると、 Subversion には古いファイル名が紛失ファイル、新しいファイル名がバージョン管理外のファイルとして見えることになります。新しいファイルを追加することもできますが、 Subversion にはそのファイルの関連が分からないので、履歴が追跡できなくなってしまいます。

改善策は、実際には名前変更であったと Subversion に通知することで、これは コミット ダイアログや 変更をチェック ダイアログから行うことができます。古い名前(紛失)と新しい名前(バージョン管理外)の両方を選択し、 コンテキストメニュー移動を修復 を使用すれば、2つのファイルを名前変更の関係にすることができます。

バージョン管理外のファイルの削除

通常は、生成される全てのファイルが Subversion に無視されるように、無視リストを設定するでしょう。しかし、クリーンビルドを行うために、これらの無視される項目を削除したい場合はどうしますか?通常は、 makefile でこれを行うよう設定しますが、 makefile がデバッグ中だったり、他のビルドシステムに変更しているときには、これらを丸ごとクリアする手段があると便利です。

TortoiseSVN では、そのような場合に 拡張コンテキストメニューバージョン管理外の項目を削除... という機能を提供しています。エクスプローラーのリストウインドウ(右画面)で Shift キーを押したままフォルダーを右クリックすると、拡張コンテキストメニューが表示されます。これにより、作業コピーにあるバージョン管理外のファイルの一覧ダイアログが現れます。削除する項目を選択または選択解除してください。

ここで項目が削除される際、ごみ箱が使用されますので、ここで誤ってバージョン管理下に置くはずのファイルを削除してしまっても元に戻せます。

変更の取り消し

最後に更新を実行したときから、ファイルに行った変更をすべて取り消す場合は、ファイルを選択して右クリックしてポップアップメニューを表示させてから、 TortoiseSVN変更の取り消し コマンドを選択してください。ダイアログがポップアップ表示され、変更されて取り消すことができるファイルの一覧が表示されます。変更を取り消すファイルを選択し、 OK をクリックしてください。

図4.35 変更の取り消しダイアログ

変更の取り消しダイアログ


設定されている変更リストもすべてクリアする場合は、ダイアログ下部にあるチェックボックスにチェックを入れてください。

削除や名前変更の操作を元に戻す場合は、すでに削除した項目が存在しておらず右クリックできないので、親フォルダー上で変更の取り消し操作を行ってください。

追加した項目を元に戻す場合、コンテキストメニューに TortoiseSVN追加を取り消す... が現れます。実際には変更の取り消しなのですが、わかりやすく名前が変わります。

ダイアログの中の列は、 変更をチェック ダイアログの中の列と同じ方法でカスタマイズできます。詳細は 「ローカルとリモートの状態」 をご覧ください。

変更の取り消しが作業コピーをクリーンアップするために使用されることがあるので、バージョン管理外の項目を削除するためのボタンもあります。このボタンをクリックすると、バージョン管理外の項目がすべて一覧表示されるダイアログが表示され、削除する項目を選択することができます。

コミットした変更を元に戻す

変更の取り消し はローカルの変更しか取り消しできません。すでにコミットしてしまった変更は 取り消せない のです。あるリビジョンでコミットされた方法については、詳しくは 「リビジョンログダイアログ」 をご覧ください。

変更の取り消しが遅い

変更を取り消す際、予想よりも時間がかかると感じられるかも知れません。これは、間違えて変更の取り消しを実行したとき、変更したファイルを取り戻せるように、変更したファイルをごみ箱に送っているからです。しかし、ごみ箱がいっぱいになると、 Windows はファイルを置く場所を探すのに長い時間がかかります。解決法は簡単です。ごみ箱を空にするか、 TortoiseSVN の設定で 変更を取り消す際にごみ箱を使用する のチェックを外してください。

クリーンアップ

サーバーの問題等で、 Subversion コマンドが正常に終了しなかった場合、作業コピーが矛盾した状態のままになってしまうことがあります。この場合、 TortoiseSVNクリーンアップ をフォルダーに対して実行する必要があります。作業コピーの最上層で行うのがいいでしょう。

図4.36 クリーンアップダイアログ

クリーンアップダイアログ


クリーンアップダイアログではそれ以外にも、作業コピーを クリーン 状態にするために便利なオプションが用意されています。

作業コピーの状態のクリーンアップ

前述のように、このオプションは、矛盾した作業コピーを使用可能な状態にしようとします。これは、作業コピーのデータベースの内部状態にのみ影響し、それ以外のデータには影響しません。これは、以前の TortoiseSVN クライアントや他の SVN クライアントでクリーンアップコマンドを実行した時と同じ動作です。

書き込みロックを強制解除

チェックすると、作業コピーデータベースからすべての書き込みロックを強制解除します。多くの場合、作業をクリーンアップするために必要です。

作業コピーを他のユーザーやクライアントが同時に使用している場合のみ、このオプションのチェックを外してください。しかし、クリーンアップが失敗した場合は、クリーンアップを成功させるためにこのオプションをチェックする必要があります。

タイムスタンプを修正

全てのファイルの記録されたタイムスタンプを調整し、将来の状態チェックを高速化します。これは例えばコミットダイアログのような、作業コピーのファイルリストを表示するすべてのダイアログを高速化します。

未使用のコピーを削除

作業コピーで未使用の当初のコピーを削除し、残りの当初のコピーを圧縮します。

シェルのオーバーレイを更新

ときどき、特にエクスプローラーの左側のツリービューでは、シェルのオーバーレイでは状態のキャッシュが変更を認識するのに失敗して、現在の状態が表示されなくなってしまうことがあります。このような場合、このコマンドで強制的に更新させることができます。

外部参照を含める

チェックすると、 svn:externals プロパティに含まれているすべてのファイルやフォルダーにも、すべての処理が実行されます。

バージョン管理外のファイルやフォルダーを削除、無視するファイルやフォルダーを削除

作業コピーに生成されたファイルをすべて削除するのに、手っ取り早く簡単な方法です。バージョン管理されていないファイルやフォルダーは、すべてごみ箱に移動されます。

【注意】TortoiseSVN変更の取り消し... のダイアログを使用しても同じことができます。こちらはバージョン管理されていないファイルやフォルダーを一覧表示し、削除するファイルを選択することができます。

すべての変更を再帰的に取り消す

このコマンドは、まだコミットされていないローカルの変更をすべて取り消します。

【注意】TortoiseSVN変更の取り消し... コマンドを使用したほうが、事前に元に戻すファイルを確認して選択することができるので便利です。

プロジェクト設定

Subversion のプロパティ

図4.37 Subversion のプロパティページ

Subversion のプロパティページ


Subversion のプロパティは、 Windows のプロパティダイアログから確認したり設定したりできますが、他に TortoiseSVNプロパティコンテキストメニュープロパティ の TortoiseSVN の状態リストでも確認できます。

自分でプロパティを定義できるほか、 Subversion で特別な意味をもつプロパティを追加することもできます。これは svn: で始まります。 svn:externals もその一種です。外部参照の扱い方は 「外部項目」 をご覧ください。

svn:keywords

Subversion は、ファイル自身にファイル名やリビジョン情報を埋め込む CVS 風のキーワード展開をサポートしています。現在、キーワードは次のものをサポートしています。

$Date$

最後にコミットされた日時です。作業コピーに対して更新を実行した時点の情報に基づいています。それより新しい情報をリポジトリに確認することは ありません

$Revision$

最後にコミットを行ったリビジョンです。

$Author$

最後にコミットを行ったユーザーです。

$HeadURL$

このファイルのリポジトリ上のフル URL です。

$Id$

前述の4つのキーワードの短く組み合わせたものです。

以上のキーワードの使用法については、 Subversion book の svn:keywords section で、これらのキーワードの詳しい解説と、有効にする方法や使用する方法を説明をしています。

Subversion のプロパティに関する詳細情報は、Special Properties をご覧ください。

プロパティの追加と編集

図4.38 プロパティの追加

プロパティの追加


新しいプロパティを追加するには、まず 新規... をクリックしてください。メニューから必要なプロパティ名を選択し、プロパティダイアログに必要な情報を入力します。これらのプロパティダイアログの詳細は 「プロパティエディター」 をご覧ください。

独自のダイアログを持たないプロパティを追加するには、 新規... メニューの高度な設定を選択します。そして、既存のプロパティをコンボボックスから選択するか、カスタムプロパティの名前を入力するかします。

一度にたくさんの項目に対してプロパティを設定する場合は、エクスプローラーでファイルやフォルダーを複数選択し、コンテキストメニュープロパティ を選択してください。

現在のフォルダー以下にある すべての ファイルやフォルダーに対してプロパティを適用する場合、 プロパティを再帰的に適用する チェックボックスをチェックしてください。

既存のプロパティを編集する場合、プロパティの一覧から編集するプロパティを選択し、 編集... をクリックしてください。

既存のプロパティを削除したい場合、プロパティの一覧から削除するプロパティを選択し、 削除 をクリックしてください。

svn:externals プロパティは、同じリポジトリからでも完全に異なるリポジトリからでも、他のプロジェクトを取得するのに使用できます。詳細は 「外部項目」 をご覧ください。

プロパティの編集は最新リビジョンに対して

プロパティはバージョン管理されているため、以前のリビジョンのプロパティを編集することはできません。ログダイアログや、リポジトリブラウザー上で最新以外のリビジョンを表示している場合は、プロパティと値の一覧は見られますが、編集はできません。

プロパティのエクスポートとインポート

しばしば、何度も同じプロパティのセット(例: bugtraq:logregex)を適用していることに気付くでしょう。あるプロジェクトから別のプロジェクトへ、プロパティを簡単にコピーする場合は、エクスポート・インポート機能を使用できます。

すでにプロパティが設定されているファイルやフォルダーで、TortoiseSVNプロパティ を使用し、エクスポートしたいプロパティを選択して エクスポート... をクリックしてください。プロパティの名前と値を保存するファイル名を入力するよう促されます。

プロパティを適用したいフォルダーで、 TortoiseSVNプロパティ を実行し、 インポート... をクリックしてください。インポート元のファイル名を尋ねてきますので、先ほど保存したエクスポートファイルを指定してください。プロパティはそのフォルダーに、非再帰的に追加されます。

プロパティをディレクトリ構造に対して再帰的に追加する場合は、前述の手順の後、プロパティダイアログでプロパティを選び、編集...をクリックしてください。 プロパティを再帰的に適用する チェックボックスをチェックした後、OK をクリックしてください。

インポートファイルはバイナリで TortoiseSVN 専用です。インポートやエクスポートでのプロパティの受け渡し専用で、このファイルを編集する必要はありません。

バイナリプロパティ

TortoiseSVN は、ファイルを使用することでバイナリのプロパティ値を扱うことができます。バイナリプロパティ値を読むには、ファイルに 値を保存... してください。バイナリ値を設定するには、バイナリエディター等の適切なツールを使用してファイルを作成し、そのファイルから 開く... としてください。

バイナリプロパティはあまり使用されませんが、アプリケーションによっては便利です。例えば、巨大な画像ファイルを格納している場合や、アプリケーションが読み込むファイルが巨大な場合、プレビューを素早く得るのに、プロパティにサムネイルを格納した方が良いかもしれません。

プロパティの自動設定

ファイルやフォルダーをリポジトリに追加する際に、自動的にプロパティが設定されるように Subversion や TortoiseSVN を設定できます。これには2通りの方法があります。

Subversion の設定ファイルを編集すると、自分のクライアントでこの機能を有効にできます。 TortoiseSVN の設定ダイアログの全般ページに、直接そこに行くための編集ボタンがあります。設定ファイルは、 Subversion の動作を制御する単純なテキストファイルです。ここで2か所を変更する必要があります。1つめは、 miscellany という見出しのセクションで、 enable-auto-props = yes という行のコメントを解除します。2つめは、その下にある、どのファイル形式に、どのプロパティを追加するかを定義したセクションを編集します。この方法は Subversion の標準機能で、どの Subversion クライアントでも動作します。しかし、各クライアントでそれぞれ定義しなければなりません。つまり、この設定をリポジトリに伝播する方法はありません。

もうひとつの方法は、 tsvn:autoprops プロパティをフォルダーに設定する方法で、次節で説明しています。この方法は、 TortoiseSVN クライアントでしか動作しませんが、更新を行った際に、すべての作業コピーに伝播します。

Subversion 1.8で、ルートフォルダーに svn:auto-props プロパティが設定できるようになりました。プロパティの値が自動的にすべての子項目に継承されます。

どちらの方法を選択しても、 auto-props はファイルが作業コピーに追加された時にのみ適用されることに注意してください。 auto-props は、すでにバージョン管理下にあるファイルのプロパティを変更することはありません。

新しいファイルに正しいプロパティが確実に適用されるようにしたい場合は、リポジトリに pre-commit を設定して、必要なプロパティが設定されていないとコミットを拒否するようにするべきです。

プロパティのコミット

Subversion のプロパティはバージョン管理されます。プロパティを変更したり追加したりした後は、変更をコミットする必要があります。

プロパティの競合

他のユーザーが同じプロパティを変更したりして、コミット時に競合が発生した場合、Subversion は .prej ファイルを生成します。競合を解決した後にこのファイルを削除してください。

TortoiseSVN のプロジェクトプロパティ

TortoiseSVN は自身が持つ特殊なプロパティをいくつか持っています。これは tsvn: で始まります。

  • tsvn:logminsize はコミット時に入力するログメッセージの長さの最小値を設定します。ここで指定した長さより短いメッセージを入力するとコミットできません。この機能はコミットごとに適切に説明するメッセージを入力するのを忘れないようにするのに便利です。このプロパティが設定されていなかったり、値が 0 に設定されていたりした場合、空のログメッセージが許可されます。

    tsvn:lockmsgminsize はロックメッセージの長さの最小値を設定します。ここで指定した長さより短いメッセージを入力するとロックできません。この機能はロックするごとに適切に説明するメッセージを入力するのを忘れないようにするのに便利です。このプロパティが設定されていなかったり、値が 0 に設定されていたりした場合、空のロックメッセージが許可されます。

  • tsvn:logwidthmarker は、プロジェクトでログメッセージが行の最大長(通常 80 文字)以内にそろえたい場合に使用します。このプロパティが 0 以外に設定されていると、ログメッセージ入力ダイアログでは、入力したテキストが長すぎないかどうかを確認できるように最大長を示すマーカーが設置され、表示時のワードラップが無効になります。【注】この機能はログメッセージに固定長フォントを選択していないと、正しく動作しません。

  • tsvn:logtemplate は、プロジェクトでログメッセージの整形ルールを指定したい場合に使用します。このプロパティは複数行の文字列を保持し、コミット時にコミットメッセージボックスにそれが挿入されます。これにより必要な情報を持つコミットメッセージを編集できます。【注】 tsvn:logminsize を併用する場合、必ずテンプレートより長い値を設定してください。そうでなければ保護機構が働きません。

    操作に固有のテンプレートを tsvn:logtemplate の代わりに使用することもできます。操作に固有のテンプレートが設定されている場合はそれが使用されますが、操作に固有のテンプレートが設定されていない場合は、 tsvn:logtemplate が使用されます。

    操作に固有のテンプレートは次の通りです。

    • tsvn:logtemplatecommit は作業コピーからのすべてのコミットに使用されます。

    • tsvn:logtemplatebranch は、ブランチ/タグを作成する際、もしくはリポジトリブラウザーでファイルやフォルダーを直接コピーする際に使用されます。

    • tsvn:logtemplateimport は、インポート時に使用されます。

    • tsvn:logtemplatedelete は、リポジトリブラウザーで直接項目を削除する際に使用されます。

    • tsvn:logtemplatemove は、リポジトリブラウザーで名前変更や項目の移動を行う際に使用されます。

    • tsvn:logtemplatemkdir は、リポジトリブラウザーでディレクトリを作成する際に使用されます。

    • tsvn:logtemplatepropset は、リポジトリブラウザーでプロパティを変更する際に使用されます。

    • tsvn:logtemplatelock は、ロックを取得する際に使用されます。

  • 新しくファイルの追加やインポートを行った際に、拡張子を元にプロパティを付加するように、 Subversion は autoprops を設定できます。これはクライアントごとに、 Subversion 設定ファイルに適切に autoprops が設定されているかどうかに依存します。tsvn:autoprops をフォルダーに設定しておくと、インポートやファイル追加の際に、ユーザーのローカルに autoprops をマージするようになります。この形式は subversion の autoprops と同じで、.sh 拡張子を持つファイルに2つのプロパティを セットしたい場合は、*.sh = svn:eol-style=native;svn:executable のようになります。

    ローカルの autoprops と tsvn:autoprops が競合する場合は、プロジェクトごとに指定されている、プロジェクト設定を優先します。

    Subversion 1.8では、tsvn:autopropsではなくsvn:auto-propsをお使いください。これは二条に似た動作をしますが、TortoiseSVNに限らずすべてのSubversionクライアントで機能します。

  • コミットダイアログでは、変更したファイルをファイルごとに状態(追加、変更、など)込みで貼りつけるオプションがあります。tsvn:logfilelistenglish は状態を英語で挿入するか、各国語で挿入するかを定義できます。このプロパティがセットされていなければ、デフォルトでは true となります。

  • TortoiseSVN はスペルチェッカーを使用できます。Windows 10 では OS のスペルチェッカーが使用されます。それ以前のバージョンの Windows では、OpenOffice や Mozilla で使用されているスペルチェッカーモジュールを使用できます。もしもこれらがインストールされている場合、このプロパティーはどのスペルチェッカーを使用するか、すなわち、どの言語であなたのプロジェクトのログメッセージが書かれるかを決定します。tsvn:projectlanguageは、あなたがログメッセージを入力する際にスペルチェックエンジンが使用すべき言語モジュールを設定します。こちらのページMSDN: Language Identifiesであなたの言語用の設定値を探すことができます。

    この値を 10 進数や頭に 0xを頭に付けた 16 進数で入力できます。たとえば、日本の場合はは0x04111041 を入力してください。

  • tsvn:logsummary プロパティは、ログメッセージのサマリとしてログダイアログに表示する、ログメッセージの一部を抽出するのに使用します。

    tsvn:logsummary プロパティの値は、正規表現グループを含む正規表現文字列を、1 行で表したものでなければなりません。そのグループにマッチするものであれば、なんでもサマリとして扱います。

    例: \[SUMMARY\]:\s+(.*) は、ログメッセージ中の [SUMMARY] 以降をすべてサマリとして扱います。

  • tsvn:logrevregex プロパティには、ログメッセージにあるリビジョンの参照にマッチする正規表現を定義します。これはログダイアログで、リビジョンの参照をリンクにするのに使用します。このリンクをクリックすると、そのリビジョンまでスクロール(リビジョンがログダイアログにあるか、ログキャッシュにある場合)したり、そのリビジョンを表示する、新しいログダイアログを開いたりします。

    正規表現は、リビジョン番号だけでなく参照全体にマッチしなければなりません。リビジョン番号はマッチした参照文字列から、自動的に抽出します。

    このプロパティが設定されていない場合、リビジョン参照をリンクにする、デフォルト正規表現を使用します。

  • クライアント側フックスクリプトを設定するためのプロパティがいくつかあります。それぞれのプロパティが、特定の1種類のフックスクリプトに対応しています。

    使用可能なプロパティ/フックスクリプトは、

    • tsvn:startcommithook
    • tsvn:precommithook
    • tsvn:postcommithook
    • tsvn:startupdatehook
    • tsvn:preupdatehook
    • tsvn:postupdatehook
    • tsvn:prelockhook
    • tsvn:postlockhook

    です。

    引数は、フックスクリプトを設定ダイアログで設定する場合と同じです。詳細は 「クライアント側フックスクリプト」 をご覧ください。

    すべてのユーザーが、自分の作業コピーを同じ場所の同じ名前でチェックアウトしているとは限らないので、作業コピーの中にあるスクリプトやツールを実行するように指定する場合、代わりにリポジトリの URL で指定することができます。このとき %REPOROOT% をリポジトリのルートを表す URL の一部として使用することができます。例えば、フックスクリプトが作業コピー内の contrib/hook-scripts/client-side/checkyear.js の位置にある場合、スクリプトへのパスを %REPOROOT%/trunk/contrib/hook-scripts/client-side/checkyear.js という形で指定することができます。こうすると、リポジトリを他のサーバーに移動した場合でも、フックスクリプトのプロパティを修正する必要がありません。

    %REPOROOT% の他に、 %REPOROOT+% を指定することもできます。この + はスクリプトを検索するのに必要なフォルダーのパスを複数含めるために使用されます。これは、ブランチを作成して作業コピーのURLが変わった時でもスクリプトを見つけられるようにしたい場合に便利です。上記のサンプルを使用すれば、スクリプトへのパスを %REPOROOT+%/contrib/hook-scripts/client-side/checkyear.js と指定することができます。

    下記のスクリーンショットは、ソースファイルのヘッダーにある現在の著作権表示の年をチェックするスクリプトを TortoiseSVN に設定する方法を示しています。

    図4.39 フックスクリプトのプロパティダイアログ

    フックスクリプトのプロパティダイアログ


  • 新しいプロパティを加える際に、コンボボックスから選択するか、任意のプロパティ名を入力できます。プロジェクトでカスタムプロパティを使用し、そのプロパティをコンボボックスに表示する(プロパティ名の入力ミスを防ぐ)場合、tsvn:userfilepropertiestsvn:userdirproperties でカスタムプロパティを作成できます。このプロパティはフォルダーに適用してください。そのフォルダー以下でファイルを作成すると、定義したプロパティ名ごとにカスタムプロパティを表示します。

    ユーザー定義のプロパティを追加・編集するために使用されるカスタムダイアログを指定することができます。 TortoiseSVN はプロパティ型に合わせた4種類のダイアログを提供しています。

    bool

    プロパティが true と false のように2つの値しか持たない場合、プロパティを bool 型にするとよいでしょう。

    図4.40 bool型のユーザープロパティダイアログ

    bool型のユーザープロパティダイアログ


    プロパティはこのように定義します。

    propertyname=bool;labeltext(YESVALUE;NOVALUE;Checkboxtext)

    labeltext はダイアログ上でチェックボックスの上に表示される文字列で、このプロパティの使用目的を説明します。他の引数は見ての通りです。

    state

    プロパティが、たとえば はい、いいえ、おそらく のように、いくつもの状態の中から1つを表す場合、プロパティを state型にするとよいでしょう。

    図4.41 state型のユーザープロパティダイアログ

    state型のユーザープロパティダイアログ
    state型のユーザープロパティダイアログ
    state型のユーザープロパティダイアログ


    プロパティは次のように定義します。

    propertyname=state;labeltext(DEFVAL;VAL1;TEXT1;VAL2;TEXT2;VAL3;TEXT3;...)

    引数はboolプロパティと同様ですが、DEFVALはプロパティが設定されていなかったり、値が設定されていなかったりした場合の既定値です。

    値の数が3つまでの場合、ダイアログでは3つまでのラジオボタンで表示されます。それ以上の値がある場合、状態の値をユーザーが選択することができるコンボボックスが使用されます。

    singleline

    1行の文字列で成り立つプロパティには、 singleline プロパティ型を使用してください。

    図4.42 1行型のユーザープロパティダイアログ

    1行型のユーザープロパティダイアログ


    propertyname=singleline;labeltext(regex)

    regex にはユーザーが入力した文字列を検証するために使用される正規表現を指定します。もし文字列が regex にマッチしない場合、ユーザーにはエラーが表示され、プロパティは設定されません。

    multiline

    複数行の文字列で成り立つプロパティには、 multiline プロパティタイプを使用してください。

    図4.43 複数行型のユーザープロパティダイアログ

    複数行型のユーザープロパティダイアログ


    propertyname=multiline;labeltext(regex)

    regex にはユーザーが入力した文字列を検証するために使用される正規表現を指定します。正規表現には必ず改行(\n)を含めてください。

    上記のスクリーンショットは、 tsvn:userdirproperties に次の値を設定すると作成することができます。

    my:boolprop=bool;これは bool 型のプロパティです。チェックを付けたり外したりできます。(true;false;my bool prop)
    my:stateprop1=state;これは state 型のプロパティです。2つの状態のうち1つを選択します。(true;true;true value;false;false value)
    my:stateprop2=state;これは state 型のプロパティです。3つの状態のうち1つを選択します。(maybe;true;正解;false;間違い;maybe;未回答)
    my:stateprop3=state;このプロパティに曜日を設定します。(1;1;月曜日;2;火曜日;3;水曜日;4;木曜日;5;金曜日;6;土曜日;7;日曜日)
    my:singlelineprop=singleline;短いコメントを入力してください。(.*)
    my:multilineprop=multiline;章全体をここにコピー&ペーストしてください。(.*)
    

TortoiseSVN はいくつかのバグ追跡ツールと統合できます。このとき bugtraq: で始まるプロジェクトプロパティを使用します。詳細情報は 「バグ追跡ツール/課題追跡システムとの統合」 をご覧ください。

TortoiseSVN は、webviewer: で始まるプロジェクトプロパティを使用して、いくつかの Web ベースのリポジトリブラウザーとも統合できます。詳細は 「Web ベースのリポジトリビューアーとの統合」 をご覧ください。

フォルダーへのプロジェクトプロパティの設定

これらのプロパティは、作業するシステムのフォルダーに設定しなければなりません。これらのプロパティを使用する TortoiseSVN のコマンドを使用するときは、クリックしたフォルダーからプロパティが読み取られます。フォルダーにプロパティが設定されていない場合、プロパティはフォルダー階層を上位に向かって、バージョン管理外フォルダーか、ツリーのルート(例: C:\)に到達するまで検索されます。すべてのユーザーが、例えば trunk/ からチェックアウトし、サブフォルダーからチェックアウトしないことが確認できるのであれば、 trunk/ にそのプロパティを設定するだけで充分です。確認できない場合、各サブフォルダーに対し再帰的にプロパティを設定するべきです。もしプロジェクトの異なる階層に、同じプロパティで異なる値を設定した場合は、クリックしたフォルダの階層に依存して結果が変わります。

プロジェクトプロパティ(例:tsvn:bugtraq:webviewer:)に限っていえば、 プロパティを再帰的に適用する チェックボックスを使うと、そのフォルダ以下のすべてのサブフォルダーにプロパティを設定しますが、ファイルには設定しません。

TortoiseSVN で新しいサブフォルダーを作業コピーに追加する際、親フォルダーに設定されているプロジェクトプロパティは、新しいサブフォルダーにも自動的に追加されます。

リポジトリブラウザーを使用する際の制限

リモートからプロパティを取得するのは時間がかかります。そのため、上記の機能のうちいくつかは、作業コピーで使用しているリポジトリブラウザーでは動作しません。

  • リポジトリブラウザーを使用してプロパティを追加する場合、標準的なliteral>svn:

  • リポジトリブラウザーを使用して、プロパティを再帰的に設定もしくは削除することは出来ません。

  • 子階層のフォルダーがリポジトリブラウザーで追加された際に、プロジェクトのプロパティは自動で広まることはありません

  • tsvn:autopropsは、リポジトリブラウザーで追加されたファイル上のプロパティを設定しません

注意

TortoiseSVN のプロジェクトプロパティは非常に便利ですが、TortoiseSVN でしか動作せず、またいくつかは TortoiseSVN の新しいバージョンでしか動作しません。プロジェクトのメンバが様々な Subversion のクライアントを使用している場合や、古い TortoiseSVN しか持てない場合、プロジェクトポリシーを強制するのに、リポジトリフックを使用することになるでしょう。プロジェクトプロパティは、ポリシー実装の補助にしかならず、強制することはできません。

プロパティエディター

一部のプロパティは、自動処理に使用されるため、特定の値や特定の書式にする必要があります。正しい書式を設定やすくするため、 TortoiseSVN では幾つかの特定のプロパティについて、設定可能な値を表示したり、独立コンポーネントに分配したりするための編集ダイアログを提供しています。

外部参照項目

図4.44 svn:externals プロパティページ

svn:externals プロパティページ


svn:externals プロパティは、同じリポジトリもしくは完全に異なるリポジトリから、他のプロジェクトを取得するのに使用できます。詳細は 「外部項目」 をご覧ください。

チェックアウトした外部フォルダーや、外部項目の Subversion の URL のサブフォルダーの名前を設定する必要があります。外部フォルダーの最新リビジョンをチェックアウトしておけば、外部項目がリポジトリの中で変更されたときに、作業コピーを更新させることができます。しかし、特定の安定した時点のものを外部で参照できるようにするには、使用する特定のリビジョンを指定することもできます。また、この場合、ペグリビジョンと同じリビジョンを指定したいかもしれません。外部項目が将来何らかの時点で改名されると、Subversionは作業コピーでこの項目を更新できなくなります。ペグリビジョンを指定することで、最新版ではなくペグリビジョンの時の名前をSubversionに検索させることができます。

最新リビジョンを探すを押すと、外部項目の各URLを確認し、右端の列に最新リビジョン表示されます。最新リビジョンが分かったら、外部項目の上で右クリックすると、選択された外部項目を該当する最新リビジョンにペグ付けできます。最新リビジョンが不明な場合、右クリックのコマンドを実行すると、まず最新リビジョンが取得されます。

SVN キーワード

図4.45 svn:keywords プロパティページ

svn:keywords プロパティページ


ファイル内に展開したいキーワードを選択してください。

改行コード

図4.46 svn:eol-style プロパティページ

svn:eol-style プロパティページ


使用したい行末のスタイルを選択します。それで、 TortoiseSVN は適切なプロパティ値を使用することができます。

課題追跡システムとの統合

図4.47 tsvn:bugtraq プロパティページ

tsvn:bugtraq プロパティページ


ログメッセージの大きさ

図4.48 ログメッセージサイズのプロパティページ

ログメッセージサイズのプロパティページ


これら3つのプロパティは、ログメッセージの書式を制御します。最初の2つを設定すると、コミットダイアログやロックダイアログで、メッセージが最小文字列の長さに達するまでOKボタンが無効になります。境界の位置は、それらのログメッセージの幅制限が設定されているプロジェクトのためのガイドとして指定されたカラム幅でマーカーを示しています。値をゼロに設定すると、プロパティが削除されます。

プロジェクトの言語

図4.49 言語プロパティページ

言語プロパティページ


コミットダイアログのログメッセージのスペルチェックに使用する言語を選択してください。右のログメッセージのペインでクリックして選択すると、ファイルリストのチェックボックスが有効になりますので、 ファイル名のリストを貼付 を選択してください。デフォルトでは Subversion の状態が、既定の言語で表示されます。このボックスがチェックされるとステータスが常に英語のみになります。英語のログメッセージを必要とするプロジェクトで有効です。

MIMEタイプ

図4.50 svn:mime-type プロパティページ

svn:mime-type プロパティページ


svn:needs-lock

図4.51 svn:needs-lock プロパティページ

svn:needs-lock プロパティページ


このプロパティは、作業コピーがロックされていない場合、ファイルを読み取り専用の状態でチェックアウトするかどうかを制御します。

svn:executable

図4.52 svn:executable プロパティページ

svn:executable プロパティページ


このプロパティは、Unix / Linux システム上で、チェックアウト時にファイルに実行属性を付与するかどうかを指定します。これは、 Windows でチェックアウトする場合には影響しません。

マージログメッセージのテンプレート

リビジョンが作業コピーにマージされるたびに、TortoiseSVNはマージされた全リビジョンからログメッセージを作成します。コミットダイアログの最近のログメッセージボタンを押すと現れます。

以下のプロパティを指定すると、作成されるメッセージをカスタマイズできます。

図4.53 プロパティダイアログのマージログメッセージのテンプレート設定

プロパティダイアログのマージログメッセージのテンプレート設定


tsvn:mergelogtemplatetitle, tsvn:mergelogtemplatereversetitle

このプロパティは生成されるログメッセージの最初の部分になります。次のキーワードを使用することができます。

{revisions}

マージされたリビジョン番号のカンマ区切りのリスト(例えば、3, 5, 6, 7)。

{revisionsr}

{revisions}と同様だが、各リビジョンの前にrが付く(例えば、r3, r5, r6, r7)。

{revrange}

マージされたリビジョン番号のカンマ区切りのリストだが、可能な場合は範囲をグループ化する(例えば、3, 5-7)。

{mergeurl}

マージのソースURL、すなわちリビジョンのマージ元の場所。

この文字列の既定値は「{mergeurl}からリビジョン{revrange}をマージ:」で、最後に改行が入ります。

tsvn:mergelogtemplatemsg

このプロパティはマージされた各リビジョンがどのように見えるかを定義します。次のキーワードを使用することができます。

{msg}

マージされたリビジョンのログメッセージ(入力されたまま)。

{msgoneline}

{msg}と同様だが、改行文字が空白に置き換えられ、ログメッセージ全体が1行で表現されたもの。

{author}

マージされたリビジョンの作者。

{rev}

マージされたリビジョン番号。

{bugids}

マージされたリビジョンのバグID(もしあれば)。

tsvn:mergelogtemplatemsgtitlebottom

この文字列はtsvn:mergelogtemplatetitleまたはtsvn:mergelogtemplatereversetitleで指定されたタイトル文字列の位置を指定します。このプロパティをyesまたはtrueに設定すると、タイトル文字列は冒頭ではなく末尾に追加されます。

重要

これはマージされたリビジョンがすでにログキャッシュにある場合のみ動作します。もしログキャッシュを無効にしていたり、マージ前にログを表示していなかったりすると、メッセージにはマージされたリビジョンの情報が入りません。

外部項目

時には、たくさんの異なるチェックアウトから作業コピーを構成するのは、便利なことがあります。たとえば、リポジトリ内の異なる場所もしくは異なるリポジトリにある、異なるサブディレクトリが必要になるかもしれません。全てのユーザーが同じレイアウトを保持するには、svn:externals プロパティを設定し、必要なところから指定したリソースを取得します。

外部フォルダー

さて、ここで/project1の作業コピーをD:\dev\project1にチェックアウトとするとしましょう。D:\dev\project1フォルダーを選択して右クリックし、コンテキストメニューからWindows メニューのプロパティを選択します。プロパティダイアログが表示されます。次に Subversion タブに移動すると、プロパティを設定することができます。プロパティ... をクリックして表示されるダイアログで、svn:externalsが既に存在すればそれをダブルクリックし、そうでなければ新規... ボタンを押し、メニューからsvn:externalsを選択します。新たな外部項目を追加するには、新規... ボタンをクリックしてから、表示されるダイアログで必要な情報を入力します。

注意

正しく動作させるためには、URLを適切にエスケープする必要があります。例えば、空白文字は%20に置き換えなければなりません。

ローカルのパスに空白や特殊文字を使用したい場合、二重引用符で囲ったり、Unix シェル形式のエスケープ文字 \ (バックスラッシュ) を特殊文字の前に置いてください。もちろんこれは、パス区切り文字に /(スラッシュ)を使わなければならない、ということでもあります。この挙動は Subversion 1.6 の新機能で、それ以前のクライアントでは動作しないことに注意してください。

リビジョン番号を指定する

上に示したように、すべての外部参照の定義において、リビジョン番号を指定することを強くお勧めします。そうすれば、別なバージョンの外部の情報を取り出すとき、どれを取り出すか正しく特定できます。常識的にはコントロールが利かないサードパーティーのリポジトリに変更があっても驚かされなくなるという面もありますが、リビジョン番号を指定するということは、作業コピーを以前のリビジョンに戻す場合、外部参照の定義もそのリビジョンが参照していた時のものに戻るということで、つまりリポジトリの古いリビジョンに切り替えれば、外部参照がその時点で作業コピーが参照していたリビジョンに更新されるということです。ソフトウェアのプロジェクトにおいて、これは古い複雑なコードベースで過去のスナップショットの構築に成功するか失敗するかの分かれ目になります。

svn:externalsプロパティの編集ダイアログでは外部参照を選択できますが、明示的に最新リビジョンが選択されます。

外部プロジェクトが同じリポジトリにある場合、メインプロジェクトの変更をコミットすると、変更がコミットリストに含まれます。

もし異なるリポジトリに存在する外部プロジェクトに変更を加えた場合、メインプロジェクトをコミットする際に外部プロジェクトに加えた変更も併せて表示されます。しかし、これらの外部プロジェクトへの変更は別々にコミットしなければなりません。

svn:externals の定義に絶対 URL を使用し、作業コピーを再配置しなければならない(つまり、リポジトリの URL を変更する)場合、外部参照は変化せず、もう動作しないかも知れません。

このような問題を避けるため、Subversion クライアントバージョン 1.5 以降では、相対外部参照 URL をサポートします。相対 URL を指定する4つの異なる方法をサポートしています。以下の例では、2つのリポジトリ(http://example.com/svn/repos-1http://example.com/svn/repos-2)があると仮定します。C:\Workinghttp://example.com/svn/repos-1/project/trunk のチェックアウトがあり、トランクに svn:externals プロパティをセットしています。

親ディレクトリへの相対パス

この URL は、以下の例のように、常に ../ という文字列で始まります。

../../widgets/foo  common/foo-widget

これは、C:\Working\common\foo-widgethttp://example.com/svn/repos-1/widgets/foo を抽出します。

URL が、ディスクに書かれている外部参照のディレクトリではなく、svn:externals プロパティにあるディレクトリの URL への相対パスであることに注意してください。

リポジトリのルートへの相対パス

この URL は、以下の例のように、常に ^/ という文字列で始まります。

^/widgets/foo  common/foo-widget

これは、C:\Working\common\foo-widgethttp://example.com/svn/repos-1/widgets/foo を抽出します。

同じ SVNParentPath (複数のリポジトリを保持する共通ディレクトリ) にある他のリポジトリに、容易に参照できます。例は以下のようになります。

^/../repos-2/hammers/claw  common/claw-hammer

これは、C:\Working\common\claw-hammerhttp://example.com/svn/repos-2/hammers/claw を抽出します。

スキームへの相対パス

// で始まる URL は URL のスキーム部のみをコピーします。これは同じホスト名に対して、ネットワークの場所によって異なるスキームでアクセスしなければならない場合に便利です。例えば、インターネットにあるクライアントは http:// を使用するのに、外部クライアントは svn+ssh:// を使用するということです。以下に例を挙げます。

//example.com/svn/repos-1/widgets/foo  common/foo-widget

これは、C:\Working をチェックアウトするのに使用した方法により、http://example.com/svn/repos-1/widgets/foosvn+ssh://example.com/svn/repos-1/widgets/foo を抽出します。

サーバーのホスト名への相対パス

/ で始まる URL は URL のスキーム部とホスト名部をコピーします。以下に例を挙げます。

/svn/repos-1/widgets/foo  common/foo-widget

これは C:\Working\common\foo-widgethttp://example.com/svn/repos-1/widgets/foo を抽出します。しかし、svn+ssh://another.mirror.net/svn/repos-1/project1/trunk というように別のサーバーから作業コピーをチェックアウトすると、外部参照は svn+ssh://another.mirror.net/svn/repos-1/widgets/foo を抽出します。

必要に応じて、URLに対してペグリビジョンや操作対象リビジョンを設定することができます。ペグリビジョンや操作対象リビジョンについて詳しいことは、 Subversion book の corresponding chapter をご覧ください。

重要

上記の例のように外部の対象フォルダをサブフォルダとして指定する場合、必ず両者の 全ての フォルダがバージョン管理されていることを確認してください。上記の例の場合、common フォルダがバージョン管理されている必要があります。

ほとんどの場合、両者がバージョン管理されていなくても動作しますが、一部の操作は期待通りに動作しないことがあります。また、エクスプローラのステータスオーバーレイアイコンが正しいステータスを表示しなくなります。

TortoiseSVN がプロパティをどのように扱うかについての詳細な情報は、 「プロジェクト設定」 を参照してください。

共通サブプロジェクトへの他のアクセス方法については、 「共通のサブプロジェクトを含める」 を参照してください。

外部ファイル

Subversion 1.6 では、フォルダーと同じ文法を用いて、単一ファイルの外部項目を作業コピーに追加できます。しかし、いくつか制限事項があります。

  • 外部参照ファイルへのパスは、svn:externalsプロパティで設定したフォルダーの直下の子でなければなりません。

  • 外部ファイルの URL が、外部ファイルを挿入する URL と同じリポジトリになければなりません。つまり、リポジトリ間の外部ファイルはサポートしていません。

外部ファイルの挙動は、あらゆる点でその他のバージョン管理下のファイルと同等ですが、通常のコマンドでは、移動・削除ができません。代わりに svn:externals プロパティを変更しなければなりません。

ドラッグ&ドロップで外部参照を作成

ファイルやフォルダーの作業コピーを作成済みで、他の作業コピーの外部参照として設定したい場合は、Windowsエクスプローラーからドラッグ&ドロップするだけで追加することができます。

ファイルやフォルダーを、ある作業コピーから外部参照を設定したい場所に右ドラッグしてください。マウスボタンを離して現れるコンテキストメニューで、SVN ここに外部参照として追加というメニュー項目をクリックすると、svn:externals

ブランチ/タグの作成

バージョン管理システムの特徴のひとつに、開発の別のラインに変更を隔離できることがあります。このラインは ブランチ と呼ばれています。ブランチは、開発のメインラインにコンパイルエラーやバグで混乱させることなく、新機能のを試験するために使用されます。新機能が充分に安定したら、開発ブランチをメインブランチ(トランク)に マージ して書き戻します。

バージョン管理システムのもうひとつの特徴として、リリースしたリビジョンなど特定のリビジョンをマークする機能があります。このため、いつでも確実にビルドや環境を再作成できます。このプロセスは タグ付け と呼ばれています。

Subversion には、ブランチやタグを作成するための特別なコマンドはありませんが、代わりに 簡易コピー と呼ばれるものを使用します。簡易コピーは、 Unix のハードリンクと似ています。つまり、リポジトリの完全なコピーを作成する代わりに、指定したツリーやリビジョンを指す内部リンクを作成します。そのため、ブランチやタグの作成は、非常に高速で、リポジトリに追加スペースをほとんど使用しません。

ブランチ/タグの作成

プロジェクトを標準的なディレクトリ構成でインポートしているなら、ブランチ/タグバージョンを作成するのはとても簡単です。

図4.54 ブランチ/タグの作成ダイアログ

ブランチ/タグの作成ダイアログ


ブランチやタグにコピーしたい作業コピーのフォルダーを選択してから、 TortoiseSVNブランチ/タグの作成... コマンドを実行してください。

新しいブランチのコピー先 URL のデフォルトは、作業コピーの基準になったコピー元 URL になっています。ブランチ/タグの URL を新しいパスに変更してください。つまり、

    http://svn.collab.net/repos/ProjectName/trunk

の代わりに、

    http://svn.collab.net/repos/ProjectName/tags/Release_1.10

のようにするということです。前回使用した命名規則を思い出せなければ、右にあるボタンをクリックすれば、リポジトリブラウザーが開かれ、既存のリポジトリの構造を確認することができます。

中間フォルダー

ターゲットURLを特定するとき、末端のフォルダーまですべてが存在していなければならず、存在しなければエラーメッセージが表示されます。上記の例の場合、http://svn.collab.net/repos/ProjectName/tags/というURLに対応するフォルダーが存在しなければ、Release_1.10というタグを作成することができません。

まだ中間フォルダーが存在しないURLのブランチやタグを作成したいのであれば、ダイアログ下部の中間フォルダーを作成をチェックしてください。このオプションが有効な場合、すべての中間フォルダーが自動的に作成されます。

なお、入力ミスの影響を防ぐため、このオプションはデフォルトで無効になっています。例えば、http://svn.collab.net/repos/ProjectName/tags/Release_1.10というURLを間違えてhttp://svn.collab.net/repos/ProjectName/Tags/Release_1.10と入力した場合、このオプションが無効であればエラーが表示されますが、このオプションが有効であればTagsというフォルダーが自動的に作成され、Tagstagsの両方のフォルダーができてしまう結果になります。

そして、コピーの作成元を選択してください、ここでは3つの選択肢があります。

リポジトリ内の最新リビジョン

新しいブランチは、リポジトリの最新である最新リビジョンから直接コピーされます。データを作業コピーから転送する必要がないため、ブランチは非常に高速に作成されます。

リポジトリ内の特定リビジョン

新しいブランチは直接リポジトリからコピーされますが、古いリビジョンを指定できます。先週プロジェクトをリリースした際に、タグを作り忘れたときなどに便利です。リビジョン番号を思い出せなければ、右のボタンを押すとリビジョンログが表示されるので、そこからリビジョン番号を選択してください。こちらも作業コピーから転送されるデータはなく、ブランチは非常に高速に作成されます。

作業コピー

新しいブランチは、ローカルの作業コピーと同一になります。作業コピーを以前のリビジョンへ更新したり、ローカルで変更を行ったりすると、これがコピーに取り込まれます。当然、そのような複雑なタグを作成する場合、リポジトリにまだ反映されていないデータは、作業コピーからリポジトリに転送されます。

作業コピーを新しく作成したブランチに自動的に切り替えたい場合、作業コピーを新しいブランチ/タグへ切り替える チェックボックスをチェックしてください。しかしそうするには、まず作業コピーに変更が含まれていないことを確認してください。もし含まれていると、切り替えたときにブランチの作業コピーに変更点がマージされていまいます。

もし作業コピーが svn:externals プロパティで別のプロジェクトを含んでいると、外部項目がブランチ/タグダイアログの下部に一覧表示されます。各外部項目とそのターゲットパス、ソースURL、リビジョンが表示されます。

新しいタグを常に一貫した状態にするためには、すべての外部項目の持つリビジョンが固定されていることを確認する必要があります。外部項目を確認せず、また外部項目のリビジョンが将来変更される可能性のある HEAD を指定していた場合、新しいタグをチェックアウトする際に外部項目はその時点での HEAD リビジョンが取得されてしまい、コンパイルに失敗する可能性があります。そのため、タグを作成するときには、常に外部項目に明示的なリビジョン番号を設定することをお勧めします。

外部項目はブランチ/タグのソースに応じて自動的に現在の HEAD か作業コピーの BASE に固定されます。

表4.1 ピン留めされたリビジョン

コピー元ピン留めされたリビジョン
リポジトリ内の最新リビジョン外部リポジトリの最新リビジョン
リポジトリのリビジョンを指定外部リポジトリの最新リビジョン
作業コピー外部の作業コピーのBASEリビジョン


外部参照中の外部参照

プロジェクトが外部参照自信を含む外部参照を含む場合、タグ付けされません。直接の子の外部参照だけがタグ付けされます。

リポジトリに新しいコピーをコミットするには OK を押してください。ログメッセージを書くのを忘れないでください。コピーは リポジトリの内部 で行われることに注意してください。

作業コピーを新しく作成したブランチに切り替えなければ、ブランチやタグを作成しても、作業コピーには影響を 与えない ことに注意してください。作業コピーからブランチを作成したとしても、その変更はトランクではなく新しいブランチにコミットされます。そのため、作業コピーのマークは、変更されたままになっているかもしれません。

ブランチやタグを作成するその他の方法

作業コピーがなくてもブランチやタグを作成する方法があります。リポジトリブラウザーを開き、フォルダーを新しい場所にドラッグします。 Ctrl キーを押しながらドラッグするとコピーになり、そうでなければフォルダーはコピーされずに移動します。

マウスの右ボタンでフォルダーをドラッグする方法もあります。マウスのボタンを離すと、コンテキストメニューでフォルダーを移動するかコピーするかを選択することができます。もちろん、ブランチやタグを作成するときは、フォルダーを移動ではなくコピーしてください。

ログダイアログから行う方法もあります。例えばトランクの、特定のリビジョン(HEAD リビジョンでも古いリビジョンでも良い)のログダイアログを表示し、右クリックして リビジョンからブランチ/タグを作成 を選択します。

チェックアウトするか切り替えるか...

……それが(それほどではありませんが)問題です。チェックアウトは、リポジトリの指定したブランチから作業コピーへすべてダウンロードしますが、 TortoiseSVN切り替え... は変更のあったデータのみを作業コピーに転送します。ネットワーク負荷をとるか、忍耐力をとるかですね。:-)

新しく作成したブランチやタグで作業するには、いくつかの方法があります。次のように行ってください。

  • TortoiseSVNチェックアウト は空のフォルダーに新鮮なチェックアウトを行います。ローカルディスクのどこにもチェックアウトでき、お好みにあわせ、いくつでもリポジトリから作業コピーを作成できます。

  • 現在の作業コピーを、リポジトリに新しく作成したコピーに切り替えます。再びプロジェクトの最上位フォルダーを選択し、コンテキストメニューから TortoiseSVN切り替え... を使用してください。

    続くダイアログで、たった今作成したブランチの URL を入力してください。 HEAD リビジョン ラジオボタンを選択し、 OK をクリックしてください。作業コピーが新しいブランチ/タグに切り替えられます。

    切り替えは、ローカルの変更を決して破棄しないので、ちょうど更新のように動作します。まだコミットしていない作業コピーへの変更は、切り替えるとマージされます。こうして欲しくなければ、切り替える前にコミットをしておくか、作業コピーの変更を取り消し、既にコミットしてあるリビジョン(通常は HEAD リビジョン)まで戻さなければなりません。

  • トランクやブランチで作業したくても、まっさらなチェックアウトに時間を費やしたくない場合、トランクをチェックアウトした作業コピーを Windows エクスプローラーでコピーし、 TortoiseSVN切り替え... を使用して、新しいブランチに切り替える方法もあります。

図4.55 切り替えダイアログ

切り替えダイアログ


Subversion 自身はタグとブランチを区別しませんが、通常は以下のように少し異なる使い方をします。

  • タグは通常、プロジェクトの特定の場面の静的なスナップショットとして作られます。通常は開発には使用しません(それはブランチの役割であり、最初に /trunk /branches /tags というリポジトリ構造を推奨する理由です)。タグのリビジョンで作業することは よくありません が、ローカルファイルが書き込み保護されていないので、間違った操作を止める方法はありません。但し、リポジトリ内の /tags/ 以下のパスにコミットしようとした場合、 TortoiseSVN は警告するようになっています。

  • 既にタグ付けしたリリースに、変更を加える必要が発生することもあります。これを扱う正しい方法は、タグから新しいブランチを作成し、そのブランチをコミットすることです。変更をこのブランチに行い、その後、新しいブランチから Version_1.0.1 といったように、新しいタグを作成してください。

  • ブランチから作成した作業コピーを変更し、コミットする場合、すべての変更は新しいブランチに行われ、トランクには 行われません 。変更点のみ格納されます。残りは簡易コピーのままになります。

マージ

ブランチを開発の独立したラインでメンテナンスするのに使用する所では、何らかの段階で、ブランチに対して行われた変更をトランクにマージしたくなるでしょう。逆もまた然りです。

Subversion 内でどのようにブランチやマージを作成しているるかを、はじめる前に理解しておくのは(かなり複雑になってしまいますが)重要です。Subversion book の Branching and Merging の章を読むのを強くお勧めします。ここには詳しい説明とたくさんの使用例があります。

注意する次のポイントは、マージは 常に 作業コピーで行われるということです。ブランチの中に、変更をマージしたい場合、ブランチの作業コピーをチェックアウトして、その作業コピーで TortoiseSVNマージ... を行い、マージウィザードを起動しなければなりません。

一般的には、マージは変更されていない作業コピーに対して行うのが良いでしょう。作業コピーに何か他に変更が加えられているなら、まずコミットしてください。思うようにマージできないのなら、変更の取り消しを行う必要があるかもしれません。 変更の取り消し コマンドは、マージする前に行った変更を すべて 取り消してしまいます。

マージを行うには、以下で説明するような、少し異なる方法で行う、3つのよくあるケースがあります。マージウィザードの最初のページで、どちらで行うか確認しますので、選択してください。

リビジョンの範囲をマージ

これは、1つ以上のリビジョンがブランチ(もしくはトランク)に存在し、それらの変更を別のブランチに反映したいような場合に使用します。

Subversion に以下のことを行うように指示を出しています。ブランチAのリビジョン 1 [FROM] から、ブランチAのリビジョン 7 [TO] までの必要な変更点を計算し、(トランクやブランチBの)作業コピーに変更点を適用する

リビジョン範囲を空欄のままにした場合、 Subversion はマージ追跡機能を使用して、マージに使用する正しいリビジョン範囲を計算します。この機能は再統合や自動マージとして知られています。

異なる2つのツリーをマージ

これは、再統合する方法のもっと一般的なケースで、Subversion に対して、トランクの HEAD リビジョン(開始点)からブランチの HEAD リビジョン(終了点)までの必要な変更点を計算し、(トランクの)作業コピーに変更点を適用しなさい と指示します。結果的に、トランクがまさしくブランチと同様になっているということになります。

サーバー・リポジトリが、マージ追跡をサポートしていない場合、これはブランチをトランクにマージする唯一の方法になります。別のケースとしては、ベンダブランチを使用していて、新しくベンダから落としたコードの変更を、トランクにマージする必要がある場合もありえます。詳細は、Subversion Book の vendor branches をご覧ください。

リビジョン範囲のマージ

図4.56 マージウィザード - リビジョン範囲の選択

マージウィザード - リビジョン範囲の選択


マージ元のURL 欄には、作業コピーに取り込みたい変更があるブランチやタグのフォルダーの URL をすべて入力してください。... をクリックしてリポジトリを閲覧し望みのブランチを探すこともできます。以前このブランチからマージしたことがあるのであれば、以前使用されたURLの履歴のドロップダウンリストから選択するだけです。

名前が変更されたり削除されたりしたブランチからマージしようとする場合は、そのブランチが存在したリビジョンに戻らなければなりません。このような場合、マージする範囲のリビジョン(下記)をペグリビジョンで指定しないと、HEADリビジョンのパスが見つけられずにマージが失敗します。

マージするリビジョンの範囲 フィールドに、マージするリビジョンのリストを入力してください。ここではリビジョン1つ、コンマで区切ったリビジョンの指定、ダッシュでつないだリビジョンの範囲と以上の組み合わせが使用できます。

マージ時にペグリビジョンを特定する必要がある場合、ペグリビジョンをリビジョン番号の最後に、 5-7,10@3 のように追加してください。この例では、リビジョン5、6、7、10とペグリビジョンの3がマージされます。

重要

TortoiseSVN とコマンドラインクライアントを比較すると、リビジョン範囲を指定する方法に重要な違いがあります。これを思い浮かべる簡単な方法は、フェンスの柱と、フェンスの板について考えることです。

コマンドラインクライアントでは、 で指定した 2 本の フェンスの柱 のリビジョンを使用して、マージする変更を指定します。

TortoiseSVN では、フェンスの板 を使用して、マージする変更セットを指定します。マージするためのリビジョンを指定するログダイアログを使用する場合、チェンジセットとしてどこに各リビジョンが現れるか、明白になるためです。

かたまりとしてリビジョンをマージしていると、subversion book にある方法では、今回 100-200 をマージし、次回に 200-300 をマージすることになります。TortoiseSVN では、今回 100-200 をマージし、次回に 201-300 をマージします。

この違いは、メーリングリストでたくさんの論争を巻き起こしてきました。私たちは、コマンドラインクライアントと違うことを認めます。しかし、大多数の GUI ユーザーにとって、私たちが実装した方法の方が理解しやすいと信じています。

必要なリビジョンの範囲を選択する最も簡単な方法は、ログを表示 をクリックして、最近の変更点一覧をログメッセージと共に表示することです。単一リビジョンからマージしたい場合は、そのリビジョンを選択するだけです。複数のリビジョンからマージしたい場合は、その範囲を(通常 Shift キーを押しながら)選択してください。OK をクリックすると、マージするリビジョン番号のリストに入力されます。

すでにコミットしてしまった変更を取り消して、作業コピーを元に戻すようにマージする場合、戻したいリビジョンを選択して、逆マージチェックボックスを必ずチェックしてください。

このブランチからの変更をすでにマージしてある場合、うまくいけば変更をコミットしたときのメッセージに、マージした最後のリビジョンを記録してあるかもしれません。この場合、作業コピーのログメッセージを追跡するのに ログを表示 を使用できます。リビジョンをチェンジセットとして考えているのを思い出し、前回のマージの終点を今回のマージの始点をしてください。たとえば、前回リビジョン 37 から 39 までマージした場合、今回のマージの始点をリビジョン 40 にしてください。

Subversion のマージ追跡機能を使用する場合、どのリビジョンをすでにマージしたかを覚えておく必要はありません。Subversion が記録しています。リビジョン範囲をからのままにしておくと、まだマージしていないリビジョンすべてが対象になります。詳細は 「マージ追跡」 をご覧ください。

マージ追跡機能を使用する場合は、ログダイアログには前回マージされたリビジョンや、共通の祖先以前の時点(つまりブランチがコピーされる以前)のリビジョンが、グレーで表示されます。マージ不可能なリビジョンを隠すチェックボックスを使用すると、こうしたリビジョンを隠し、マージすることができるリビジョンだけを表示することができます。

他の人が変更をコミットしている場合、 HEAD リビジョンを指定する場合は注意してください。最後の更新のあとに誰かがコミットを行っており、想定しているリビジョンを指していないかもしれません。

リビジョンの範囲は空欄だったり、すべてのリビジョンのラジオボタンがチェックされていたりした場合は、 Subversion はまだマージされていないすべてのリビジョンをマージします。これは再統合または自動マージとして知られています。

再統合マージを適用するには、いくつか条件があります。まず、サーバーがマージ追跡をサポートしていなければなりません。作業コピーの深さに制限があってはなりません(部分的なチェックアウトであってはならない)。ローカルの変更や切り替えられた項目、 HEAD 以外のリビジョンに更新された項目があってはなりません。ブランチでの開発中にトランクに行われた変更は、ブランチをまたがってマージされます(もしくはマージ済みとマークされます)。マージ対象になるリビジョンの範囲は自動的に計算されます。

次へ >をクリックすると、 「マージオプション」 に進みます。

2つの異なるツリーをマージする

図4.57 マージウィザード - ツリーのマージ

マージウィザード - ツリーのマージ


機能ブランチをトランクにマージするために、この方法を使用する場合、トランクの作業コピーでマージウィザードを起動する必要があります。

開始点: 欄には、トランク のフォルダーの URL を入力してください。間違っているように思われるかもしれませんが、トランクが、ブランチの変更を追加する起点となることを思い出してください。... をクリックして、リポジトリを参照することもできます。

終了点: 欄に、機能ブランチのフォルダーの URL を入力してください。

開始点リビジョン 欄と 終了点リビジョン 欄の両方に、同期をとりたい2つのツリーの最新リビジョン番号を入力してください。他の誰もコミットしていないという確認が取れているのなら、どちらも HEAD リビジョンを指定できます。同期をとってから、誰かがコミットする機会があったのなら、最近のコミットの内容を失わないように、リビジョン番号を指定してください。

リビジョンを選択するには ログを表示 も使用できます。

マージオプション

ウィザードのこのページでは、マージの実行前に、さらにオプションの指定ができます。ほとんどの場合デフォルトの設定を使用するだけでしょう。

マージする深さを指定することもできます。これは、作業コピー内をどの程度深くたどってマージを行うかということです。深さについては 「チェックアウトの深さ」 で説明しています。デフォルトの深さは 作業コピー で、既存の深さをそのまま使用します。

大抵の場合、マージ時にはファイルの履歴を考慮した方が好ましいので、共通の祖先からの変更がマージされます。時には、リポジトリに入っていなくても、関連している可能性が高いファイル同士ををマージする必要もあるでしょう。例えば、第三者が作成したライブラリのバージョン1と2が、別々なディレクトリに入れられていた場合です。理屈からみれば両者は関連していますが、Subversionにはそれが別個にインポートされたファイルの集合としか認識できず、両者が関連しているとは分かりません。この2つのツリーの差分をマージしようとすると、全体を追加して全体を削除する操作になってしまいます。Subversionが履歴の差分を無視して現状の差分のみを使用するようにするには、 履歴を無視する をチェックしてください。本件についての詳細な説明は、 Subversion book の Noticing or Ignoring Ancestry を参照してください。

改行コードや空白の変更に対する扱い方を指定できます。このオプションについては 「改行コードと空白のオプション」 で説明しています。デフォルトの振る舞いは、空白や改行コードの差異も実際の変更としてマージします。

強制的にマージする をチェックすると、ローカルで変更されたファイルやバージョン管理されていないファイルに対して削除を行うようなツリーの競合を無視します。こうしたファイルが削除されると復元する方法がないので、このオプションはデフォルトではチェックされていません。

マージ追跡を使用していて、実際にはマージせずにマージしたという印をつけたい場合、 マージを実施せず、マージしたことにする チェックボックスをチェックしてください。そうする理由として2つ考えられます。1つは、マージそのものがマージアルゴリズムに対して複雑すぎ、手でコードを変更した後、マージアルゴリズムが行うようにマージにより変更したという印をつけたい場合です。もう1つは、特定のリビジョンがマージされるのを防ぐ場合です。すでにマージしたという印がついていれば、マージ追跡を関知するクライアントでは、マージを防げます。

すべての設定が終われば、あとは マージ ボタンを押すだけです。このとき マージのテスト を押すと、作業コピーを 変更せずに マージ結果をプレビューすることができます。これでマージを実行した時に変更が入るファイルの一覧や、競合が発生する 可能性のある ファイルを見ることができます。マージ処理はマージを追跡することではるかに複雑になるため、あらかじめマージが競合なしで完了するかを確実に判断する方法がないので、実際には問題なくマージできるようなファイルであっても、マージのテストでは競合すると表示される場合もあります。

マージ進行ダイアログには、マージの各状態を、リビジョン範囲とともに表示します。ここには想定していたよりも一つ多くリビジョンを表示するかもしれません。例えば、リビジョン 123 をマージするように指示した場合、進行ダイアログには、リビジョン 122 〜 123 をマージ と表示されます。マージは差分と密接に関連していることを思い出してください。マージ処理は、リポジトリの二点間における差分の一覧を生成し、その差分を作業コピーに適用する形で動作します。進行ダイアログは、単純にこの差分の始点と終点を表示しているに過ぎません。

マージ結果のレビュー

さて、マージが完了しました。マージ結果を見て期待通りになっているかを確認するのがいいでしょう。通常マージはかなり複雑です。ブランチがトランクからかなりずれてしまえば、しばしば競合を引き起こします。

ヒント

リビジョンが作業コピーにマージされるたびに、TortoiseSVNはマージされた全リビジョンからログメッセージを作成します。コミットダイアログの最近のログメッセージボタンを押すと現れます。

作成されるメッセージをカスタマイズするには、作業コピーに該当するプロジェクトプロパティを設定してください。詳しくは、「マージログメッセージのテンプレート」を参照してください。

バージョン 1.5 未満の Subversion のクライアント・サーバーは、マージ情報を格納しておらず、マージしたリビジョンは、手作業で追跡しなければなりません。ある変更点のテストを行い、そのリビジョンをコミットする際に、マージで取り込んだリビジョン番号を 常に コミットログに記録するべきです。あとで別のマージを適用しようとしたときに、再度変更を取り込むことがないよう、すでにマージした内容を知る必要があります。これについては Subversion Book の Best Practices for Merging をご覧ください。

サーバーとすべてのクライアントが Subversion 1.5 以上の場合、マージ追跡機構がマージしたリビジョンを記録し、再度マージすることがないようにします。これにより、単純にリビジョン範囲全体を指定し、実際に新しいリビジョンのみがマージされるといったことができるようになります。

ブランチ管理は重要です。このブランチをトランクに合わせて最新の状態を維持したければ、たびたびマージを確実に行わないと、ブランチとトランクがだんだん離れていってしまうのです。もちろん上で説明したように、変更点を再度マージしてしまうことは避けなければなりません。

ヒント

昨日ブランチからトランクへマージが完了すると、トランクには新機能のすべてのコードが含まれ、ブランチは必要なくなります。必要ならリポジトリから削除してかまいません。

重要

Subversion ファイルをフォルダーとマージはできませんし、逆もまた同様です。ただフォルダーとフォルダー、ファイルとファイルで行えます。ファイルをクリックしてマージダイアログを開いたら、ファイルのパスを与えなければなりません。フォルダーを選択してダイアログを開いたらマージするフォルダーの URL を指定しなければなりません。

マージ追跡

Subversion 1.5 は、マージ追跡機構を導入しました。あるツリーから別のツリーへ変更をマージすると、マージしたリビジョン番号を格納し、この情報を様々な異なる用途に使用します。

  • 再度同じリビジョンをマージする危険(再マージ問題)を避けられます。一度マージ済みとマークされたリビジョンは、将来のマージで、マージ範囲にそのリビジョンが含まれていてもスキップします。

  • トランクにブランチをマージする際、トランクのログの一部として、ブランチのコミットもログダイアログに表示し、変更のトレーサビリティが向上します。

  • マージダイアログの中からログダイアログを表示すると、すでにマージしたリビジョンを灰色で表示します。

  • ファイルに対して注釈履歴を表示する際、マージした人ではなく、マージされたリビジョンのオリジナル作者を表示するよう選択できます。

  • マージされたリビジョンのリストにある、実際にはマージされていないリビジョンに対して、未マージ としてマークできます。

マージを行う際、クライアントはマージ追跡情報を、svn:mergeinfo に格納します。マージをコミットする際には、サーバーはその情報をデータベースに格納し、マージやログ、注釈情報などのリクエストに適切に応答します。システムが適切に動作するには、サーバーとリポジトリ、全クライアントを確実にアップグレードしなければなりません。以前のクライアントでは、svn:mergeinfo プロパティを格納しませんし、以前のサーバーでは、新しいクライアントが要求した情報を提供できません。

マージ追跡についてそれ以外のことについては、 Subversion のMerge Tracking の説明をご覧ください。

マージ後に発生した競合の扱い

重要

競合の解決ダイアログの文字列はSVNライブラリによって提供されているため、(まだ)TortoiseSVNのダイアログのようには翻訳することができません。申し訳ありません。

マージが常にすんなり完了するとは限りません。時には競合を起こします。TortoiseSVN は、競合の解決 ダイアログを表示して、この処理の手助けをしてくれます。

図4.58 競合の解決ダイアログ

競合の解決ダイアログ


リポジトリにコミット済みの他の変更と、ローカルでの他の変更が競合した場合は、円滑にマージされている可能性が高いです。マージ可能なすべての変更がマージされます。競合の解決ダイアログは、競合を解決する異なる方法を提供します。

ファイルの内容やプロパティが変更されたことによって発生するふつうの競合については、競合箇所にどれを保持するか、不採用かを選択するためのボタンがダイアログに表示されます。

ツリーの競合がある場合は、まず様々な種類のツリーの競合について「ツリーの競合」を参照し、どのような解決策が取れるかを確認してください。

マージ後にツリーの競合を解決するために、さまざまな競合の解決方法を選択するダイアログが表示されます。

図4.59 ツリー競合の解決ダイアログ

ツリー競合の解決ダイアログ


ツリーの競合には様々な要因があるため、ダイアログでは競合に応じた解決方法のボタンが表示されます。ボタンの文字列とラベルで、その選択肢がどのように競合を解決するかが説明されます。自信がない場合は、後で競合を解決するために、ダイアログをキャンセルするか、後でボタンを押すかしてください。

機能ブランチの保守

別々のブランチで新しい機能を開発する際、機能が完成した時の再統合指針を立てると良いと思います。別の作業がトランク (trunk) で同時に進んでいる場合、時間がたつにつれて差異は深刻になり、マージを行うのは悪夢のようになります。

機能が比較的単純で、開発に時間がかからなそうであれば、機能が完成するまで全体を分けたブランチを維持し、ブランチの変更をトランクにマージするという、単純なアプローチを採用できます。マージウィザードでは、これを単純に リビジョンの範囲をマージ で、リビジョン範囲にブランチのリビジョン期間を指定して行います。

その機能に時間がかかり、トランクに対して変更を説明する必要がある場合、ブランチの同期を維持する必要があります。これは、トランクの変更点 プラス 新機能をブランチが持つように、単純にトランクへの変更を定期的にブランチへマージするということです。同期プロセスでは リビジョンの範囲をマージ を用います。機能が完成したら、ブランチを再統合する異なる2つのツリーをマージ のどちらかを用いて、trunk にマージできます。

トランクのすべての変更を機能ブランチに反映する他の(手早い)方法として、拡張コンテキストメニュー(Shiftキーを押したままファイルを右クリック)にあるTortoiseSVNすべてマージ...を使用できます。

図4.60 すべてマージダイアログ

すべてマージダイアログ


このダイアログは非常に簡単です。しなければならないことは、 「マージオプション」 にあるように、マージオプションを設定することだけです。TortoiseSVN は、マージ追跡を使用して残りを自動的に処理します。

ロック

Subversion は一般的に、 「コピー・変更・マージモデル」 で先に説明したとおり、コピー・変更・マージ 法を使用して、ロックしない方が最もよく動作します。しかし、ロックするポリシーの形で実現する必要があるかもしれません。

  • 例えば画像ファイルといった、マージできないファイルを使っている場合。同じファイルを 2 人の人が変更した場合、マージできません。そのためどちらかの人の変更が失われます。

  • 自分の会社が過去に、ロックするリビジョン管理システムを常に使用していて、管理するのに ロックが一番だ と決まっている場合。

第一に Subversion サーバーをバージョン 1.2 以降に確実にアップグレードする必要があります。それ以前のバージョンでは、ロックを全くサポートしていません。file:// アクセスを使用するなら、もちろんクライアントの方を更新する必要があります。

ロックの3つの意味

この節をはじめ、この文書の多くの場所では、ロックロックするという語は、コミットを壊さないためにユーザー間で排他処理を行うことを指しています。しかし、Subversionではさらに2つのロックという用語が使われているため、この文書でも注意しなければならない場合があります。

2番目の意味は作業コピーのロックで、Subverionでは、もともと同じ作業コピーを扱う複数のSubversionクライアント間での破壊を防ぐためのものです。通常この意味でのロック状態になるのは、更新やコミットなどのコマンドがエラーで中断された場合です。この意味でのロックは、作業コピーに対してクリーンアップコマンドを実行すると解消できます。詳しくは「クリーンアップ」をご覧ください。

3番目の意味は、ファイルやフォルダーが他のプロセスから使用中のためにロックされている状態で、例えばWordで文書を開いているとき、ファイルはロックされTortoiseSVNからアクセスできません。

何か対処しなければならない問題が発生したとき、3種類のロックがあることを忘れがちです。この文書ではロックという用語を、文脈から明らかであるか、特に明記されていない限り、最初の意味で使用しています。

Subversion でロックがどのように働くか

デフォルトではロックを行わず、コミットアクセスできる人が、いつでもどのファイルでも変更をコミットすることができます。他の人は自分の作業コピーを定期的に更新し、ローカルに行った変更をリポジトリにマージするでしょう。

ファイルの ロックを取得 すると、自分しかそのファイルをコミットできなくなります。他のユーザーがコミットしようとしても、自分がロックを解除するまでできません。ロックしたファイルは、どんな方法でもリポジトリ内の変更ができません。そのため、ロック所有者を除いて削除も名前の変更もできなくなります。

重要

ロックはユーザー単位ではなく、特定のユーザーと作業コピーに結び付けられています。ある作業コピーでロックを獲得すると、同じユーザーでも別な作業コピーをコミットすることはできなくなります。

例えば、 John というユーザーがオフィスのPCで作業コピーを持っていたとします。そこに彼は、ある画像ファイルの作業を開始し、そのファイルのロックを獲得したとします。オフィスを離れるとき、そのファイルをまだ終えていないので、彼はそのロックを解除しませんでした。家に帰って、 John はこちらでも作業コピーを持ち、プロジェクトの作業をもう少しすることにしました。しかし、オフィスの作業コピーでロックを獲得していたため、同じ画像ファイルを変更したりコミットしたりすることはできません。

しかし他のユーザーは、自分がロックしたことを知る必要はありません。定期的にロック状態をチェックしなければ、まず他のユーザーはコミットが失敗して気が付くでしょう。ほとんどこのケースでしょうがあまり便利ではありません。ロックの管理を簡単にするには、新しい Subversion のプロパティで svn:needs-lock があります。ファイルにこのプロパティが(値は何でも)セットされていると、ファイルをチェックアウトや更新すると常にローカルのコピーは読み取り専用になります。ファイルにロックを取得しない限りこのままです。この動作は、まずロックを取得するまでファイルの編集ができないということを警告しています。バージョン管理下で読み取り専用のファイルは、編集前にロックする必要があることを示すように、TortoiseSVN では特別なオーバーレイアイコンでマークされます。

ロックは所有者と共に作業コピーの場所に記録されます。自宅や職場など複数の作業コピーがある場合、ロックは作業コピーの中のひとつだけに記録されます。

仕事仲間の一人がロックを取得し、解除しないまま休暇を取ってしまったら、どうしたらいいでしょう? Subversion は強制的にロックする方法を用意しています。他の誰かが持っているロックを解除することを、ロックの 強制解除 と呼び、他の誰かが既にロックしているファイルを強制的にロックすることを、ロックの 横取り と呼びます。当然、仕事仲間と友人でいたいなら、軽々しく行うことではありません。

ロックはリポジトリに記録されます。また、ロックトークンはローカルの作業コピーに作成されます。他の誰かがロックを強制解除したりして、食い違いが発生すると、ローカルのロックは無効になります。リポジトリは常に決定的なリファレンスです。

ロックの取得

ロックを取得したい作業コピーのファイルを選択し、TortoiseSVNロックの取得... コマンドを選択してください。

図4.61 ロックダイアログ

ロックダイアログ


ダイアログが現れ、コメントを入力できるようになります。そのため他の人はなぜロックしたのかが判ります。コメントはオプションで、現在のところ Svnserve ベースリポジトリでしか使用できません。他の誰かからロックを横取りする場合(のみ)、ロックを奪う にチェックをつけてください。その後 OK をクリックしてください。

プロジェクトのプロパティの TSVN:logtemplatelock を設定すると、ロック時のメッセージを記入するユーザーにメッセージのひな形を提供することができます。プロパティを設定する方法は、 「プロジェクト設定」 を参照してください。

フォルダーを選択して、TortoiseSVNロックを取得... を使用すると、ロックするよう選択したすべてのサブフォルダー内の すべてのファイルがある状態でロックダイアログが開きます。本当に全階層をロックするのなら、これでできます。ですが、本当に仕事仲間をプロジェクトから閉め出してしまうのなら、彼らの中の評価は非常に悪くなるでしょう。慎重に使用してください...

ロックの解除

もう必要でなくなったロックの解除を忘れないように、ロックされたファイルはコミットダイアログに表示され、デフォルトで選択されています。コミットを続けると、変更されていないとしても、選択したままのファイルのロックが解除されます。特定のファイルでロックを解除したくない場合、そのファイルのチェックを外せます(変更されていない場合)。変更したファイルのロックを保持したければ、変更をコミットする前に ロックを保持 チェックボックスを有効にしておく必要があります。

手動でロックを解除するには、ロックを解除したいファイルを作業コピーで選択し、TortoiseSVNロックを解除コマンドを選択してください。追加で入力することはありません。そこで TortoiseSVN はリポジトリに接続し、ロックを解除します。フォルダーに対してこのコマンドを使用し、再帰的に全ロックの解除を行えます。

ロック状態のチェック

図4.62 変更をチェックダイアログ

変更をチェックダイアログ


誰がロックをかけているかを確認するのに、TortoiseSVN変更をチェック... を使用できます。ローカルに保持したロックの印はすぐに現れます。他の人が保持しているロックをチェックするには(そして誰がロックを強制解除したり横取りしたりしたかを見るには)、リポジトリをチェック をクリックしてください。

ここのコンテキストメニューから、他の人が保持しているロックを、強制解除したり横取りしたりするように、ロックを取得したり解除したりもできます。

ロックの強制解除・横取りは避ける

ほかの誰かのロックを、断りもなく強制解除・横取りすると、潜在的に作業を失う原因になります。マージ不可能なファイルの種類で作業していて、他の誰かのロックを横取りした場合、自分がロックを解除すると、自由に上書きできます。Subversion はデータを失いませんが、ロックがもたらすはずだった、チーム作業の保護を失ってしまいます。

ロックしていないファイルを読み込み専用にするには

上記のように、ロックを使用するのに最も効果的な方法は、svn:needs-lock プロパティを設定することです。プロパティの設定については 「プロジェクト設定」 をご覧ください。このプロパティを持つファイルは、ロックを取得していないと、チェックアウトや更新をしたときに常に読み込み専用になります。

TortoiseSVN は、忘れないように特別なオーバーレイアイコンで表示します。

ファイルやフォルダーをリポジトリに追加した際に、自動的にプロパティを設定するように Subversion を設定できます。詳細情報は 「プロパティの自動設定」 をご覧ください。

ロックのフックスクリプト

Subversion 1.2 以降で作成したリポジトリでは、リポジトリの hooks ディレクトリに4つフックテンプレートが追加されています。それぞれロック取得の前後、ロック解除の前後に呼ばれます。

ファイルがロックされたときに、そのファイルを表すのに email を送信するような、post-lockpost-unlock フックスクリプトをサーバーにインストールするのは名案です。そういったスクリプトが適切な場所にあると、誰かがファイルをロック・ロック解放するとユーザーすべてに通知されます。リポジトリフォルダーの hooks/post-lock.tmpl に、サンプルフックスクリプトがあります。

フックを使用すると、ロックの強制解除・横取りを禁止したり、特定の管理者のみに制限したりすることもできます。また、ロックの強制解除・横取りが発生した時に、ロックの所有者にメールを送るようにすることもできます。

詳細は 「サーバー側フックスクリプト」 を参照してください。

パッチの作成及び適用

(TortoiseSVN のような)オープンソースプロジェクトでは、リポジトリは誰もが読み込みアクセスできるようになっていて、誰もがプロジェクトに貢献できるようになっています。では、どのように貢献をコントロールするのでしょう? 誰もが変更をコミットできるようにすると、プロジェクトは永久に不安定になり、ややもすると永久に壊れた状態になるかもしれません。こういった状況では、変更を開発チーム(書き込む権限がある)への パッチ ファイルの送信といった形で管理しています。開発チームはまずパッチをレビューし、リポジトリに送信したり、拒否して作者に返却したりします。

パッチファイルは単なるUnified差分ファイルで、作業コピーと元になったリビジョンとの差分を表しています。

パッチファイルの作成

まず、変更したものの make とテスト をする必要があります。それから、親フォルダーで TortoiseSVNコミット... する代わりに、TortoiseSVNパッチを作成... を選択してください、

図4.63 パッチ作成ダイアログ

パッチ作成ダイアログ

ここで完全なコミットをするときのように、パッチに含めるファイルを選択できます。これで選択したファイルに対する、リポジトリを最後に更新したときからの変更点をまとめたファイルを得ることができます。

ダイアログの中の列は、 変更をチェック ダイアログの中の列と同じ方法でカスタマイズできます。詳細は 「ローカルとリモートの状態」 をご覧ください。

オプションボタンはをクリックすると、パッチの作り方を指定できます。たとえば、出力するパッチファイルで行末文字や空白文字の変更を含めないようにすることができます。

違うファイルの変更点を含めた分割したパッチも生成できます。もちろん、パッチファイルを生成してから、同じ ファイルに変更を加えて別のパッチを作成すると、2つ目のパッチには 両方 の変更点が含まれることになります。

それでは、任意のファイル名でファイルを保存してください。パッチファイルは任意の拡張子でかまいませんが、.patch.diff を拡張子に使用するのが通例となっています。これでパッチファイルを送信する準備ができました。

ヒント

パッチファイルを他の人にメールで送る場合は、.txtの拡張子で保存しないでください。生のテキストファイルは、メールソフトが空白や改行文字を自動的に変換したり切り詰めたりしてしまうことがあります。そうなると、パッチを円滑に適用できません。そのため、パッチファイルを保存するときは.patchまたは.diffの拡張子を使用してください。

また、ファイルに保存せずクリップボードに保存することもできます。電子メールに貼り付けて誰かにレビューしてもらう際に、そうしたくなると思います。また、1つのマシンに2つ作業コピーがあり、片方からもう片方へ変更を持っていくときに、クリップボードにパッチがあるとべんりです。

必要であれば、コミット変更をチェックダイアログでパッチファイルを作成することができます。ファイルを選択して、コンテキストメニューからパッチを作成するメニュー項目を選択してください。オプションダイアログを表示する場合は、 Shift を押しながら右クリックしてください。

パッチファイルの適用

作業コピーにパッチファイルを適用します。パッチを作成したフォルダーと同じ階層で行う必要があります。よくわからなければ、パッチファイルの最初の行を見てください。たとえば、最初のファイルが doc/source/english/chapter1.xml に対するもので、パッチファイルの最初の行が Index: english/chapter1.xml なら、doc/source/ フォルダーでパッチを適用する必要があります。適切な作業コピーを使用していても、適用するフォルダー階層が間違っていると、TortoiseSVN は適切な階層を使用するよう注意を促します。

パッチファイルを作業コピーに適用するために、少なくともリポジトリの読み込み権限が必要です。これは、他の開発者がリビジョンを変更していないかどうか、マージプログラムが参照するからです。

フォルダーのコンテキストメニューから、TortoiseSVNパッチを適用... をクリックしてください。するとファイルを開く ダイアログボックスが現れ、適用するパッチファイルを選択できます。デフォルトでは .patch ファイルか .diff ファイルのみが表示されていますが、すべてのファイルを選択できます。あらかじめパッチをクリップボードに保存していれば、ファイルを開く ダイアログの クリップボードから開く... を使用できます。

その他には、パッチファイルが .patch.diff といった拡張子を持つ場合、直接そのファイルを右クリックして、TortoiseSVNパッチを適用... を選んでください。この場合、作業コピーの場所を入力することになります。

この2つは同じことを違う方法で行っているだけです。1つ目は作業コピーを選択してからパッチファイルを閲覧し、2つ目はパッチファイルを選択してから作業コピーを閲覧します。

一度パッチファイルや作業コピーの場所を選択すると、パッチファイルの変更を作業コピーにマージするように TortoiseMerge が起動します。小さなウィンドウに変更のあったファイルを表示するので、その中の項目をダブルクリックして変更の確認や、マージしたファイルの保存を行ってください。

他の開発者のパッチが適用されたので、今度は誰もがリポジトリから変更点にアクセスできるよう、コミットする必要があります。

誰がその行を変更したか?

時々どの行が変更されたかだけでなく、ファイル内で、誰がどの行を変更したのか正確に知りたいことがあります。その場合は、TortoiseSVN注釈履歴... コマンドでできます。また annotate コマンドも役に立つので、時々参照されています。

このコマンドは、ファイルの行ごとに作業者と変更されたリビジョンを表示します。

ファイルの注釈履歴

図4.64 注釈履歴ダイアログ

注釈履歴ダイアログ


ずっと前のリビジョンに興味がなければ、注釈を見始めるリビジョンを設定できます。リビジョンの注釈履歴を見るのなら、これを 1 に設定してください。

デフォルトでは、 TortoiseBlame を使用して注釈を見ます。これは、異なるリビジョンを色分けして、見やすくしてくれます。注釈を印刷したり編集したりしたければ、 注釈履歴を見るためにテキストビューアーを用いる を選択してください。

改行コードや空白の変更に対する扱い方を指定できます。このオプションについては 「改行コードと空白のオプション」 で説明しています。デフォルトの振る舞いは、空白や改行コードの差異も実際の変更としますが、インデントの変更を無視してオリジナルの作者を見たい場合は、ここで適切なオプションを選択できます。

このオプションには、サーバーから取得するためかなり時間がかかる可能性はありますが、必要に応じてマージ情報を含めることができます。行が別のソースからマージされると、注釈履歴情報は、変更が元のソースだけでなく、それがこのファイルにマージされたリビジョンで作成されたリビジョンを表示します。

OKを押すと、TortoiseSVNは注釈ファイルを作成するため、データの取得を始めます。注釈処理が終了すると、結果を一時ファイルに書き出し、結果を表示します。

図4.65 TortoiseBlame

TortoiseBlame


TortoiseSVN に含まれる TortoiseBlame は、注釈ファイルを読みやすくしてくれます。マウスをある行の注釈情報列の上に持っていくと、同じリビジョンの行の背景を濃くして表示します。同じ更新者が行ったけれどもリビジョンが異なる行は、薄く色を付けて表示します。ディスプレイが 256 色モードに設定されていると、きれいに色分けされない可能性があります。

行の上で 左クリック すると、同じリビジョンのすべての行に色分けされます。同じ作業者の、他のリビジョンの行は薄い色で色分けされます。この色分けは貼り付いて、色分けを失わないようにマウスを移動できます。リビジョンをもう一度クリックすると、色分けが解除されます。

注釈情報の列の上ならどこでもマウスを持ってくると、ヒントボックスの中にリビジョンのコメント(ログメッセージ)を表示します。そのリビジョンのログメッセージをコピーするには、注釈情報の列を右クリックしてでてくるコンテキストメニューを使用してください。

注釈レポートを 編集検索... を使用して検索できます。これでリビジョン番号、作業者、ファイルの内容を検索できます。ログメッセージは検索できません。ログダイアログを使用して検索してください。

また、編集指定した行へ移動... で指定した行番号にジャンプします。

注釈情報列の上にマウスを持っていくと、リビジョンを比較したり、履歴を検査するのに便利なコンテキストメニューが使用可能になります。この時マウスのある行のリビジョン番号を参照します。コンテキストメニュー前リビジョンの注釈履歴 では、同じファイルに対する前のリビジョンを上限とした注釈履歴レポートを生成します。今見ている行に対する最終更新の、直前のファイルの状態を表す注釈履歴レポートを得られます。コンテキストメニュー変更を表示 は、参照しているリビジョンの変更点を表示する diff ビューアーを起動します。コンテキストメニューログを表示は、参照しているリビジョンから始まる、リビジョンログダイアログを表示します。

もっと視覚的に変更点の新旧を見たい場合、表示各行の変更時期を色分けする を選択してください。これにより、新しい行は赤、古い行は青のグラデーションで表します。デフォルトの色分けは、薄い色になっていますが、TortoiseBlame の設定で変更できます。

注釈履歴の起動時にマージ追跡を使用していると、マージされた行が若干異なって表示されます。別のパスからのマージによって変更された行には、マージが行われたリビジョンではなく、マージ元のファイルが最後に変更された時のリビジョンと作者が表示されます。この場合、リビジョンと作者が斜体で表示されます。注釈情報列の上にマウスを移動させると、マージされたリビジョンがツールチップ上に表示されます。マージした行をこのような形で表示させたくない場合、注釈履歴を起動するときに マージ情報を含める チェックボックスをオフにしてください。

表示マージ元のパス を選択すると、マージに関係するパスが表示されます。その行がマージ以外の操作によって最後に変更されたときのパスが表示されます。

注釈履歴情報の中のリビジョンは、その行の内容が変更された最後のリビジョンを表します。ファイルを他からコピーして作成したとき、それから行を変更するまで、その行の注釈履歴のリビジョンは元のソースファイルの最後の変更であり、コピーが作成されたリビジョンではありません。これはマージ情報と共に表示されるパスにも適用されます。パスは、最後の変更がその行に作成されたリポジトリの場所を示しています。

TortoiseBlame の設定は、TortoiseSVN設定... の TortoiseBlame タブでアクセスできます。 「TortoiseBlame の設定」 をご覧ください。

注釈履歴の差分

注釈履歴レポートの限界の1つは、ファイルを特定のリビジョンにおける、各行を変更した最後の人しか見ることができません。時には、誰が変更したかと同様に、誰が作成したかを知りたいことがあります。 TortoiseBlame の行を右クリックしてコンテキストメニューを表示しすると、そのリビジョンでの変更を見ることができます。しかし、変更点と注釈履歴を 同時に 確認したい場合は、差分と注釈履歴のレポートを組み合わせなければなりません。

リビジョンログダイアログには、以下のようないくつかのオプションがあります。

リビジョンの注釈履歴

上の欄でリビジョンを2つ選択し、コンテキストメニューリビジョンの注釈履歴を選択してください。これにより、この2つのリビジョンの注釈履歴を取得し、差分ビューアーで注釈を比較できます。

変更の注釈履歴

上の欄でリビジョン1つ選択し、下の欄でファイルを選択したうえで、コンテキストメニュー変更の注釈履歴 を実行してください。選択したリビジョンのとその前のリビジョンの注釈データを取得し、差分ビューアーで注釈を比較できます。

作業ベースとの比較と注釈

画面上部のリビジョンをひとつ選択し、コンテキストメニュー作業ベースと比較/注釈履歴を選択すると、そのファイルのログを表示します。選択したリビジョンと作業ベースにあるファイルの注釈データを取得し、差分ビューアーで注釈を比較します。

リポジトリブラウザー

時に、作業コピーではなくリポジトリを直接操作する必要もあるでしょう。そのようなときのために リポジトリブラウザー があります。エクスプローラーのようにかつアイコンオーバレイが表示されるので、作業コピーと同じように操作できます。そのため、リポジトリブラウザーでリポジトリの構造や状態を確認できます。

図4.66 リポジトリブラウザー

リポジトリブラウザー


リポジトリブラウザーでは、コピー、移動、名前の変更、... といったコマンドをリポジトリ上で直接実行できます。

リポジトリブラウザーは、 Windows エクスプローラーによく似ており、コンピューター上のファイルと同じように、特定リビジョンのリポジトリの内容を表示できます。左画面にディレクトリツリーが表示され、右画面に選択したディレクトリの内容が表示されます。リポジトリブラウザーウインドウの上部では、参照したいリポジトリの URL やリビジョンを入力できます。

svn:externalsプロパティに含まれるフォルダーは、リポジトリブラウザーからも見ることができます。この場合、フォルダーには、リポジトリ構造の一部ではなくリンクであることを示す、小さい矢印が表示されます。

Windows エクスプローラーのように、右画面の列見出しをクリックすると、並び順をお好みに変更できます。また、エクスプローラーのように両方の画面でコンテキストメニューを使用できます。

ファイルに対するコンテキストメニューでは、以下のことができます。

  • 選択したファイルを、ファイル形式に応じた既定のビューアーか選択したプログラムで開きます。

  • 選択されたファイルを編集します。これは一時的な作業コピーをチェックアウトし、そのファイル形式に応じたデフォルトのエディターを起動します。エディターが閉じられると、変更が保存されていた場合はコミットダイアログが表示されるので、コメントを入力して変更をコミットしてください。

  • そのファイルのリビジョンログの表示や、そのファイルの出自がわかるような全リビジョンのグラフを表示します。

  • 誰が、どの行をいつ変更したのかを参照する、ファイルの注釈履歴を表示します。

  • 単一のファイルをチェックアウトします。これはそのファイルだけが含まれる部分的な作業コピーを作成します。

  • ファイルの削除や名前の変更をします。

  • 自分のハードディスクに、そのファイルのバージョン管理外のコピーを保存します。

  • アドレスバーに表示されているURLをクリップボードにコピーします。

  • リポジトリの別の場所や、同じリポジトリに属する作業コピーにファイルをコピーします。

  • ファイルのプロパティを表示・編集します。

  • リポジトリブラウザーを起動して、直接この場所を表示するためショートカットを作成します。

フォルダーに対するコンテキストメニューでは、以下のことができます。

  • そのフォルダーのリビジョンログの表示や、そのフォルダーの出自がわかるような全リビジョンのグラフを表示します。

  • 自分のハードディスクに、フォルダーのバージョン管理外のコピーをエクスポートします。

  • 自分のハードディスクに、フォルダーの作業コピーをチェックアウトします。

  • リポジトリに新しいフォルダーを作成します。

  • バージョン管理されていないファイルやフォルダーを、直接リポジトリに追加します。実質的には Subversion のインポート操作と同じです。

  • フォルダーの削除や名前の変更

  • リポジトリの別の部分か、同じリポジトリに属する​​作業コピーのどちらかに、フォルダーのコピーを作成します。これは、チェックアウトされた作業コピーを作成せずにブランチ/タグを作成するために使用することもできます。

  • フォルダーのプロパティの表示・編集

  • 比較用にフォルダーをマークします。マークしたフォルダーは太字で表示されます。

  • あらかじめマークを付けたフォルダーに対して、Unified差分ファイルとして、またはデフォルト差分ツールを用いて差分を取ったファイルのリストとして差分を表示できます。これは2つのタグや、トランクとブランチにどんな変更があるのか比較するのに便利です。

右画面で2つの項目を選択すると、差分をUnified差分ファイルや、またはデフォルトの差分ツールを用いて差分を取ったファイルのリストとして表示できます。

右画面で複数のフォルダーを選択すると、一度にすべてを共通の親フォルダーにチェックアウトできます。

選択した2つのタグが同じルート(通常 /trunk/)からコピーされたものなら、コンテキストメニューログ表示... を使用して2つのタグ間のリビジョンのリストを表示できます。

外部項目(svn:externalを使用して参照される)もリポジトリブラウザーで表示され、フォルダーの中を開いて見ることもできます。外部項目の上には赤い矢印が表示されます。

いつものように、表示を再度読み込むのに F5 を使用できます。これにより現在表示しているものを、すべて再度読み込みます。先読みをしたり、まだ開いていないノードの情報を読み込むには、Ctrl+F5 を使用してください。この後では、どのノードを展開しても、情報を取得するのにかかるネットワーク遅延は発生しません。

リポジトリブラウザーをドラッグ&ドロップでも操作できます。エクスプローラーからリポジトリブラウザーへフォルダーをドラッグすると、リポジトリにインポートを行います。複数の項目をドラッグすると、それぞれコミットを行うことに注意してください。

リポジトリ内で項目を移動する場合、単に新しい場所へ 左ドラッグ してください。移動ではなくコピーを作成したい場合は、Ctrl-左ドラッグ してください。コピーの際は、エクスプローラーと同様にカーソルが + マークになります。

ファイルやフォルダーを他の場所へコピー・移動したい場合や、それと同時に新しい名前を付けたい場合には、左ドラッグをするのではなく 右ドラッグCtrl-右ドラッグ をしてください。この場合、ファイルやフォルダーの名前を入力する名前を変更ダイアログが表示されます。

以上の方法でリポジトリに変更を加える際には、必ずログメッセージ入力ダイアログが表示されます。間違えてドラッグした場合は、その操作をそこでキャンセルできます。

時々パスを開こうとしたときに、項目の詳細の箇所にエラーメッセージが表示されることがあります。これはおそらく、無効な URL を指定したか、アクセス権限がないか、その他サーバーの問題だと思われます。このメッセージをコピーして email に含める場合、右クリックして コンテキストメニュークリップボードにエラーメッセージをコピーする を使用するか、単純に Ctrl+C としてください。

ブックマークしたURLやリポジトリは、左のツリービューの中で現在のリポジトリにおけるフォルダーの下に表示されます。項目を追加するには、ファイルやフォルダーを右クリックしてコンテキストメニューブックマークに追加を選択してください。ブックマークをクリックすると、そのリポジトリやファイル、フォルダーを見ることができます。

リビジョングラフ

図4.67 リビジョングラフ

リビジョングラフ


時にはブランチやタグがトランクのどこから分かれたのか知る必要があります。この種の情報を見るのに理想的なのは、グラフやツリー構造で見ることです。この必要があるときには、TortoiseSVNリビジョングラフ... としてください。

このコマンドは、リビジョンの履歴を解析し、どのポイントからコピーを取得したか、いつブランチ・タグを削除したかを表示するツリーを作成しようとします。

重要

TortoiseSVN がグラフを生成するには、リポジトリのルートからログメッセージをすべて取得しなければなりません。言うまでもなく、数千リビジョンのリポジトリがある場合(サーバーの速度やネットワークの帯域などににもよりますが)数分かかるでしょう。現在 500,000 リビジョンを越えている Apache プロジェクトのようなところで試せば、しばらく待っていなければなりません。

朗報としては、ログキャッシュを使用している場合は、一度この遅さを我慢すればいいということです。これ以後は、ローカルにログデータを保持しています。ログキャッシュは TortoiseSVN 設定で有効にできます。

リビジョングラフのノード

リビジョングラフの各ノードは、現在表示されているツリーで何かしらの変更が行われたリビジョンを表しています。形や色でノードの違いを区別できます。形は固定ですが、色は TortoiseSVN設定 を使用して設定できます。

追加・コピーした項目

追加されたり、他のファイルやフォルダーによって作られたりした項目は、長方形で囲んで表示されます。デフォルトの色は緑色です。タグやトランクでは特別なものとして扱われ、異なる色で表示されます。これは TortoiseSVN設定 で設定することができます。

削除した項目

必要のなくなったブランチなど削除された項目は、八角形(角を落とした長方形)で表示されます。デフォルト色は赤です。

名前を変更した項目

名前変更した項目も八角形でも表示されます。デフォルトの色は青です。

ブランチの最新リビジョン

グラフには通常、分岐したリビジョンしか表示されませんが、それぞれのブランチの最新版である HEAD リビジョンも確認できると便利です。 HEADリビジョンを表示する を選択すると、各ブランチの HEAD リビジョンのノードが楕円で表示されます。ここで言う HEAD リビジョンとは、そのパスでコミットした最終リビジョンであり、リポジトリ全体の HEAD リビジョンではないことにご注意ください。

作業コピーのリビジョン

作業コピーのリビジョングラフを表示した場合、 作業コピーのリビジョンを表示する を選択すると、作業コピーの元になった BASE リビジョンが太い輪郭で表示されます。

変更した作業コピー

作業コピーのリビジョングラフを表示させた場合、 作業コピーの変更を表示 を選択すると、変更された作業コピーを表す追加ノードを表示できます。これは輪郭が太い楕円のノードで、デフォルトでは赤で表します。

通常の項目

他の項目は、通常の長方形で表します。

デフォルトのいグラフには、項目の追加・コピー・削除のみが表示されています。プロジェクト内のすべてのリビジョンが表示されると、重要な時に非常に巨大なグラフになってしまいます。本当に、変更が行われた すべての リビジョンが必要ならば、 表示 メニューやツールバーに、表示させるためのオプションがあります。

デフォルトの表示(グループ化無効)では、ノードは縦方向に、厳密にリビジョン順で配置されるため、実行された順番が視覚的に分かります。同じ列にある2つのノードの順番は明白です。2つののノードが隣接する列にある場合、ノードが重なる心配がないため、補正は少なくて済みます。そしてそのため、少々明白でない場合があります。そのような最適化が、複雑なグラフを妥当な大きさにしておくために必要です。なお、この順序づけでは、 古い方 にあるノードの (つまり、グラフを古いノードを下に表示する場合は、ノードの下端)を、参照として使用します。ノードの形がすべて同じ大きさであるわけではないため、参照する端は重要です。

表示の変更

リビジョングラフは非常に複雑になることがありますので、任意の表示にできるようにいくつもの機能があります。ツールバーの表示メニューから使用できます。

ブランチでグループ化

デフォルト(グループ化無効)では、すべての行がリビジョンの時系列になるよう厳密に配置されます。その結果、歴史が長くコミット頻度が低いブランチは、変更量の割に長く列を占有することになるため、グラフが非常に広くなってしまいます。

このモードでは変更がブランチ別に分類され、全体のリビジョン順にはなりません。ブランチ上の連続した​​リビジョンは、(通常は)連続した線で表示されます。サブブランチについても同様に配置されますが、グラフを小さく収めるために、古いブランチと同じ列に後から発生したのブランチが配置されるようになっています。そのため、異なるリビジョンが同じ行に表示されることがあります。

古いものを先頭に表示

通常、グラフは古いものを下に配置し、上の方に伸びていきます。このオプションにより、上から下に伸びていくようになります。

ツリーを上端でそろえる

グラフが、いくつかのツリーにばらばらにされた場合、ブランチでグループ化 オプションを使用しているかによって、そのツリーは自然なリビジョン順か、ウィンドウの下部に整列して現れるでしょう。すべてのツリーを上部から下部へのばすには、このオプションを使用してください。

線の交差を避ける

このオプションは通常は有効になっており、グラフの線が交差して混乱しないように表示されます。しかし、これは列が論理的でない場所に配置される可能性もあります。たとえば、列よりも大きい斜線があると、グラフの描画に必要な領域が多くなってしまいます。これが問題になる場合には、表示メニューからオプションを無効にすることができます。

パス名を差分で表示

長いパス名はたくさんのスペースを取ってしまい、ノードボックスを非常に大きくしてしまいます。パスの変更された部分のみを表示し、共通部分を点に置換する場合、このオプションを使用してください。つまり、/trunk/doc/html から ブランチ /branches/1.2.x/doc/html を作成した場合、/branches/1.2.x/.. という短縮形で表示します。最後のふたつの階層(dochtml)が変更されていないからです。

すべてのリビジョンを表示

予想通り、(グラフ化したツリーの) 変更されたすべてのリビジョンを表示します。履歴が長いと、非常に大きなグラフになります。

最新リビジョン(HEAD)を表示

これにより、各ブランチの最新リビジョンが、グラフ上に常に現れることを保証します。

正確なコピー元

ブランチ・タグが作成された際、デフォルトの挙動では、変更があった最後のノードからのブランチとして表示します。ブランチは特定のリビジョンからよりも、その時の HEAD リビジョンから作成されますので、厳密に言うと正しくありません。そこで、コピーを作成したリビジョンを使用して、より正しい(しかしあまり有用でない)表示を行えます。このリビジョンが、ソースブランチの HEAD リビジョンよりも古い可能性があることに注意してください。

タグを折りたたむ

プロジェクトに多くのタグがある場合、それぞれのタグがグラフ上で独立したノードとして表示されるため、開発にとってより重要なブランチの構造が読み取りにくくなります。一方、リビジョン間で比較を行う場合は、タグの内容に簡単にアクセスできる必要があります。このオプションは、タグのノードを非表示にする代わりに、コピー元のノード上にツールチップとして表示するようにします。コピー元のノードの右側にタグアイコンがあれば、タグが作成されたことが分かります。これで、表示をとても簡素化することができます。

なお、タグからコピーが作成された場合、通常は新しいブランチがタグから作成された場合ですが、タグはまとめられずに独立したノードとして表示されます。

削除されたパスを隠す

リポジトリの HEAD リビジョンに存在していないパス(削除されたブランチなど)を非表示にします。

タグを折りたたむを選択した場合、タグの作成元になったために表示されていた削除済みのブランチは、タグと一緒に非表示になります。タグが作成された最後のリビジョンは、削除された別のリビジョンと区別するために、削除されたノードの色で表示されます。

タグを折りたたむを選択すると、タグを表示する必要がなくなったブランチは、再度非表示になります。

未使用のブランチを非表示にする

それぞれのファイルやサブフォルダーに対して、変更をコミットしていないブランチを隠します。これは必ずしも、そのブランチが使われなかったことを表すわけではありません。ただ、この部分では変更されていないことを表します。

作業コピーのリビジョン表示

グラフ用に取得した項目の更新リビジョンに一致する、グラフのリビジョンをマークします。更新したばかりの時は、 HEAD リビジョンになるでしょうが、最後に更新してから、別の人がコミットしていると、作業コピーのリビジョンは若干古くなります。ノードは太い輪郭線でマークされます。

作業コピーの変更表示

作業コピーにローカルな変更がある場合、このオプションはその変更を分かれた楕円のノードとして描画し、作業コピーの最終更新リビジョンの後ろに接続します。デフォルトの輪郭色は赤です。最新の変更を取得するため、F5 を押してグラフを再表示する必要があります。

フィルター

リビジョングラフは、時に必要以上に大量のリビジョンを含んでしまいます。このオプションではダイアログを表示し、表示するリビジョン範囲を制限したり、特定のパスを非表示にしたりといったことができます。

特定のパスを非表示にし、そのノードに子ノードがある場合、子ノードは別なツリーとして表示されます。すべての子ノードを非表示にする場合は、子階層すべてを削除チェックボックスを使用して下さい。

ツリーストライプ

複数のツリーを含むグラフでは、それぞれのツリーを識別するのに、交互に背景色が付いていると便利です。

縮小表示

現在の表示ウィンドウをドラッグできる矩形で表した、グラフ全体の小さな画像を表示します。これによりグラフをもっと簡単にナビゲートできます。非常に大きいグラフの場合、極端な縮小のため役に立たない可能性があります。その場合表示されないことにご注意ください。

グラフの使用

大きなリビジョングラフを参照するのに、外観ウィンドウを使用してください。小さなウィンドウに、図の全体を表示し、現在の表示範囲を強調しています。強調範囲をドラッグすると、表示領域が変化します。

リビジョンの日時、作者。コメントは、マウスをリビジョンボックスの上にかざしたときに出るヒントボックスに表示します。

2つのリビジョンを選択(Ctrl-左クリック)すると、そのリビジョン間の差分を表示するコンテキストメニューを使用できます。ブランチ作成ポイントで差分を表示できますが、通常ブランチ終了ポイント(つまり HEAD リビジョン)について表示したいことでしょう。

差分をUnified差分ファイル(最小の文脈で全差分を1ファイルにまとめたもの)で見られます。 コンテキストメニューリビジョンを比較 を選択すると、変更したファイルの一覧が表示されます。ファイル名を ダブルクリック すると両リビジョンを取得し、視覚差分ツールで比較します。

リビジョン上で 右クリック すると、履歴を表示するのに コンテキストメニューログ表示 を使用できます。

別の作業コピーにある、選択したリビジョンの変更もマージできます。フォルダー選択ダイアログにより、マージ結果を格納する作業コピーを選択できますが、確認ダイアログはなく、また動作チェックもできません。変更されていない作業コピーを用い、選択したリビジョンをマージするのに失敗したら、変更を取り消すのがよい方法です。 これはあるブランチから別のブランチへ、選択したリビジョンをマージするのに便利です。

リビジョングラフの読み方

初めて見たユーザーは、ユーザーのメンタルモデルと異なるリビジョングラフに驚くかもしれません。例えばリビジョンが、ファイルやフォルダーに対して、複数のコピーやブランチを変更すると、ひとつのリビジョンから複数のノードが生成されます。ツールバーの左端から初めて、ひとつひとつメンタルモデルと合うまで、グラフをカスタマイズするのもいい実践法です。

フィルターオプションはすべて、可能な限り情報を少しも失わないように試みます。それにより、例えばいくつかのノードは色が変わる可能性があります。予期しない結果となった場合は、常に最後に行ったフィルターを取り消し、特定のリビジョンやブランチに対して何が特別であったのか、理解するように努めてください。多くの場合、はじめに予想したフィルター操作の結果は、的確でないか誤解しています。

表示の更新

新しい情報を取得するためサーバーを再チェックする場合、単純に F5 で表示を更新できます。ログキャッシュを使用する場合(デフォルトで有効)、新しいログメッセージがあるかリポジトリをチェックし、新しいもののみを取得します。ログキャッシュがオフラインモードだった場合、オンラインモードにしようともします。

ログキャッシュを使用しており、メッセージの内容や作者を変更しようとする場合、必要なメッセージを再読込するのにログダイアログを使用するべきです。リビジョングラフはリポジトリのルートから動作しますので、ログキャッシュ全体を無効にせねばならず、キャッシュにためるのに非常に長い時間がかかります。

ツリーの剪定

大きなツリーはナビゲートしにくい場合があり、一部を隠したり、小さなツリー群に分割したりしたくなると思います。ノードに出入りするノードリンクの点の上にマウスを移動すると、このための複数のポップアップボタンを目にすることになります。

付随するサブツリーを折りたたむには、-ボタンをクリックしてください。

折りたたまれたツリーを展開するには、+ボタンをクリックしてください。ツリーが折りたたまれている場合、隠されたサブツリーを表すため、表示したままとなります。

×ボタンをクリックすると、取り付けたサブツリーを分割し、独立したツリーとしてグラフに表示します。

○ボタンを押すと、分割したツリーを再度取り付けます。ツリーが遠いところで分割された際には、分割したサブツリーがあることを示すため、このボタンを表示したままとなります。

グラフの背景をクリックすると、すべて展開すべて連結する を提供する、メインコンテキストメニューを表示します。折りたたんだり分割したブランチがなければ、コンテキストメニューを表示しません

Subversion 作業コピーをエクスポート

.svn ディレクトリのない、作業ツリーのまっさらなコピーが欲しい場合があります。ソースの圧縮アーカイブを作成するときや、WEBサーバーにエクスポートするときなどです。コピーを作成してから.svn ディレクトリを手作業で削除する代わりに、TortoiseSVNではTortoiseSVNエクスポート... コマンドを用意しています。URLからのエクスポートと作業コピーからのエクスポートは多少異なります。

図4.68 URL からエクスポートダイアログ

URL からエクスポートダイアログ


バージョン管理外のフォルダーでこのコマンドを実行すると、TortoiseSVN は選択したフォルダーをターゲットと見なし、エクスポートする URL とリビジョンを入力するダイアログを開きます。このダイアログでは、最上位フォルダーのみかどうか、外部参照を省略するかどうか、svn:eol-style プロパティが設定されているファイルの行末を書き換えるかどうかといったオプションがあります。

またもちろん、リポジトリから直接エクスポートもできます。リポジトリブラウザーを用いて、リポジトリ内の適切なサブディレクトリを探し、コンテキストメニューエクスポート としてください。前述の URL からエクスポート ダイアログを表示します。

作業コピーでこのコマンドを実行すると、.svn フォルダーを含まない、まっさら な作業コピーを保存する場所を訊いてきます。デフォルトではバージョン管理下のファイルのみですが、バージョン管理外のファイルもエクスポートする チェックボックスを使用すると、リポジトリになく作業コピーにあるバージョン管理外のファイルも含めることができます。必要なら svn:externals を使用した外部参照を省略することもできます。

他にも、作業コピーのフォルダーを別の場所に右ドラッグし、コンテキストメニューSVN バージョン管理下の項目をここにエクスポートコンテキストメニューSVN すべての項目をここにエクスポートコンテキストメニューSVN 変更された項目をここにエクスポートを選んでも、作業コピーからエクスポートすることができます。2番目はバージョン管理されていないファイルも含みます。3番目はフォルダ構造の中で、変更された項目のみをエクスポートします。

作業コピーからエクスポートする際、ターゲットフォルダーにエクスポートするフォルダーと同じ名前が存在する場合は、既存のフォルダーを上書きするか、自動的に名前を生成して新しいフォルダーを作成するか(Target (1)など)を選択できます。

単一ファイルのエクスポート

エクスポートダイアログは、Subversion ではできる 単一ファイルのエクスポートを、許可していません。

TortoiseSVN で単一ファイルをエクスポートするには、リポジトリブラウザーを使う必要があります (「リポジトリブラウザー」)。単純にエクスポートしたいファイルを、リポジトリブラウザーからエクスプローラーの目的の場所にドラッグするか、リポジトリブラウザーのコンテキストメニューを使ってファイルをエクスポートします。

変更したツリーのエクスポート

プロジェクトツリー構造のコピーをエクスポートしたいのに、特定のリビジョンやふたつのリビジョン間にしかないファイルのみを含めたい場合、 「フォルダーの比較」 で説明する、リビジョン比較機構を使用してください。

作業コピーのツリー構造の中で、ローカルで変更されたファイルのみをエクスポートしたい場合は、前述のSVN 変更された項目をここにエクスポートを参照してください。

作業コピーをバージョン管理外へ

作業コピーを.svnディレクトリがない通常のフォルダーにしたい場合は、作業コピーのルートにある.svnディレクトリを削除するだけです。

それ以外にも、作業コピーのフォルダー自身にエクスポートする方法もあります。Windowsエクスプローラーで、ファイルペインにある作業コピーのルートフォルダーを、フォルダーペインの同じフォルダーに右ドラッグしてください。TortoiseSVNはこの特殊なケースを検出し、作業コピーをバージョン管理下から外すかどうかを聞いてきます。はい と答えると、コントロールディレクトリを削除し、まっさらなバージョン管理されていないディレクトリになります。

作業コピーの再配置

図4.69 再配置ダイアログ

再配置ダイアログ


もしリポジトリの位置(IP/URL)が何らかの理由で変更された場合、たぶん作業が止まってしまうでしょう。コミットができなくなり、新しい場所から再び作業コピーをチェックアウトして、変更したデータをすべて新しい作業コピーに書き戻すということはしたくないでしょう。その時に使うのは、TortoiseSVNの再配置コマンドです。ここで行われることは少しだけです。新しいURLで各ファイルとフォルダーに関連付けられているすべてのURLを書き換えます。

注記

この操作は作業コピーのルートでのみ実行できます。そのため、コンテキストメニュー項目は作業コピーのルートでのみ表示されます。

この操作の一部として、TortoiseSVN がリポジトリに接続するのに驚かれるかもしれません。これは、新しい URL が既存の作業コピーと、本当に同じリポジトリを指しているかを簡単にチェックするためだけに行います。

警告

これはほとんど行われない操作でしょう。再配置コマンドは、リポジトリのルートの URL が変更されたときのみ使用します。考えられる理由は以下のようなものでしょう。

  • サーバーの IP アドレスが変更された。

  • プロトコルが変更された。(http:// から https:// など)

  • サーバーのセットアップでリポジトリのルートパスが変更された。

その他としては、作業コピーが同じリポジトリの同じ場所を参照していたのに、リポジトリ自身が移動してしまった時に、再配置する必要があります。

以下のような場合には使用しないでください。

  • 異なる Subversion のリポジトリに移動したい。その場合は新しいリポジトリの場所からまっさらなチェックアウトを実行するべきです。

  • 同じリポジトリの、異なるブランチやディレクトリに切り替えたい。この場合、TortoiseSVN切り替え... を使用するべきです。詳細は、 「チェックアウトするか切り替えるか...」 をご覧ください。

以上のような場合に再配置を使用すると、作業コピーを破損してしまい、更新、コミット、etc. でわけの分からないエラーメッセージを見ることになります。こうなってしまったら、新しくチェックアウトするしかありません。

バグ追跡ツール/課題追跡システムとの統合

ソフトウェア開発ではふつう、変更を特定のバグIDや課題IDに結びつけます。バグ追跡ツール(課題追跡システム)を使用している場合、 Subversion で行った変更を、課題追跡システムの特定のIDと関連付けできると便利です。多くの課題追跡システムではそのために、ログメッセージを解釈してコミットに関連する課題IDを抽出するための pre-commit フックスクリプトを提供しています。しかし、 pre-commit フックスクリプトが正しく解釈できるようにログメッセージを書けるかどうかはユーザーに依存しているため、ときどき失敗する傾向があります。

TortoiseSVN は、次の2つの方法でユーザーを補助します。

  1. ユーザーがログメッセージを入力するとき、課題IDを含む行が自動的に正しい書式で追加されるようにします。これによって、ユーザーがバグ追跡ツールで正しく解釈できない形で課題IDを入力してしまうリスクを減らせます。

    また、 TortoiseSVN は入力されたログメッセージのうち、課題追跡システムが認識した部分を強調表示できます。これにより、ログメッセージが正しく解釈されたか、ユーザーが知ることができます。

  2. ユーザーがログメッセージを閲覧する際に、 TortoiseSVN は、ログメッセージ内の各課題IDに、課題に言及しているページをブラウザーで開くリンクを作成します。

ログメッセージへの課題IDの付与

TortoiseSVN は任意のバグ追跡ツールと統合できます。そのためには、 bugtraq: で始まるプロパティを、フォルダーに対して定義する必要があります。(「プロジェクト設定」

図4.70 課題追跡システムのプロパティダイアログ

課題追跡システムのプロパティダイアログ


課題追跡システムのプロパティを編集する場合、適切な値を簡単に設定するために、専用のプロパティエディターを使用します。

TortoiseSVN と課題追跡システムを統合するには、2つ方法があります。ひとつは単純文字列による方法、もうひとつは 正規表現 による方法です。プロパティにはどちらの方法も使用できます。

bugtraq:url

バグ追跡ツールのURLを設定します。適切にURIエンコードし、中に %BUGID% を含む必要があります。 %BUGID% は入力された課題IDに置き換えられます。これによって TortoiseSVN のログダイアログ上にリンクを表示し、リビジョンログを参照する際に、バグ追跡ツールに直接ジャンプできるようになります。このプロパティがないと、 TortoiseSVN は課題IDを表示するだけで、リンクを表示しません。例えば TortoiseSVN の開発プロジェクトでは、 http://issues.tortoisesvn.net/?do=details&id=%BUGID% という設定を使用しています。

絶対URLの代わりに相対URLも使用できます。これは、課題追跡システムが、自分のソースリポジトリと同じドメインやサーバーにある場合に便利です。ドメイン名を変更したとしても、bugtraq:url プロパティを調整する必要がないからです。相対 URL を指定するには以下の2つの方法があります。

If it begins with the string ^/ it is assumed to be relative to the repository root. For example, ^/../?do=details&id=%BUGID% will resolve to https://tortoisesvn.net/?do=details&id=%BUGID% if your repository is located on https://tortoisesvn.net/svn/trunk/.

A URL beginning with the string / is assumed to be relative to the server's hostname. For example /?do=details&id=%BUGID% will resolve to https://tortoisesvn.net/?do=details&id=%BUGID% if your repository is located anywhere on https://tortoisesvn.net.

bugtraq:warnifnoissue

課題IDテキストフィールドが空の場合、TortoiseSVN が警告を発するようにする場合は、 true に設定してください。有効な値は true/false です。 定義されていなければ、 false として扱われます。

テキストボックスを使用した課題ID

単純文字列によるアプローチでは、課題IDを入力できる独立した入力フィールドが表示されます。そして、ユーザーが入力したログメッセージに独立した行が追加されます。

bugtraq:message

入力フィールドモードでバグ追跡システムを有効にします。このプロパティを設定すると、変更をコミットする際に課題IDを入力するよう促されます。この書式でログメッセージの末尾に行が追加されます。中に %BUGID% を含んでいる必要があり、これはコミットの際に課題IDに置換されます。この機能を使用することで、コミットログに課題IDへの参照を一定の書式で確実に含め、バグ管理ツールがこれを解釈して課題IDと特定のコミットを関連付けることができるようになります。例えば Issue : %BUGID% などと設定することができますが、これは使用するツールに依存します。

bugtraq:label

このテキストは、コミットダイアログの課題IDを入力するエディットボックスのラベルとして表示されます。設定されていないと、 バグID/課題番号(): bugtraq:numbertrue true/false true bugtraq:appendtrue/false true

正規表現を使用した課題ID

正規表現 でのアプローチでは、独立した入力フィールドは表示されませんが、ログメッセージを入力中に課題追跡システムによって認識された部分をマークします。これは、ログメッセージの入力中に表示されます。これは課題IDが、ログメッセージのどこにあってもかまわないということです。この方法はとても柔軟で、 TortoiseSVN プロジェクトではこれを使用しています。

bugtraq:logregex

このプロパティを設定すると、 正規表現 モードでバグ追跡システムが有効になります。ここには単一の正規表現か、改行で区切って2つの正規表現を設定できます。

正規表現を2つ設定した場合、1つ目の正規表現は、含まれている課題IDを探すための前処理フィルターとして使用します。2つ目の正規表現は、最初の正規表現の結果から、課題IDのみを抽出します。これにより、課題IDの一覧を抽出したり、自然言語表現から課題IDを抽出したりすることができます。例えば複数のバグを修正し、 This change resolves issues #23, #24 and #25 というような文字列を入力したとします。

このログメッセージの中にある表現から課題IDを抽出するには、[Ii]ssues?:?(\s*(,|and)?\s*#\d+)+(\d+)のような正規表現を使用することができます(TortoiseSVN プロジェクトで使用しているもののひとつです)。

1つ目の正規表現で、ログメッセージから issues #23, #24 and #25 の部分を抜き出します。2つ目の正規表現は、最初の正規表現の出力から、生の十進数の数値を抽出します。つまり、課題IDとして使われている、23, 24, 25 が返ります。

はじめの正規表現を少しかみ砕くと、 issue という単語(先頭が大文字でも可)で始まっていなければなりません。この後にs(複数の場合)やコロンを続けることもできます。この後、0個以上の空白と、オプションのコンマまたは and 、さらに0個以上の空白が来て、さらに#と十進数の数値、という形のグループが1つ以上来ます。

正規表現が1個のみの場合は、単体の課題IDと正規表現文字列のグループとがマッチしなければなりません。例: [Ii]ssue(?:s)? #?(\d+)。この方法は、 trac のような一部の課題追跡システムには必要ですが、その正規表現を構築するのは大変です。使用する課題追跡システムのドキュメントにある場合にのみ、この方法を使用するのをお勧めします。

正規表現になじみがなければ、http://ja.wikipedia.org/wiki/正規表現 にある解説や、http://www.regular-expressions.info/ にあるオンラインのドキュメントやチュートリアルをご覧ください。

正規表現を常に正しく書くことは困難なので、手助けのために、課題追跡システムのプロパティダイアログにテストダイアログを用意しています。エディットボックスの右側のボタンをクリックすると起動します。ここに文字列を入力し、正規表現を変更すると結果を表示させることができます。正規表現が無効であれば、エディットボックスの背景が赤くなります。

bugtraq:messagebugtraq:logregex の両方を設定した場合、logregex が優先されます。

ヒント

ログメッセージを解釈する pre-commit フックスクリプトを持つ課題追跡システムがなくても、ログメッセージで言及している問題にリンクするために、この機能を使用することができます。

またリンクが必要なくても、課題IDがログダイアログの独立した列に表示されるので、どの課題に対応する変更かがわかりやすくなります。

tsvn: プロパティのいくつかは true/false 値をとります。TortoiseSVN は yestrue と同義に、nofalse と同義に解釈します。

フォルダーへのプロパティの設定

これらのプロパティは、作業するシステムのフォルダーに設定しなければなりません。ファイルやフォルダーをコミットする際に、このフォルダーからプロパティが読み取られます。フォルダーにプロパティが設定されていない場合、プロパティはフォルダー階層を上位に向かって、バージョン管理外フォルダーか、ツリーのルート(例: C:\)に到達するまで検索されます。すべてのユーザーが、例えば trunk/ からチェックアウトし、サブフォルダーからチェックアウトしないことが確認できるのであれば、 trunk/ にそのプロパティを設定するだけで充分です。サブフォルダーからもチェックアウトする可能性があるのであれば、プロパティを各サブフォルダーに再帰的に設定するべきです。プロジェクトの深い階層で設定されたプロパティは、高いレベルの(trunk/ に近い)ものより優先されます。

バージョン1.8より、TortoiseSVNおよびSubversionでは、フォルダーに設定したプロパティが自動的にサブフォルダーに継承されようになりました。これをプロパティ継承と呼びます。そのため、ルートフォルダーに設定すれば、すべてのフォルダーにプロパティを設定する必要はなくなりました。

プロジェクトプロパティ(例:tsvn:bugtraq:webviewer:)に限っていえば、 プロパティを再帰的に適用する チェックボックスを使うと、そのフォルダ以下のすべてのサブフォルダーにプロパティを設定しますが、ファイルには設定しません。

TortoiseSVN で新しいサブフォルダーを作業コピーに追加する際、親フォルダーに設定されているプロジェクトプロパティは、新しいサブフォルダーにも自動的に追加されます。

リポジトリブラウザーからは課題追跡システムの情報を利用できない

バグ追跡システムとの統合は、 Subversion のプロパティとして保持されているため、チェックアウトした作業コピーを使用するときのみ表示されます。リモートからプロパティを取得するのには時間がかかるため、作業コピーからリポジトリブラウザーを起動しなければ表示されません。リポジトリのURLを入力してリポジトリブラウザーを起動した場合は表示されません。

同じ理由で、プロジェクトのプロパティは、リポジトリブラウザーを使用して子フォルダーを追加しても、自動的には継承されません。

この課題追跡システムとの統合は、 TortoiseSVN に限定されたものではなく、どの Subversion クライアントでも共通で使用できます。詳細については、TortoiseSVN のソースリポジトリにある Issue Tracker Integration Specification の全文をお読みください(リポジトリへのアクセスのしかたは、「ライセンス」 で説明します)。

課題追跡システムからの情報取得

前節では、ログメッセージへ課題情報の追加について扱いました。しかし、課題追跡システムから情報を取得する必要がある場合、どのようにしたらよいのでしょう?コミットダイアログは、課題追跡システムと対話できるような、外部プログラムを統合するためのCOMインターフェイスを備えています。通常、自分に割り当てられた未解決の課題の一覧を問い合わせて、このコミットに関連する課題を選択できるといいのではないでしょうか。

そのようなインターフェイスはいずれも、課題追跡システムに強く依存しているので、私たちはこの部分を提供することはできませんし、そのようなプログラムの作成方法について説明することは、このマニュアルの範疇を超えてしまいます。インターフェイスの定義や、C#やC++/ATLで書かれたサンプルプラグインは、 TortoiseSVN リポジトリcontrib フォルダから取得できます(リポジトリのアクセスの仕方は、 「ライセンス」で説明します)。API の概要も 7章IBugtraqProvider インターフェイス で得られます。それ以外の(動作する)サンプルプラグインとして、 C# では Gurtle があり、これは課題管理システム Google Code と連動するために必要な COM インターフェイスを実装しています。

説明のために、システム管理者が、インストールした課題管理システムプラグインを提供し、 TortoiseSVN の設定ダイアログでそのプラグインを使用する作業コピーをセットアップしたとしましょう。プラグインに割り当てられた作業コピーからコミットダイアログを開くと、ダイアログの上部に新しいボタンが現れるはずです。

図4.71 課題追跡システムクエリダイアログの例

課題追跡システムクエリダイアログの例


この例では、複数の未解決課題を選択できます。その後、プラグインがログメッセージに追加する、特定のフォーマットのテキストを生成できます。

Web ベースのリポジトリビューアーとの統合

There are several web-based repository viewers available for use with Subversion such as ViewVC and WebSVN. TortoiseSVN provides a means to link with these viewers.

TortoiseSVN は任意のリポジトリビューアーと統合できます。そのためには、リンク用に用意されているプロパティを定義する必要があります。以下のようにフォルダーに設定しなければなりません。(「プロジェクト設定」

webviewer:revision

リビジョンを指定して、その変更点を表示させるために使用する URL を指定します。適切に URI エンコードし、%REVISION% という文字列を含んでいる必要があります。 %REVISION% の部分は、リビジョン番号に置き換わります。このプロパティを設定すると、ログダイアログのコンテキストメニューに、コンテキストメニューリビジョンをウェブビューアーで表示 が表示されるようになります。

webviewer:pathrevision

ファイルとリビジョンを指定して、その変更点を表示させるために使用する URL を指定します。適切に URI エンコードし、%REVISION%%PATH% という文字列を含んでいる必要があります。 %PATH% の部分は、リポジトリのルートからの相対パスに置き換わります。このプロパティを設定すると、ログダイアログのコンテキストメニューに、コンテキストメニューパスのリビジョンをウェブビューアーで表示 が表示されるようになります。例えば、ログダイアログ下部の一覧に表示された /trunk/src/file を右クリックすると、 URL の中の %PATH% の部分が /trunk/src/file に置き換わります。

絶対 URL の代わりに相対 URL も使用できます。これは、ウェブビューアーが、ソースリポジトリと同じドメイン・サーバーにある場合に便利です。ドメイン名を変更したとしても、webviewer:revision プロパティや webviewer:pathrevision プロパティを調整する必要はありません。フォーマットは bugtraq:url プロパティと同じです。 「バグ追跡ツール/課題追跡システムとの統合」 をご覧ください。

フォルダーへのプロパティの設定

これらのプロパティは、作業するシステムのフォルダーに設定しなければなりません。ファイルやフォルダーをコミットする際に、このフォルダーからプロパティが読み取られます。フォルダーにプロパティが設定されていない場合、プロパティはフォルダー階層を上位に向かって、バージョン管理外フォルダーか、ツリーのルート(例: C:\)に到達するまで検索されます。すべてのユーザーが、例えば trunk/ からチェックアウトし、サブフォルダーからチェックアウトしないことが確認できるのであれば、 trunk/ にそのプロパティを設定するだけで充分です。サブフォルダーからもチェックアウトする可能性があるのであれば、プロパティを各サブフォルダーに再帰的に設定するべきです。プロジェクトの深い階層で設定されたプロパティは、高いレベルの(trunk/ に近い)ものより優先されます。

プロジェクトプロパティ(例:tsvn:bugtraq:webviewer:)に限っていえば、 プロパティを再帰的に適用する チェックボックスを使うと、そのフォルダ以下のすべてのサブフォルダーにプロパティを設定しますが、ファイルには設定しません。

TortoiseSVN で新しいサブフォルダーを作業コピーに追加する際、親フォルダーに設定されているプロジェクトプロパティは、新しいサブフォルダーにも自動的に追加されます。

リポジトリブラウザーを使用する際の制限

リポジトリビューアーとの統合は、Subversion のプロパティとして保持されているため、チェックアウトした作業コピーを使用するときのみ表示されます。リモートからプロパティを取得するのには時間がかかるため、作業コピーからリポジトリブラウザーを起動しなければ表示されません。リポジトリのURLを入力してリポジトリブラウザーを起動した場合は表示されません。

同じ理由で、プロジェクトのプロパティは、リポジトリブラウザーを使用して子フォルダーを追加しても、自動的には継承されません。

TortoiseSVN の設定

マウスポインタをしばらくエディットボックスやチェックボックスなどの上に置いておくと、ヘルプのツールチップがポップアップして、設定がなんのために変更できるのかが分かります。

一般設定

図4.72 設定ダイアログの「全般」ページ

設定ダイアログの「全般」ページ


このダイアログでは、好みの言語を指定したり、Subversion 特有の設定を行うことができます。

言語

ユーザーインターフェイスの言語を選択してください。もちろん、英語以外を利用する場合は適切な言語パックを先にインストールしておく必要があります。

更新をチェック

チェックすると、TortoiseSVN は週に一度、ダウンロードサイトに接続して、プログラムの新バージョンがリリースされているかを調べます。結果をすぐに知りたければ、今すぐチェック を押してください。新バージョンがダウンロードされるわけではありません。単に新バージョンがあるという、情報ダイアログが表示されるだけです。

システムサウンド

TortoiseSVN にはデフォルトで3つのカスタムサウンドがインストールされています。

  • エラー

  • 注意

  • 警告

Windows のコントロールパネルで別のサウンド(もしくは完全に OFF)を選択できます。設定はコントロールパネルへのショートカットです。

Aero のダイアログを使用

Windows Vista 以降のシステムでは、ダイアログに Aero スタイルを使用するかどうか制御することができます。

ライブラリを作成

Windows 7 では、システムのさまざまな場所に散在している作業コピーをグループ化するためのライブラリを作成することができます。

常に無視するパターン

常に無視するパターンは、バージョン管理外のファイルを、コミットダイアログなどで表示されないようにするのに使用します。パターンにマッチしたファイルは、インポートでも無視されます。除外するファイルやディレクトリは、名前や拡張子で判断されます。パターンは空白で区切り、 bin obj *.bak *.~?? *.jar *.[Tt]mp のようにします。このパターンにはパス区切り文字を含めないでください。また、ファイルとディレクトリを区別することができないことに注意してください。パターンマッチの文法の詳細は、 「無視リストでのパターンマッチ」 を参照してください。

ここで指定した無視パターンは、同じPCで動作する他の Subversion クライアント(コマンドラインクライアントを含む)でも有効になることに注意してください。

注意

Subversion の設定ファイルで global-ignores パターンを設定していると、この設定を上書きしてしまいます。 Subversion の設定ファイルには、下にある 編集 ボタンでアクセスできます。

この無視パターンはすべてのプロジェクトに影響します。バージョン管理されませんので、他のユーザーには影響しません。一方、バージョン管理の svn:ignoresvn:global-ignore プロパティを使用し、バージョン管理からファイルやディレクトリを除外することもできます。詳細は 「ファイルやディレクトリの無視」 をご覧ください。

ファイルの更新日時を最後にコミットした日時に設定

このオプションは、チェックアウトや更新時にコミット時の日時をファイルの更新日時として使うよう、TortoiseSVN に指示します。そうでなければ、 TortoiseSVN は現在の日時を使用します。ソフトウェアを開発しているなら、ビルドシステムがコンパイルの要否を判断するのにタイムスタンプを使用するので、現在の日時にしておくのが最善でしょう。最後にコミットした日時 を使用していると、ファイルを古いリビジョンに戻す場合、プロジェクトがコンパイルされない可能性があります。

Subversion 設定ファイル

Subversion 設定ファイルを直接編集するには 編集 を使用してください。いくつかの設定は TortoiseSVN では直接変更することができないため、その場合にこれが必要です。Subversion の config ファイルについての詳細情報は、Runtime Configuration Area をご覧ください。Automatic Property Setting の節には興味深い項目があり、これはここで設定します。Subversion は複数の設定情報を読み込めますが、その優先順位を知っておかなくてはならないことに注意してください。詳細は Configuration and the Windows Registry を参照してください。

更新時に svn:externals にローカルの変更を適用する

このオプションは、 TortoiseSVN が作業コピーを更新する時に、 svn:externals プロパティにローカルで行われた変更を常に適用することを示します。

コンテキストメニュー設定

図4.73 設定ダイアログの「コンテキストメニュー」ページ

設定ダイアログの「コンテキストメニュー」ページ


このページでは、メインコンテキストメニューと TortoiseSVN サブメニューに現れる TortoiseSVN コンテキストメニューエントリを指定できます。デフォルトでは、ほとんどの項目にチェックが付いておらず、サブメニューに表示されません。

ロックを取得 は特殊です。もちろん上のリストを用いてトップレベルに表示できますが、ロックの必要がないほとんどのファイルにとっては乱雑なだけです。しかし、svn:needs-lock プロパティが設定されているファイルには、いつでも編集できるように、このアクションが必要です。この場合トップレベルに表示している方が便利です。このボックスをチェックしておくと、svn:needs-lock プロパティが設定されているファイルを選択すると、ロックを取得 がいつでもトップレベルに表示されるようになります。

Subversion のバージョン管理下にあるフォルダーを離れているときは、ほとんどの場合、 TortoiseSVN のコンテキストメニューを使用しません。バージョン管理外のフォルダーで本当にコンテキストメニューを必要とするのは、チェックアウト時くらいでしょう。バージョン管理外のパスではメニューを表示しないのオプションをチェックすると、 バージョン管理外フォルダーのコンテキストメニューでは、TortoiseSVN のメニュー項目が表示されなくなります。ただし、バージョン管理下のフォルダーでは、すべての項目を表示します。 Shift を押しながらコンテキストメニューを表示させると、バージョン管理外のフォルダーでもすべてのメニュー項目を表示させることができます。

TortoiseSVN のコンテキストメニューにも現れて欲しくない、コンピューター上のパスがある場合、下にあるボックスの項目を一覧できます。

TortoiseSVN ダイアログ設定1

図4.74 設定ダイアログの「ダイアログ1」ページ

設定ダイアログの「ダイアログ1」ページ


このダイアログでは、TortoiseSVN のダイアログをお好みに設定できます。

デフォルトのログメッセージ数

最初に TortoiseSVNログを表示 を選択したとき、 TortoiseSVN が取得するログメッセージをこの数に制限します。サーバーへの接続が遅い場合に便利です。もっとメッセージを取得するには 全て表示次の100件 を使用してください。

ログメッセージ用フォント

リビジョンログダイアログの中央の欄で、ログメッセージが表示される際に使用されるフォントとサイズを指定します。これは、コミットダイアログでログメッセージを編集する際にも使われます。

ログメッセージに短い日時形式を使用する

標準の長いメッセージ形式で使用するには画面が狭い場合、短い形式を使用します。

ログリスト内でダブルクリックすることで過去のリビジョンと比較する

ログダイアログの上の欄のリストを使用してリビジョンの比較を頻繁に行う場合は、このオプションを有効にすると、ダブルクリックで比較できるようになります。差分の取得には時間がかかるため、デフォルトでこのオプションは有効になっていません。多くの人は、間違ってダブルクリックした際に長時間待たされるのを避けたいということから、このオプションをデフォルトで有効にしていません。

ダイアログを閉じる条件

TortoiseSVN のコマンドがエラーがなく終了すると、進行ダイアログを自動で閉じることができます。この設定でダイアログを閉じる条件を選択できます。デフォルト(推奨)設定は手動で閉じるで、全てのメッセージを見て、何が起きたのか確認できます。しかし、ある種のメッセージは無視して、重要な変更がなければ自動で閉じてもらいたいということもあります。

マージ、追加、削除がなければ自動的に閉じるは、単純な更新のみの場合は進行ダイアログを閉じますが、リポジトリからの変更をマージする必要がある場合や、ファイルの追加・削除がある場合はダイアログを開いたままにします。また処理中に、なんらかの競合やエラーが発生した場合にも開いたままになります。

競合がなければ自動的に閉じるはもっと基準をゆるめ、マージ、追加、削除が起きてもダイアログを閉じますが、競合が発生した場合はダイアログを開いたままにします。

エラーがなければ自動的に閉じるは、競合が発生しても、 Subversion が処理を継続できないようなエラーが発生しない限りダイアログを閉じます。例えば、サーバーにアクセスできずに更新が失敗したり、作業コピーが最新ではなくコミットができない場合などです。

ローカル操作に対してはダイアログを常に閉じる

ファイルの追加や変更の取り消しといったローカル操作は、リポジトリへのアクセスは必要なく、短時間で完了します。そのため、進行状況ダイアログは重要でないことがしばしばあります。エラーが発生しない時に限り、これら操作後に自動で進行状況ダイアログを閉じる場合は、このオプションを選択してください。

変更を取り消す際にごみ箱を使用する

ローカルの変更を取り消す際、既に行っていた変更は破棄されます。TortoiseSVN では安全のために、元のコピーに戻す前に、変更したファイルをごみ箱に入れます。ごみ箱に入れるのをスキップしたい場合は、このオプションのチェックを外してください。

作業コピーの URL を 元: のデフォルトURLとして使用する

マージダイアログでは、デフォルトの動作は 元: の URL を記憶している所にマージします。しかし、階層内のいくつもの違う場所からマージを実行したい人もいますし、現在の作業コピーの URL からはじめる方が簡単な場合があります。また、別のブランチにある平行したパスを参照しながら編集するのにも使用できます。

デフォルトチェックアウトパス

チェックアウトのデフォルトパスを指定できます。チェックアウトした物をすべて一カ所に保持しておく場合、ドライブやフォルダーをあらかじめ設定しておいてくれ、最後に新しいフォルダー名を追加するだけですみます。

デフォルトチェックアウト URL

チェックアウトのデフォルト URL も指定できます。非常に大きいプロジェクトのサブプロジェクトをちょくちょくチェックアウトする場合、URL をあらかじめ設定しておいてくれ、最後にサブプロジェクト名を追加するだけですみます。

TortoiseSVN ダイアログ設定2

図4.75 設定ダイアログの「ダイアログ2」ページ

設定ダイアログの「ダイアログ2」ページ


バージョン管理外のフォルダーを再帰的に調べる

チェックすると(デフォルト状態)、追加コミット変更をチェックダイアログに、バージョン管理外のフォルダーやそれ以下の階層のファイルやフォルダがすべて表示されます。チェックしないと、以下の階層は表示されません。チェックを外せば、上記のダイアログが煩雑にならずに済みます。この場合、バージョン管理外のフォルダーを追加するよう選択すると、再帰的に追加されます。

変更をチェック ダイアログでは、無視される項目を表示するか選択できます。このチェックボックスにチェックして、無視されたフォルダーを表示すると、その中にある項目も同様に見られるようになります。

ファイルのパスやキーワードの自動補完を使用する

コミットダイアログはコミットするファイル名の一覧を保持しています。一覧にある項目の始めの 3 文字をタイプすると、自動補完ボックスがポップアップし、Enter を押すとファイル名が補完されます。チェックするとこの機能が有効になります。

自動補完のパースがタイムアウトするまでの時間(秒)

大きなファイルをチェックしていて、自動補完パーサが遅すぎることがあります。コミットダイアログが長い時間止まってしまうのなら、ここで指定した時間でタイムアウトするようになります。重要な自動補完情報を見逃してしまうのなら、タイムアウトを長くできます。

tsvn:projectlanguage が設定されている場合はスペルチェッカーを使用する

コミット時にスペルチェッカーを使用しない場合、ここにチェックをつけてください。プロジェクトプロパティで必要だと指定したときだけ、動作するようになります。

ログメッセージの履歴で表示する最大の項目数

コミットダイアログでログメッセージを入力すると、TortoiseSVN は後で再利用できるようにメッセージを記憶します。デフォルトでは、リポジトリごとに最新のログメッセージを 25 個記憶していますが、ここでその数をカスタマイズできます。たくさんの異なるリポジトリがあるなら、レジストリがいっぱいにならないように、少なくしておくといいでしょう。

この設定は、このコンピューターで入力したメッセージにのみ適用されることに、ご注意ください。ログキャッシュには何も影響を与えません。

項目を自動的に選択する

コミットダイアログの通常動作は、全ての(バージョン管理下の)変更があるファイルをコミットするよう、自動的に選択します。はじめに何も選択せず、コミットする項目を手作業で選択する場合、このチェックボックスのチェックを外してください。

未コミットの項目が残ったときはコミット後に再度ダイアログを開く

コミットされていないファイルやフォルダーがあった場合、コミット完了後に同じディレクトリで自動的にコミットダイアログを再度開きます。

スタートアップ時にリポジトリへアクセスする

デフォルトでは「変更をチェック」ダイアログで作業コピーのチェックが行われ、リポジトリをチェックがクリックされた時だけリポジトリへの接続を行います。常にリポジトリをチェックするようにしたい場合、これを設定すると、この動作が自動的に行われるようになります。

ファイルをロックする前にロックダイアログを表示する

ひとつないし複数のファイルを選択し、TortoiseSVNロック を使用してそのファイルをロックする際、プロジェクトによっては、なぜそのファイルをロックしたかを説明するロックメッセージを書くことになっています。ロックメッセージを使用しない場合には、このチェックボックスのチェックをはずすと、ダイアログをスキップし、すぐにファイルをロックします。

フォルダーにたいしてロックコマンドを使用する場合、ロックするファイルを選択するため、常にロックダイアログを表示します。

プロジェクトで tsvn:lockmsgminsize プロパティを使用している場合、そのプロジェクトはロックメッセージが 必須 なので、設定がどうであってもロックダイアログを表示します。

TortoiseSVN ダイアログ設定3

図4.76 設定ダイアログの「ダイアログ3」ページ

設定ダイアログの「ダイアログ3」ページ


Settings for the repository browser:

高速に表示するためにフォルダーを先読みする

このチェックボックスをチェックすると(デフォルトの状態)、リポジトリブラウザーはバックグラウンドでフォルダーに表示される情報を取得します。そのため、フォルダーのうちの1つをクリックしたとき、情報がすでに準備されている状態になります。

しかし、サーバーによってはこのような場合に並行してアクセスされても処理できなかったり、非常に多数のアクセスを正しく扱うように設定されていなかったために、不具合が発生してブロックされてしまったりすることがあります。この場合、このチェックボックスで先読み機能を無効にしてください。

外部参照を表示する

このチェックボックスをチェックすると(デフォルトの状態)、リポジトリブラウザーは svn:externals プロパティで外部参照として設定されたファイルやフォルダーを、普通のファイルやフォルダーと同じように表示します。但し、オーバーレイアイコンでは外部ソースとして扱われます。

上記の先読み機能が有効になっていると、この機能も弱いサーバーには負担になることがあります。この場合、このチェックボックスでこの機能を無効にしてください。

There are two versions of shelfing implemented in SVN. Here you can select which version you want to use. Note that changing this setting might require an OS restart to take effect.

V2

このバージョンはV3よりもずっと高速で、使用を推奨します。

しかし、速度は犠牲も伴い、V2はディレクトリの変更を扱わず、ファイルのコピーや移動も扱うことができません。

V3

this is the latest version of the shelfing feature. It can handle changes to directories as well as file moves/copies.

しかし、V3V2よりもずっと低速で、大きなリポジトリやリポジトリへの接続が遅い場合、使用に耐えないこともあり得ます。

TortoiseSVN の色の設定

図4.77 設定ダイアログの「色」ページ

設定ダイアログの「色」ページ


このダイアログでは、TortoiseSVN のダイアログで使用するテキストの色をお好みに変更できます。

競合・妨害

更新中やマージ中に発生した競合。既存のバージョン管理外のファイル・フォルダーと同じ名前のバージョン管理下のものがあると更新は妨害されます。

進行ダイアログのエラーメッセージにも使用します。

追加したファイル

リポジトリに追加した項目。

紛失・削除・置換

リポジトリから削除された項目、作業コピーから紛失した項目、作業コピーから削除された項目、同じ名前で置き換えられた項目。

マージ終了

リポジトリからの変更を、競合もなく作業コピーにうまくマージしました。

変更・コピー

履歴に追加されるかリポジトリ内のパスをコピーした項目。ログダイアログでも、コピーされた項目を含む場合に使用されます。

削除したノード

リポジトリからすでに削除された項目。

ノードを追加

(追加・コピー・移動操作で) リポジトリに追加した項目。

名前を変更されたノード

リポジトリで名前の変更があった項目。

置換

元の項目が削除され、同じ名前で新しく作成された項目。

絞り込みへの一致

ログダイアログで絞り込みをする際、検索語は検索結果中でこの色で強調表示されます。

other settings:

ダークテーマ

Windows 10 1809 以降、TortoiseSVN のダイアログをダークモードで表示させることができます。この機能は Windows 10 の設定でアプリケーションのダークモードの有効化が必要です。

重要

全てのダイアログの全てのコントロールがダークテーマで表示されるわけではないことに注意してください。

リビジョングラフの設定

図4.78 設定ダイアログの「リビジョングラフ」ページ

設定ダイアログの「リビジョングラフ」ページ


分類パターン

リビジョングラフは、トランク、ブランチ、タグを見分けることで、リポジトリを明確に可視化しようとします。これは Subversion に組み込まれた分類ではなく、パス名から抽出した情報です。デフォルト設定では、Subversion のドキュメントで推奨されている英語名規約ですが、もちろん使い方はことなるかもしれません。

三つの矩形で表すパスを、認識するため使用するパターンを指定してください。パターンは大文字小文字を区別しませんが、小文字で書いてください。*? といったワイルドカードはいつものように使用できます。また、; で複数のパターンを区切ってください。比較に使用されてしまうため、余計な空白は含めないでください。

コミットタグの検出

これらのパターンはリビジョングラフだけではなく、タグへのコミットの検出にも使われることに注意してください。

色の変更

リビジョングラフで、ノードタイプ(つまり追加、削除、名前変更といったノード)を表すのに使用する色です。ノードの分類を識別するため、ノードタイプと分類の両方を表示するよう、リビジョングラフに色をませるよう指示できます。このチェックが付いていないと、ノードタイプを表すためだけに色を使用します。使用するそれぞれの色を指定するには、色選択ダイアログを使用してください。

リビジョングラフの色

図4.79 設定ダイアログのリビジョングラフの「色」ページ

設定ダイアログのリビジョングラフの「色」ページ


このページでは使用する色を設定できます。ここで指定する色は、無地の色であることにご注意ください。ほとんどのノードでは、ノードタイプ色と背景色、必要に応じて分類色を混ぜた色で着色されます。

削除したノード

削除され、同じリビジョンのどこにもコピーされていない項目です。

追加したノード

新しく追加されたか、コピー(履歴とともに追加)された項目です。

名前変更ノード

ある場所から削除され、同じリビジョンの別の場所に追加された項目です。

変更ノード

追加も削除もされず、単純に変更された項目です。

未変更ノード

(グラフに表示する)変更がまったくそのリビジョンで発生しなかったとしても、コピー元として使用されるリビジョンを表示するのに使用される場合があります。

最新リビジョン(HEAD)ノード

現在のリポジトリの HEAD リビジョンです。

作業コピーノード

変更された作業コピー向けに追加ノードを表示するよう選択した場合、グラフに追加された最終コミットリビジョンは、この色を使用します。

作業コピーノードの縁

作業コピーが変更されたことを表示するように選択した場合、変更を検出すると作業コピーの境界線にこの色を使用します。

タグノード

タグとして分類されたノードは、この色が混ざることがあります。

トランクノード

トランクとして分類されたノードは、この色が混ざることがあります。

たたまれたタグマーカー

領域を節約するためにタグを折りたたんだ場合、コピー元において、タグはこの色のブロックを使用してマークされます。

選択したノードマーカー

ノードを選択するためクリックしたままにした場合、選択状態を表すマーカはこの色のかたまりとなります。

縞模様

グラフがサブツリーに分割された時にその色を使い、背景にその他の色が付いている場合、分割ツリーを際だたせるため、縞模様にします。

アイコンオーバレイ設定

図4.80 設定ダイアログの「アイコンオーバーレイ」ページ

設定ダイアログの「アイコンオーバーレイ」ページ


このページでは、TortoiseSVN が表示するアイコンオーバーレイの項目を選択できます。

作業コピーの状態を取得するには時間がかかるため、エクスプローラーがオーバーレイアイコンを表示するのに負荷がかからないように、 TortoiseSVN は状態をキャッシュに格納します。システムや作業コピーの大きさをもとに、 TortoiseSVN が使用するキャッシュタイプを以下から選択してください。

デフォルト

別のプロセス(TSVNCache.exe)がすべての状態情報をキャッシュします。このプロセスは、全ドライブの変更を監視し、作業コピー内のファイルが更新されれば、その状態情報を再取得します。優先度が最低で動作しますので、他のプログラムが、これによりリソースをとられてしまうことはありません。これは状態情報が リアルタイム で更新されないということでもありますが、オーバーレイ表示は数秒で更新されます。

【利点】オーバーレイには再帰的な状態が表示されます。つまり、作業コピーの深い階層にあるファイルを更新すると、作業コピーの最上位までの全フォルダーにも更新オーバーレイが表示されます。さらにプロセスからシェルに通知が送られるので、通常、左のツリービューのオーバーレイ表示も変更されます。

【欠点】プロジェクトについての作業をしていないときでも、プロセスが常に動作しています。さらに、作業コピーの数や大きさにも依存しますが、およそ10~50MBの RAM を消費します。

シェル

シェル拡張 DLL の内部で直接キャッシュしますが、表示されているフォルダーのみをキャッシュします。別のフォルダーに移るたびに、ステータス情報を再取得されます。

【利点】とても少ないメモリの消費量で(およそ1MBの RAM を使用)、状態を リアルタイム に表示できます。

【欠点】単一のフォルダーしかキャッシュしないため、オーバーレイには再帰的な状態が表示されません。大きな作業コピーでは、デフォルトのキャッシュよりも、エクスプローラーのフォルダー表示に時間がかかることがあります。また、 MIME タイプ列が使用できなくなります。

無し

この設定では、 TortoiseSVN はエクスプローラーで状態をまったく取得しません。このため、バージョン管理下にあるファイルやフォルダーには、常に「通常」がオーバーレイ表示されます。それ以外のオーバーレイは表示されず、追加の列も無効になります。

【利点】追加でメモリを使用することは絶対になく、閲覧中にエクスプローラーが遅くなることもありません。

【欠点】ファイルやフォルダーの状態情報が、エクスプローラーに表示されません。作業コピーが変更されているかどうかを確認するには、変更をチェックダイアログを使用する必要があります。

デフォルトでは、ファイルを開く・保存ダイアログでも、Windows エクスプローラーと同様に、オーバレイアイコンやコンテキストメニューが表示されます。 Windows エクスプローラーで のみ 表示させる場合は、エクスプローラー上でのみオーバーレイとコンテキストメニューを表示をチェックしてください。

昇格したプロセスでの状態キャッシュを無効にするボックスをチェックすることで、昇格したプロセスでの状態キャッシュを強制的になしにすることができます。これは昇格したプロセスでもう1つの TSVNCache.exe プロセスが作成されるのを防ぎたい場合に便利です。

バージョン管理外のファイルを含むフォルダーに、変更済マークをつけるようにもできます。これにより、まだバージョン管理下に入れてない新しいファイルを作成したのを、覚えておくのに便利です。このオプションは、キャッシュタイプ(前述)が デフォルト の場合にのみ有効です。

変更リストignore-on-commitにファイルが登録されている場合、状態を親フォルダーの表示に反映させないようにすることができます。つまり、変更リスト内のファイルだけが変更されても、親フォルダーのオーバーレイアイコンは「未変更」のままになります。

次のグループでは、オーバーレイを表示するストレージの種類を選択できます。デフォルトでは、ハードディスクドライブしか選択されていません。アイコンオーバレイをすべて無効にもできますが、そんなことしたいですか?

ネットワークドライブはとても遅いので、デフォルトでは、ネットワークフォルダー上にある作業コピーにはアイコンを表示しません。

USB フラッシュドライブは、ドライブタイプがデバイス毎に特定されるので特殊です。ある種のものは固定ドライブに見え、別のある種のものはリムーバブルドライブに見えます。

除外するパス は TortoiseSVN に対して、それらのパスにはアイコンオーバーレイやステータス列を 表示しない ことを伝えるために使用します。これは、変更しないライブラリのみが含まれるためオーバーレイの必要ない巨大な作業コピーが存在する場合、もしくは TortoiseSVN に特定のフォルダーのみ見て欲しい場合に有用です。

ここで指定するパスはどれも再帰的に適用されることを想定しています。そのため、どの子階層フォルダーもオーバーレイ表示されません。名前のついたフォルダー のみ を除外したいなら、 ? をパスの後ろに追加してください。

含めるパス にも同じことが言えます。オーバーレイが無効になるドライブタイプや、除外パスで指定したパスでも、オーバーレイされるようになります。

ユーザーは時々これら3つの設定がどのように作用するかを疑問に思うかもしれません。任意のパスに対して、一致するものが見つかるまでディレクトリ構造を上向きに探索し、含めるリストと除外するリストをチェックします。最初に一致するものが見つかった場合、含めるもしくは除外するルールに従います。もし競合した場合は、単一ディレクトリの設定は再帰的なものより優先されます。そして、含めるルールは除外するルールよりも優先されます。

分かりやすい例を示します。

除外するパス:
       C:
       C:\develop\?
       C:\develop\tsvn\obj
       C:\develop\tsvn\bin

含めるパス:
       C:\develop

このように設定すると、 C: ドライブのオーバーレイ表示は無効になりますが、 c:\develop 以下については、明確に除外されている c:\develop フォルダー自身を除き、すべてのプロジェクトにオーバーレイ表示されます。頻繁に変更されるバイナリが入るフォルダーも除外されます。

TSVNCache.exe が検索するパスを制限することもできます。特定のフォルダー以下のみを検索したい場合は、全ドライブタイプを無効にし、検索対象にしたい特定のフォルダーのみを含めてください。

SUBST ドライブを除外する

作業コピーにアクセスするのに、以下のように SUBST ドライブを使用すると便利なことがあります。

subst T: C:\TortoiseSVN\trunk\doc

しかし、 TSVNCache はファイルが変更されたという通知をひとつしか受け取れず、それは通常割り当て元のパスに対してであるため、オーバーレイ表示を更新できません。そのため、 subst パスのオーバーレイ表示はまったく更新されない可能性があります。

これに対処する簡単な方法は、表示対象から割り当て元のパスを除外することです。そうすれば、代わりに subst パスにオーバーレイ表示されます。

時には、 TSVNCache による変更の検索・監視を減らすために、作業コピーを含む領域を除外することがありますが、フォルダーに作業コピーが含まれていることを視覚表示したい場合があります。 表示対象外にある作業フォルダーの最上位を通常として表示する チェックボックスをチェックすると、除外されたパス(チェックされていないドライブタイプや、除外するパスとして指定されたもの)にある作業コピーの最上位フォルダーには、通常の最新の状態である緑色のチェックマークが表示されます。フォルダーのオーバーレイ表示は正しくはないかもしれませんが、作業コピーは見つけやすくなるでしょう。ファイルには全くオーバーレイ表示されません。オーバーレイ表示がなくても、コンテキストメニューは有効であることにご注意ください。

この特殊な例外として、A: ドライブと B: ドライブは'通常' として除外フォルダーを表示する オプションのようには動作しません。これは、Windows がエクスプローラーの起動時に、PC にフロッピードライブがあっても、数秒の遅延が考えられるドライブを強制的に参照するからです。

アイコンセットの選択

図4.81 設定ダイアログの「アイコンセット」ページ

設定ダイアログの「アイコンセット」ページ


オーバーレイアイコンを任意のものに変更できます。オーバーレイアイコンセットを変更したときに、変更を有効にするにはコンピューターの再起動が必要なことに注意してください。

オーバーレイハンドラーを有効にする

図4.82 設定ダイアログの「オーバーレイハンドラー」ページ

設定ダイアログの「オーバーレイハンドラー」ページ


使用可能なオーバーレイの数が厳しく制限されているため、任意のものがロードされることを保証するために、いくつかのハンドラを無効にすることができます。 TortoiseSVN は他の Tortoise クライアント(例えば TortoiseCVS や TortoiseHg )と共用される TortoiseOverlays コンポーネントを使用しているため、この設定はそれらのクライアントに影響します。

ネットワーク設定

図4.83 設定ダイアログの「ネットワーク」ページ

設定ダイアログの「ネットワーク」ページ


リポジトリごとにプロキシの設定をする必要がある場合、 Subversion の servers ファイルを直接編集する必要があります。直接編集する場合は 編集 ボタンを押してください。このファイルの使用法の詳細は、Runtime Configuration Area で説明しています。

TortoiseSVN が svn+ssh リポジトリと安全な接続を確立するのに使用するプログラムを指定できます。私たちは TortoisePlink.exe をお勧めします。これは TortoiseSVN に含まれている一般的な Plink プログラムです。ですがウィンドウなしアプリとしてコンパイルされているため、認証するたびに DOS ボックスがポップアップする、ということはありません。

実行ファイルのフルパスを指定しなければなりません。TortoisePlink.exe の場合、 TortoiseSVN の標準 bin ディレクトリにあります。その場所を指定するには 参照 ボタンが役に立ちます。パスに空白が含まれる場合、以下のように引用符で囲んでください。

"C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe"

ウィンドウを持たないということの側面として、いずれのエラーメッセージも行き場がないということがあります。そのため、認証が失敗したときに 標準出力に書き込めません といった簡単なメッセージしか得られません。このため、まず標準の Plink をセットアップすることをお勧めします。すべて動作すれば、TortoisePlink を全く同じパラメーターで使用できます。

TortoisePlink は、Plink の派生物のためドキュメントがありません。コマンドラインパラメーターは PuTTY のウェブサイト で参照してください。

パスワードを繰り返し入力しなくてもいいように、Pageant のようにパスワードキャッシュツールの使用も検討する必要があるでしょう。これも PuTTY のウェブサイトでダウンロードできます。

最終的に、サーバーとクライアントにSSHを設定するのは、このヘルプファイルの範疇を超えている重要なプロセスです。しかし、TortoiseSVN FAQ にリストされている Subversion/TortoiseSVN SSH How-To にガイドがあります。

外部プログラムの設定

図4.84 設定ダイアログの「差分ビューアー」ページ

設定ダイアログの「差分ビューアー」ページ


ここでは、TortoiseSVN が使用する外部の差分・マージツールを定義できます。デフォルトでは TortoiseSVN と一緒にインストールされる TortoiseMerge が使われます。

TortoiseSVN の外部の差分・マージツールとしてよく使われているものの一覧は、 「外部差分・マージツール」 をご覧ください。

差分ビューアー

外部の差分ツールは、ファイルを異なるリビジョン間で比較するのに使用します。外部ツールは、それぞれのコマンドラインオプションに従って、コマンドラインからファイル名を取得する必要があります。TortoiseSVN は % が先頭についた置換パラメーターを使用します。このパラメーターが現れると、適切な値に置換されます。パラメーターの順番はお使いの差分ツールに合わせてください。

%base

変更前のファイル

%bname

変更前ファイルのウィンドウタイトル

%nqbname

引用符なしの変更前ファイルのウィンドウタイトル

%mine

変更後のファイル

%yname

変更後ファイルのウィンドウタイトル

%nqyname

引用符なしの変更後ファイルのウィンドウタイトル

%burl

元ファイルのURL(もしあれば)

%nqburl

引用符なしの元ファイルのURL(もしあれば)

%yurl

2番目のファイルのURL(もしあれば)

%nqyurl

引用符なしの第2ファイルのURL(もしあれば)

%brev

元ファイルのリビジョン(もしあれば)

%nqbrev

引用符なしの元ファイルのリビジョン(もしあれば)

%yrev

2番目のファイルのリビジョン(もしあれば)

%nqyrev

引用符なしの第2ファイルのリビジョン(もしあれば)

%peg

ペグリビジョン(もしあれば)

%nqpeg

引用符なしのペグリビジョン(もしあれば)

%fname

ファイルの名前です。もし同じファイルの2つの状態を比較するのではなく、2つの異なるファイルを比較する場合は、この文字列は空欄になります。

%nqfname

引用符なしのファイルの名前です。

ウィンドウタイトルは単なるファイル名ではありません。 TortoiseSVN は、それを表示名として扱うため、それにふさわしい名前を作成します。たとえば、あるファイルのリビジョン 123 と作業コピーの差分を表示する場合、それぞれの名前は filename : リビジョン 123filename : 作業コピー となります。

ExamDiff Pro の設定例:

C:\Path-To\ExamDiff.exe %base %mine --left_display_name:%bname
    --right_display_name:%yname

KDiff3 の設定例:

C:\Path-To\kdiff3.exe %base %mine --L1 %bname --L2 %yname

WinMerge の設定例:

C:\Path-To\WinMerge.exe -e -ub -dl %bname -dr %yname %base %mine

Araxis の設定例:

C:\Path-To\compare.exe /max /wait /title1:%bname /title2:%yname
    %base %mine

UltraCompare の設定例:

C:\Path-To\uc.exe %base %mine -title1 %bname -title2 %yname

DiffMerge の設定例:

C:\Path-To\DiffMerge.exe -nosplash -t1=%bname -t2=%yname %base %mine

キーワード、特にファイルの リビジョン 展開に svn:keywords を使用する場合、キーワードの現在値によって、厳密には違いがでるかもしれません。また、svn:eol-style = native を使用しているなら、BASE ファイルの行末は純粋に LFになっているでしょうが、ローカルのファイルの行末は CR-LF かもしれません。通常 TortoiseSVN は 差分操作の前に、BASE ファイルに対しキーワード展開や行末を分析して自動的にこの違いを隠蔽します。しかしこの操作は時間がかかる可能性があります。BASE に対する差分の時はファイルを変換する にチェックがなければ、TSVN はファイルに対する事前処理をスキップします。

Subversion のプロパティ用に別の差分ツールを指定することもできます。プロパティは短く簡単な文字列である傾向があるので、シンプルでもっとコンパクトなビューアーを使いたくなるかもしれません。

代替差分ツールを設定すると、コンテキストメニューから TortoiseMerge サードパーティツールにアクセスできます。コンテキストメニュー差分を表示 で優先差分ツールを使用し、Shift+ コンテキストメニュー差分を表示 で代替差分ツールを使用します。

ダイアログの最下部で、Unified差分ファイル(パッチファイル)のビューアーを設定することができます。パラメーターは必要ありません。デフォルトの設定では、 TortoiseSVN と一緒にインストールされる TortoiseUDiff を使用するよう設定され、追加・削除された行を色分け表示します。

Unified差分ファイルは単なるテキストファイルなので、任意のテキストエディターを使用しても結構です。

マージツール

外部マージプログラムを競合したファイルの解決に使用します。パラメーターを差分プログラムと同様の方法で置換します。

%base

誰も変更していないもとのファイル

%bname

変更前ファイルのウィンドウタイトル

%nqbname

引用符なしの変更前ファイルのウィンドウタイトル

%mine

自分の変更がある自分のファイル

%yname

変更後ファイルのウィンドウタイトル

%nqyname

引用符なしの変更後ファイルのウィンドウタイトル

%theirs

リポジトリにあるファイル

%tname

リポジトリにあるファイルのウィンドウタイトル

%nqtname

引用符なしのリポジトリにあるファイルのウィンドウタイトル

%merged

マージ操作をした結果の競合ファイル

%mname

マージしたファイルのウィンドウタイトル

%nqmname

引用符なしのマージしたファイルのウィンドウタイトル

%fname

競合ファイルの名前

%nqfname

引用符なしの競合ファイルの名前

Perforce Merge の設定例:

C:\Path-To\P4Merge.exe %base %theirs %mine %merged

KDiff3 の設定例:

C:\Path-To\kdiff3.exe %base %mine %theirs -o %merged
    --L1 %bname --L2 %yname --L3 %tname

Araxis の設定例:

C:\Path-To\compare.exe /max /wait /3 /title1:%tname /title2:%bname
    /title3:%yname %theirs %base %mine %merged /a2

WinMerge (2.8 以降) の設定例:

C:\Path-To\WinMerge.exe %merged

DiffMerge の設定例:

C:\Path-To\DiffMerge.exe -caption=%mname -result=%merged -merge
    -nosplash -t1=%yname -t2=%bname -t3=%tname %mine %base %theirs

差分・マージの高度な設定

図4.85 設定ダイアログの「差分/マージの高度な設定」ダイアログ

設定ダイアログの「差分/マージの高度な設定」ダイアログ


高度な設定では、ファイルの拡張子ごとに異なる差分・マージプログラムを定義できます。たとえば、.jpg ファイルの 差分 を取るのに Photoshop を関連付けできます。:-) svn:mime-type で差分・マージプログラムと関連付けることもできます。

拡張子を関連付けるには、拡張子を指定する必要があります。Windows ビットマップファイルを指定するには、.BMPとしてください。svn:mime-type プロパティを使用して関連付けるには、text/xml のようにスラッシュを含めて mime type を指定してください。

保存データの設定

図4.86 設定ダイアログの「保存されたデータ」ページ

設定ダイアログの「保存されたデータ」ページ


便宜上、TortoiseSVN はたくさんの設定を保存し、最近の情報を記憶しています。データのキャッシュを削除する場合、ここで行います。

URLの履歴

作業コピーのチェックアウトや、変更点のマージ、リポジトリブラウザーの使用の際は常に、TortoiseSVN は直近に使用した URL を記録し、コンボボックスに提供します。時には URL がもう存在しなくなり、リストが散らかりますので、定期的に掃除するのに便利です。

コンボボックスに表示されている 1 項目だけを、その場で削除したい場合、下矢印をクリックしてコンボボックスを開き、削除したい項目にマウスをあわせて、Shift+Del を押してください。

ログメッセージ(入力ダイアログ)

TortoiseSVN は最近の入力したコミットログを保存しています。リポジトリごとに保存していますので、たくさんのリポジトリにアクセスする場合、極度に肥大化してしまうことがあります。

ログメッセージ(ログダイアログ)

TortoiseSVN は、次回ログを参照した際の時間節約のため、ログ参照ダイアログが取得したログメッセージをキャッシュしています。メッセージがキャッシュされている状態で、他の誰かがログメッセージを編集した場合、キャッシュを消去しないとその変更を参照できません。ログメッセージのキャッシュは ログキャッシュ タブで有効にできます。

ダイアログのサイズと位置

多くのダイアログは、前回使用したときのサイズと画面内の位置を記憶しています。

認証データ

Subversion サーバーの認証を通れば、ユーザー名とパスワードを毎回入力しなくてもいいように、ローカルにキャッシュしています。セキュリティ上の理由や、リポジトリに別のユーザー名でアクセスするのに消去したいかもしれません……ジョンはPCがあなたに使われているのを知っていますか?

もし、特定の1つのサーバーについて認証データをクリアしたい場合は、全て消去ではなく消去...ボタンを使用してください。

アクションログ

TortoiseSVN は、進行ダイアログに書き込まれたすべてのログを保持しています。これは例えば、最近の更新コマンドで何が起きたのかをチェックしたいときに便利です。

ログファイルは長さを制限しており、大きくなりすぎたときには古い内容から破棄していきます。デフォルトでは 4000 行保持しますが、この数字はカスタマイズできます。

ここからログファイルの内容の確認や消去ができます。

ログキャッシュ

図4.87 設定ダイアログの「ログキャッシュ」ページ

設定ダイアログの「ログキャッシュ」ページ


このダイアログでは、TortoiseSVNのログキャッシュ機能の設定ができます。これはログメッセージと変更したパスのローカルコピーを保持し、サーバーからダウンロードの時間消費を防ぎます。ログキャッシュを使用すると、ログダイアログやリビジョングラフが劇的に速くなります。その他にも、オフライン時にもログメッセージを参照できるといった便利な特徴もあります。

ログのキャッシュを有効にする

ログデータが必要な時は常にログのキャッシュを有効にします。チェックすると、キャッシュが有効ならキャッシュからデータを取得します。キャッシュにメッセージがなければ、サーバーから取得しキャッシュに追加します。

キャッシュを無効にすると、データを常にサーバーから直接取得し、ローカルに保存しません。

あいまいなURLを許可

Occasionally you may have to connect to a server which uses the same URL for all repositories. Older versions of svnbridge would do this. If you need to access such repositories you will have to check this option. If you don't, unchecked it to improve performance.

あいまいなUUIDを許可

Some hosting services give all their repositories the same UUID. You may even have done this yourself by copying a repository folder to create a new one. For all sorts of reasons this is a bad idea - a UUID should be unique. However, the log cache will still work in this situation if you check this box. If you don't need it, unchecked it to improve performance.

リポジトリにアクセスできない場合

オフラインで作業していたり、リポジトリサーバーがダウンしていたりした場合でも、ログキャッシュを使用して、すでにキャッシュに保持したログメッセージを提供できます。もちろんキャッシュは最新の状態ではありませんから、この機能を使用するかどうかの選択肢があります。

サーバーに接続せず、キャッシュからログデータを取得する際、ダイアログはオフライン状態であることをタイトルバーに表示します。

HEAD リビジョンへの更新がタイムアウトになるまでの秒数

ログダイアログを表示する際、通常、新しいログメッセージをチェックするのにサーバーに接続すると思います。ここでタイムアウトに0以外を指定したばあい、前回の接続からその秒数経過しているときだけ、サーバーに接続します。頻繁にログダイアログを開き、サーバーが遅い場合、これによりサーバーとのやりとりを抑えることができますが、表示されるデータが完全に最新であるとは限りません。この機能を使用する場合は、折衷案として300(5分)とするのをお勧めします。

小さいキャッシュを自動削除する日数

たくさんのリポジトリをブラウズすると、たくさんのログキャッシュを蓄積することになります。そのリポジトリを頻繁に使用しなければ、キャッシュが大きくふくらむことはありません。そのため、TortoiseSVN はデフォルトで、ここにセットした時間後にキャッシュを削除します。キャッシュの削除を制御するのに、この項目を使用してください。

自動削除対象となるキャッシュのサイズの上限

大きなキャッシュの再取得は、より負荷が高くなります。そのため、TortoiseSVN は小さなキャッシュしか削除しません。この値で、適切な閾値を調節してください。

異常終了後にキャッシュを保持する回数

時折、キャッシュに何か障害が発生し、それが元で異常終了することがあります。これが発生すると、問題の再発防止のため、通常自動的にキャッシュを削除します。ナイトリービルドのような不安定さの残るバージョンを使用する場合などで、キャッシュを保持するために指定することができます。

キャッシュされているリポジトリ

このページでは、ローカルにキャッシュしたリポジトリの一覧を、キャッシュに使用した領域とともに参照できます。リポジトリを選択すると、その下のボタンを使用できます。

更新 をクリックすると、キャッシュを完全に再読込し、抜けたところを補完します。大きなリポジトリでは、非常に時間がかかりますが、オフラインで作業し、もっともよい状態のキャッシュが必要な場合に便利です。

エクスポート ボタンをクリックすると、キャッシュ全体を CSV ファイルでエクスポートします。ログデータを外部プログラムで処理をする際に便利ですが、主に開発者用でしょう。

削除 をクリックすると、選択したリポジトリのキャッシュデータをすべて削除します。これはそのリポジトリのキャッシュを無効にするものではなく、次回ログデータが必要になると、新しいキャッシュを作成します。

ログキャッシュの統計データ

図4.88 設定ダイアログのログキャッシュ統計

設定ダイアログのログキャッシュ統計


詳細 ボタンをクリックすると、特定のキャッシュの詳細統計を表示します。ここではたくさんの項目が表示され、これは主に TortoiseSVN の開発者が興味を引く項目です。そのため、すべてを詳細に説明することはしません。

RAM

このキャッシュを提供するのに必要なメモリ量です。

ディスク

キャッシュに使用するディスクスペースです。データは圧縮されますので、ディスクの使用量は、一般的にかなり控えめになります。

接続状態

リポジトリが有効なキャッシュを、前回使用したかどうかを表示します。

最終更新日

最後にキャッシュの内容を更新した日時です。

最終取得日

サーバーから HEAD リビジョンを最後に取得した日時です。

作者

キャッシュに記録したメッセージの作者数です。

パス

svn log -v で見られるリストにある、パスの数です。

スキップ範囲

取得していないリビジョン範囲の数で、単純にリクエストしていないものです。キャッシュ内のホール数の尺度になります。

最大リビジョン

キャッシュに格納されている、リビジョン番号の最大値です。

リビジョン数

キャッシュに格納されているリビジョン番号の数です。キャッシュの完全性に関する別の尺度になります。

クライアント側フックスクリプト

図4.89 設定ダイアログの「フックスクリプト」ページ

設定ダイアログの「フックスクリプト」ページ


このダイアログでは、Subversion のアクションに合わせて自動的に実行される、フックスクリプトのセットアップを行えます。対照的に 「サーバー側フックスクリプト」 で説明しているフックスクリプトは、クライアントのローカルで実行されます。

ここで言うフックは、コミット後にバージョン番号を更新するため SubWCRev.exe のようなプログラムを起動したり、再構築のトリガになったりします。

なお、フックスクリプトは作業コピーの特殊なプロパティで指定することもできます。詳しくは、「TortoiseSVN のプロジェクトプロパティ」を参照してください。

図4.90 設定ダイアログのフックスクリプトの設定

設定ダイアログのフックスクリプトの設定


新しいフックスクリプトを追加するには、単に 追加 をクリックし、詳細を入力してください。

現在、次の種類のフックスクリプトが使用できます。

Start-commit

コミットダイアログを表示する前に呼ばれます。フックがバージョン管理下のファイルを変更したり、コミットするファイルのリストやコミットメッセージに影響を与える場合に使用してください。しかし、初期の段階でフックが呼ばれるため、コミット用に選択したオブジェクトの全リストは有効でないことに注意するべきです。

Manual Pre-commit

これが指定されると、コミットダイアログにフックを実行ボタンが表示され、クリックすると定義されたフックスクリプトが実行されるようになります。フックスクリプトはチェックされたファイルやフォルダーすべての一覧と、入力されていればコミットメッセージを受け取ります。

Check-commit

コミットダイアログでユーザーがOKをクリックした後、コミットダイアログが閉じる前に呼ばれます。このフックはチェックされたすべてのファイルの一覧を受け取ります。フックがエラーを返すと、コミットダイアログは閉じません。

改行で区切られたパスを含むエラーメッセージが返されると、エラーメッセージ表示後に表示されるコミットダイアログでこれらのパスが選択されます。

Pre-commit

コミットダイアログの OK をクリックした後、実際のコミットが始まる前に呼ばれます。このフックは実際にコミットするファイルのリストを持ちます。

Post-commit

コミットが正常に完了した後で呼ばれます。

Start-update

リビジョンへの更新ダイアログが表示される前に呼ばれます。

Pre-update

実際のSubversionの更新や切り替え操作が始まる前に呼び出されます。

Post-update

更新、切り替え、チェックアウト、が終了した後に(成功したかどうかにかかわらず)呼び出されます。

Pre-connect

リポジトリに接続を試みる前に呼び出されます。通常、およそ5分に1度の割合で呼び出されます。

Pre-lock

ファイルをロックしようとする前に呼び出されます。

Post-lock

ファイルがロックされた後に呼び出されます。

フックは特定の作業コピーのパスに対して定義されます。最上位のパスのみ指定する必要があります。もし、サブフォルダーを操作する場合、TortoiseSVN は自動的に上位へマッチするかどうか検索を行います。

次に、実行するコマンドラインを、フックスクリプトや実行ファイルのパスから始めて指定する必要があります。ここではバッチファイルや実行可能ファイル、その他の Windows と関連付けられたファイル(例えば Perl スクリプト)を指定します。なお、Windows のセキュリティ上の制限で、Windows は UNC パスで指定されたスクリプトを実行しないため、この形式で指定することはできません。

コマンドラインには、TortoiseSVN が設定するパラメーターを含めます。呼ばれるフックによってパラメーターは異なります。各フックには以下の順番で渡されるパラメーターがあります。

Start-commit

PATHMESSAGEFILECWD

Manual Pre-commit

PATHMESSAGEFILECWD

Check-commit

PATHMESSAGEFILECWD

Pre-commit

PATHDEPTHMESSAGEFILECWD

Post-commit

PATHDEPTHMESSAGEFILEREVISIONERRORCWD

Start-update

PATHCWD

Pre-update

PATHDEPTHREVISIONCWD

Post-update

PATHDEPTHREVISIONERRORCWDRESULTPATH

Pre-connect

no parameters are passed to this script. You can pass a custom parameter by appending it to the script path.

Pre-lock

PATHLOCKFORCEMESSAGEFILECWD

Post-lock

PATHLOCKFORCEMESSAGEFILEERRORCWD

各パラメーターの意味は以下に説明する通りです。

PATH

A path to a temporary file which contains all the paths for which the operation was started in UTF-8 encoding. Each path is on a separate line in the temp file.

なお、操作がリモートで行われた場合(例えばリポジトリブラウザー内で)、それらのパスはローカルパスではなく、影響する項目のURLになります。

DEPTH

コミット・更新が完了した際の深さです。

以下のような有効な値があります。

-2

svn_depth_unknown

-1

svn_depth_exclude

0

svn_depth_empty

1

svn_depth_files

2

svn_depth_immediates

3

svn_depth_infinity

MESSAGEFILE

コミット用のログメッセージを格納しているファイルのパスです。このファイルには、UTF-8 エンコードのテキストが格納されています。start-commit フックの実行が完了すると、ログメッセージを読み返し、フックが変更する機会を与えます。

REVISION

更新したりコミットが完了したときの、リポジトリのリビジョンです。

LOCK

ロックするならtrue、解除するならfalseのどちらかです。

FORCE

操作が強制的だったかどうかで、 true または false のどちらかです。

ERROR

エラーメッセージを含むファイルのパスです。エラーがない場合、このファイルは空になります。

CWD

スクリプトを実行する現在の作業ディレクトリです。これはすべてに影響を与えるパスの、共通のルートディレクトリに設定されます。

RESULTPATH

A path to a temporary file which contains all the paths in UTF-8 encoding which were somehow touched by the operation. Each path is on a separate line in the temp file.

便宜上パラメーターに名前を付けましたが、フックの設定で、その名前を参照する必要はないことに注意してください。個々のフックに挙げたパラメーターはすべて、好むと好まざるとに関わらず常に渡されます ;-)

Subversion の操作を、フックスクリプトが完了するまで止めておきたい場合は、スクリプトが終了するまで待機 をチェックしてください。

Normally you will want to hide ugly DOS boxes when the script runs, so Hide the script while running is checked by default. Also you need to check this if your hook script might return an error that should stop the operation.

The force flag can be set if the user must not proceed with the operation without running the script, i.e. the script must always run. If the force flag is not checked, then the user is shown a button Retry without hooks to retry the operation without running the hook script.

クライアントフックスクリプトのサンプルは、 TortoiseSVN リポジトリ サイトの contrib フォルダーから入手できます(リポジトリへのアクセス方法は、 「ライセンス」 をご覧ください。)

フックスクリプトをデバッグするとき、DOSコンソールに実行中の行を表示したり、スクリプトが実行完了したときにウィンドウが閉じるのを防ぐためにpauseを挿入したりしたくなったりすることがあるでしょう。入出力がリダイレクトされているため、これは正しく動作しません。しかし、入出力を明示的にCONにリダイレクトすることはできます。例えば、

echo Checking Status > con
pause < con > con

TortoiseSVN のインストールディレクトリに、 ConnectVPN.exe という小さいツールが含まれています。このツールを pre-connect フックとして使用すると、 TortoiseSVN がリポジトリにアクセスしようとする前に、自動的に VPN に接続できるようになります。ツールの最初の引数として、 VPN 接続の名前を渡すようにしてください。

課題追跡システムとの統合

TortoiseSVN は、コミットダイアログで課題管理システムにクエリを発行するために、COM プラグインを使用できます。そのようなプラグインの使用を、 「課題追跡システムからの情報取得」 で説明しています。システム管理者が、すでにインストールして登録したプラグインを提供している場合、どのように作業コピーと統合するかをここで指定します。

図4.91 設定ダイアログの「課題追跡システムとの統合」ページ

設定ダイアログの「課題追跡システムとの統合」ページ


特定の作業コピーでプラグインを使用するには、追加... をクリックしてください。ここで作業コピーのパス、登録済み課題管理システムプラグインのドロップダウンリストでの選択、渡す任意のパラメーターの指定ができます。パラメーターはプラグインに固有ですが、自分に割り当てられた課題をプラグインが抽出できるように、課題管理システムのユーザー名を含めるかも知れません。

プロジェクトのすべてのユーザーで同じ COM プラグインを使用する場合は、bugtraq:provideruuidbugtraq:provideruuid64bugtraq:providerparamsをプロパティとして設定することができます。

bugtraq:provideruuid

IBugtraqProvider の COM UUID (例えば、{91974081-2DC7-4FB1-B3BE-0DE1C8D6CE4E})を指定します。(この例は Google Code の課題管理システム向けプロバイダーである Gurtle bugtraq provider の UUID です)。

bugtraq:provideruuid64

これは bugtraq:provideruuid と同様ですが、64ビット版の IBugtraqProvider です。

bugtraq:providerparams

このプロパティは、IBugtraqProvider に渡すパラメーターを指定します。

2つのプロパティに何を設定するか調べるには、 IBugtraqProvider プラグインのドキュメントを参照してください。

TortoiseBlame の設定

図4.92 設定ダイアログの「TortoiseBlame」ページ

設定ダイアログの「TortoiseBlame」ページ


TortoiseBlame で使用する設定は、TortoiseBlame 自体ではなく、メインのコンテキストメニューから設定します。

TortoiseBlame では、ファイルにある行の古さを背景色で表現します。ここでは、最新と最古の両端のリビジョンの色を指定します。 TortoiseBlame はこの 2 色の中間色を使用して、行単位のリポジトリのリビジョンを表現します。

表示位置調整バーで使用する差分の色を指定することができます。デフォルトでは、メインウィンドウで文字を読みやすいよう背景の明るさを維持​​しながら、表示位置調整バーと強いコントラストをなす色が使われています。

フォント

ここでは、テキストを表示するフォントとポイントサイズを指定できます。ここで指定されたフォントは、ファイルの内容と、左画面に表示する作者とリビジョンの両方に使用されます。

タブ

ファイルの内容にタブ文字があった場合、空白を何文字使用して展開するかを定義します。

TortoiseUDiff設定

図4.93 設定ダイアログの「TortoiseUDiff」ページ

設定ダイアログの「TortoiseUDiff」ページ


TortoiseUDiffで使用する設定は、TortoiseUdiff自体ではなく、メインのコンテキストメニューから設定します。

TortoiseUDiffのデフォルト色はふつう良いのですが、ここで設定することができます。

フォント

画面に表示される文字列のフォントや大きさ(ポイント単位)を選択できます。

タブ

差分の内容にタブ文字があった場合、空白を何文字使用して展開するかを定義します。

TortoiseSVN の設定のエクスポート

図4.94 設定ダイアログの「同期」ページ

設定ダイアログの「同期」ページ


You can sync all TortoiseSVN settings to and from an encrypted file. The file is encrypted with the password you enter so you don't have to worry if you store that file on a cloud folder like OneDrive, GDrive, DropBox, ...

パスとパスワードが設定されると、TortoiseSVNは自動的にすべての設定を同期し、その後も同期し続けます。

すべての設定を手動で暗号化ファイルにエクスポートしたり、暗号化ファイルからインポートしたりすることもできます。その場合、パスと設定ファイルの暗号化処理のためのパスワードを尋ねられます。

設定を手動でエクスポートするとき、通常のエクスポートや同期では含まれないすべてのローカル設定を含めることもできます。ローカル設定はローカルパスを含みますが、これはふつうコンピューター間で異なります。ローカル設定は差分・マージツールの設定やフックスクリプトを含みます。

高度な設定

使用頻度の低い一部の設定は、設定ダイアログの高度な設定ページでのみ設定できます。これらの設定はレジストリを直接操作するので、それぞれの設定が何をするのかを理解しておく必要があります。これらの変更がどうしても必要な場合を除いて、これらの設定を変更しないでください。

AllowAuthSave

同じコンピューター上で、複数のユーザーが同じアカウントを使用していることがあります。このような場合、認証データを保存すべきでないことがあります。この値を false にせ底すると、認証ダイアログの認証を保存ボタンを無効にすることができます。

AllowUnversionedObstruction

アップデートによって、すでにローカルの作業コピーに同じ名前が存在する新しいファイルを取得したとき、デフォルトの動作はローカルファイルを保持し、リポジトリからの新しいファイルは(可能ならば)変更後のバージョンとして表示します。 false に設定すると、 TortoiseSVN がこれを競合として扱うようになります。

AlwaysExtendedMenu

エクスプローラーでは Shift キーを押しながらコンテキストメニューを開くと、 TortoiseSVN の追加コマンドが表示されます。常に追加コマンドを表示させたい場合は、 true に設定してください。

AutoCompleteMinChars

エディターが自動補完のポップアップを表示する最小文字数です。既定値は3です。

AutocompleteRemovesExtensions

コミットメッセージのエディターでは、コミットするファイルが自動保管リストで表示されます。 true に設定すると、拡張子を除外した名前を表示するようになります。

BlockPeggedExternals

特定のペグリビジョンに関連付けられたを外部ファイルは、デフォルトではコミット時に選択できないようになっています。これは、後に更新するときに、外部ファイルのペグリビジョンが修正されていないと変更が元に戻ってしまわないようにするためです。

それでもこの様な外部ファイルの変更をコミットしたいのであれば、この値を false に設定してください。

BlockStatus

TortoiseSVN の他のコマンド(例えば更新、コミット、など)が動作している間、エクスプローラーのステータスオーバーレイを更新したくない場合は、この値を true に設定してください。

CacheTrayIcon

TSVNCache にトレイアイコンのキャッシュを追加するには、この値を true に設定してください。これはプログラムを正規に終了させるために必要なもので、開発者にのみ有用な設定です。

ColumnsEveryWhere

作業コピーを Windows エクスプローラーの詳細表示で表示させたとき、TortoiseSVNが列を追加します。作業コピーばかりでなくどこでも列を追加したい場合、この値を true に設定してください。なお、列の追加はWindows XPでしか行われず、Vista以降ではこの機能はサポートされていません。 ただし、サードパーティー製のエクスプローラーによっては、WindowsのバージョンがXP以降であってもサポートされることがあります。

ConfigDir

Subversion の設定ファイルを別な場所に設定することができます。これはすべての TortoiseSVN の操作に影響します。

CtrlEnter

TortoiseSVN の多くのダイアログでは、 Ctrl+Enter を押すことで OK ボタンを押したときと同様にダイアログを閉じることができます。 この値をfalse に設定すると、この機能は無効になります。

Debug

trueに設定すると、 TortoiseProc.exe を使用して開始されるたびにあらゆるコマンドについて、ポップアップダイアログでコマンドラインの内容を表示できます。

DebugOutputString

TortoiseSVN が実行中にデバッグメッセージを表示させたい場合は、これをtrueに設定してください。メッセージは、特殊なデバッグツールのみでキャプチャすることができます。

DialogTitles

ダイアログタイトルのデフォルトの書式(0に設定時)は、URL/パス - ダイアログ名 - TortoiseSVN です。この値を1に設定すると、書式が ダイアログ名 - URL/パス - TortoiseSVN になります。

DiffBlamesWithTortoiseMerge

TortoiseSVN は外部の差分ビューアーを使用することができます。しかし、多くのビューアーには注釈履歴 (「注釈履歴の差分」)が統合されていませんので、その場合はTortoiseMerge に戻したくなることもあるでしょう。そのためには、この値をtrueに設定してください。

DlgStickySize

この値はダイアログが境界にくっつく際の接近距離をピクセル数で指定します。既定値は3です。この値を無効にするには、0に設定してください。

FixCaseRenames

アプリケーションによっては、必要でもないのに勝手に、通知なしでファイル名の大文字/小文字を変えてしまうものがあります。例えば、 file.txtFILE.TXT に変わっても、 Windows アプリケーションでは困りませんが、 Subversion ではこのような場合にも大文字/小文字を区別してしまいます。そのため、 TortoiseSVN ではこのような大文字/小文字の変更を自動的に修正します。

もし、 TortoiseSVN が自動的に大文字/小文字の修正を行ってほしくない場合、この値を false に設定してください。

FullRowSelect

様々なダイアログ(例えばコミット、変更をチェック、追加、変更の取り消し、など)のリストコントロールを、全行選択(つまり、項目を選択する際に、最初のカラムではなく行全体を選択すること)にします。これは使いやすいのですが、行全体が反転するため、右下の背景画像に重なると醜くなってしまうことがあります。全行選択を解除する場合は、この値を false に設定してください。

GroupTaskbarIconsPerRepo

このオプションは、様々なTortoiseSVNのダイアログやウィンドウが、Windows 7のタスクバー内でグループ化される方法を決定します。このオプションは、Vistaでは効果がありません。

  1. 既定値は0です。この設定では、アイコンがアプリケーションの種類によってグループ化されます。TortoiseSVNのすべてのダイアログがひとつにグループ化され、TortoiseMergeのすべてのウィンドウがひとつにグループ化される・・・という形です。

    図4.95 タスクバーでのデフォルトのグループ化

    タスクバーでのデフォルトのグループ化


  2. 1に設定すると、すべてのダイアログがアプリケーション単位ではなく、リポジトリ単位でグループ化されます。たとえば、リポジトリAのログダイアログとコミットダイアログが開いていて、リポジトリBの変更のチェックダイアログとログダイアログが開いていた場合、Windows 7のタスクバーには2つのアプリケーションアイコングループが表示され、それぞれリポジトリごとにグループ化されます。但し、TortoiseMergeのウィンドウは、TortoiseSVNのダイアログと同じグループにはなりません。

    図4.96 タスクバーでのリポジトリ毎のグループ化

    タスクバーでのリポジトリ毎のグループ化


  3. 2に設定すると、1に設定した場合と同様にグループ化されますが、 TortoiseSVN、 TortoiseMerge、 TortoiseBlame、 TortoiseIDiff、 TortoiseUDiff のウィンドウも一緒にグループ化されます。たとえば、コミットダイアログが開いているときに変更されたファイルをダブルクリックした場合、 TortoiseMerge の差分ウィンドウが開きますが、タスクバー上ではコミットダイアログと同じアイコングループに含められます。

    図4.97 タスクバーでのリポジトリ毎のグループ化

    タスクバーでのリポジトリ毎のグループ化


  4. 3に設定すると、1に設定した場合と同様にグループ化されますが、リポジトリごとではなく作業コピーごとにグループ化されます。これは、同じリポジトリですべてのプロジェクトを管理し、プロジェクトごとに異なる作業コピーを使用している場合に便利です。

  5. 4に設定すると、2に設定した場合と同様にグループ化されますが、リポジトリごとではなく作業コピーごとにグループ化されます。

GroupTaskbarIconsPerRepoOverlay

GroupTaskbarIconsPerRepo オプションを0に設定した場合は、効果がありません(上記参照)。

このオプションを true に設定すると、 Windows 7 のタスクバーにはダイアログやウィンドウで使用されているリポジトリを識別するための、色のついた四角の小さいオーバーレイが表示されます。

図4.98 タスクバーでのグループ化にリポジトリのカラーオーバーレイが付いた様子

タスクバーでのグループ化にリポジトリのカラーオーバーレイが付いた様子


HideExternalInfo

falseに設定すると、すべてのsvn:externalsがアップデート中に個別に表示されます。

trueに設定した場合(デフォルト)、外部参照の更新情報が更新の影響を受けたかどうかのみ(何かが変更された等)が表示されます。通常のファイルやフォルダーの情報は表示されません。

HookCancelError

If this is set to true, then cancelling the dialog to approve a hook script to run will show an error dialog indicating the user cancelled.

IncludeExternals

デフォルトでは、 TortoiseSVN は常に外部参照を含めて更新を行います。これは作業コピーの一貫性の問題を回避することができます。しかし、外部参照のセットが多い場合、更新に時間がかかるようになります。この値をfalseに設定すると、デフォルトでは外部参照を含めずに更新されるようになります。外部参照を含めて更新するには、特定リビジョンへ更新...を実行するか、この値を再びtrueに設定します。

LogFindCopyFrom

ログダイアログがマージウィザードから起動されると、すでにマージされたリビジョンは灰色で表示されますが、ブランチが作成された後のリビジョンも表示されます。それらをマージすることができないため、これらのリビジョンは黒で示されています。

このオプションを true に設定すると、 TortoiseSVN はブランチが作成されたリビジョンを、そのリビジョン以降の隠されたリビジョンからも検索しようとします。これには時間がかかるので、このオプションはデフォルトで無効になっています。このオプションは、 SVN サーバーによっては動作しないことがあります(例えば、Google Code Hosting の issue #5471 を参照)。

LogMultiRevFormat

ログダイアログで複数のリビジョンが選択された時のログメッセージの書式文字列です。

書式文字列では、次のプレースホルダーを利用できます。

%1!ld!
リビジョン番号に置換されます
%2!s!
リビジョンの短いログメッセージに置換されます
LogStatusCheck

ログダイアログでは、作業コピーのリビジョンを太字で表示します。しかし、ログダイアログがパスの状態を確認する必要があります。そのため、非常に大きい作業コピーでは時間がかかります。この値を false に設定すると、この機能を無効にすることができます。

MaxHistoryComboItems

Comboboxes for URLs and paths show a history of previously used URLs/paths if possible. This settings controls how many previous items are saved and shown. The default is 25 items.

MergeLogSeparator

別のブランチからのリビジョンをマージし、マージ追跡情報が使用可能になると、マージされたリビジョンのログメッセージは、コミット時のログメッセージを構成するために収集されます。各リビジョンの個々のログメッセージは、あらかじめ定義された区切り文字列で区切られます。必要に応じて、任意の区切り文字列を指定してください。

NumDiffWarning

ここに指定された数よりも多くの項目の差分を表示しようとした場合、警告ダイアログが最小に表示されます。既定値は10です。

OldVersionCheck

TortoiseSVN は週に一度、新しいバージョンが出ているかどうかをチェックします。新しいバージョンが見つかると、コミットダイアログにリンクコントロールが表示されます。 true に設定すると、以前のようにアップデートを通知ダイアログで行うようになります。

RepoBrowserTrySVNParentPath

リポジトリブラウザーは、すべてのリポジトリの一覧を取得するために、SVNサーバーがSVNParentPathディレクティブの指定に従って作成するウェブページにアクセスを試みます。この動作を無効にするには、この値をfalseに設定して下さい。

ScintillaBidirectional

This option enables the bidirectional mode for the commit message edit box. If enabled, right-to-left language text editing is done properly. Since this feature is expensive, it is disabled by default. You can enable this by setting this value to true.

ScintillaDirect2D

このオプションは、コミットダイアログやunified差分ビューアーなどで使用されているScintillaコントロールで、Direct2Dによるアクセラレーション描画を有効にします。一部のグラフィックカードでは、文字を入力するカーソルが表示されっぱなしになるなどの不具合が発生します。このような場合、この値をfalseにすることでこの機能を無効にしてください。

OutOfDateRetry

This parameter specifies how TortoiseSVN behaves if a commit fails due to an out-of-date error:

0

The user is asked whether to update the working copy or not, and the commit dialog is not reopened after the update.

1

This is the default. The user is asked whether to update the working copy or not, and the commit dialog is reopened after the update so the user can proceed with the commit right away.

2

Similar to 1, but instead of updating only the paths selected for a commit, the update is done on the working copy root. This helps to avoid inconsistent working copies.

3

The user is not asked to update the working copy. The commit simply fails with the out-of-date error message.

PlaySound

If set to true, TortoiseSVN will play a system sound when an error or warning occurs, or another situation which is important and requires your attention. Set this to false if you want to keep TortoiseSVN quiet. Note that the project monitor has its own setting for playing sounds, which you can configure in its settings dialog.

ShellMenuAccelerators

TortoiseSVN はエクスプローラーのコンテキストメニュー項目に設定されているアクセラレータを使用します(例えば SVN コミット のアクセラレータは Alt+C ですが、エクスプローラーの コピー 項目と重複します)。 TortoiseSVN のエントリでアクセラレータを設定する必要がない場合は false に設定してください。

ShowContextMenuIcons

これは Windows エクスプローラー以外のものを使用したり、コンテキストメニューが正しく表示できないといった問題が発生したりしたときに便利です。 false に設定すると、シェルのコンテキストメニューに TortoiseSVN のアイコンが表示されなくなります。アイコンを表示する場合は、true を設定してください。

ShowAppContextMenuIcons

false に設定すると TortoiseSVN のダイアログで、コンテキストメニューのアイコンが表示されなくなります。.

ShowNotifications

Set this value to false if you don't want the project monitor to show notification popups when new commits are detected.

StyleCommitMessages

コミットダイアログとログダイアログでは、コミットメッセージに装飾(例えばボールド、イタリックなど)を使います(詳しくは 「コミットログメッセージ」 を参照してください)。これを無効にしたい場合は false に設定してください。

UpdateCheckURL

この値は、TortoiseSVN が有効なアップデートがあるかどうかを検査するためのテキストファイルをダウンロードする URL です。企業の管理者が通知するまでユーザーに TortoiseSVN をアップデートさせたくない場合などに有効です。

UseCustomWordBreak

The standard edit controls do not stop on forward slashes like they're found in paths and urls. TortoiseSVN uses a custom word break procedure for the edit controls. If you don't want that and use the default instead, set this value to 0. If you only want the default for edit controls in combo boxes, set this value to 1.

VersionCheck

TortoiseSVN は週に一回程度、使用可能な新しいバージョンがあるかどうかを確認します。 TortoiseSVN にこのチェックを行わせたくない場合は、この値を false に設定してください。

最終ステップ

第5章 プロジェクトモニター

プロジェクトモニターは、リポジトリを監視して新しいコミットがあった時に通知する便利なツールです。

プロジェクトは作業コピーのパスかリポジトリのURLで監視することができます。

プロジェクトモニターは設定された時間ごとにプロジェクトをスキャンし、新しいコミットが検出された際に通知ポップアップを表示します。また、システムトレイにアイコンを表示し、新しいコミットがあることを通知します。

Snarl

もし Snarl が実行中の場合、プロジェクトモニターは新しいコミットの検知を通知するために自動的に Snarl を利用します。

プロジェクトをモニターに追加

プロジェクトモニターを初めて使用するとき、左側のツリービューは空です。プロジェクトを追加するには、ダイアログの上にあるプロジェクトを追加と書かれたボタンをクリックしてください。

図5.1 プロジェクトモニターのプロジェクトの編集ダイアログ

プロジェクトモニターのプロジェクトの編集ダイアログ


監視するプロジェクトを追加するには、必要な項目を入力してください。プロジェクトの名称は必須ですが、それ以外の情報は任意です。

パスまたはURLのボックスが空欄の場合、フォルダーが追加されます。これはグループを監視するプロジェクトで有用です。

If you want to monitor all repositories served via the SVNParentPath directive, enter the root Url for your repositories and check the box Url points to SVNParentPath list.

ユーザー名パスワードの欄はリポジトリが匿名読み取りアクセスを許可していない場合で、認証情報がSubversion自身に格納されていない場合にのみ入力する必要があります。TortoiseSVNやその他のSVNクライアントで監視されているリポジトリにアクセスしている場合で、すでに認証情報が格納されている場合、ここは空欄にしてください。パスワードが変更された際に、プロジェクトを編集する必要はありません。

監視間隔(分) は監視する間の待ち時間を指定します。最小間隔は1分です。

チェック間隔

もし多数のユーザーが同じリポジトリを監視しており、サーバーの帯域幅に制限がある場合、リポジトリの管理者は最短の確認の間隔を svnrobots.txt で指定することができます。詳細についてはプロジェクトモニターの Web サイトで確認してください。

https://tools.stefankueng.com/svnrobots.html

モニターダイアログ

図5.2 プロジェクトモニターのメインダイアログ

プロジェクトモニターのメインダイアログ


プロジェクトモニターは監視中のプロジェクトを左のツリービューに表示します。プロジェクトは移動することが可能で、例えばあるプロジェクトを他のプロジェクトの下位に移動して、子プロジェクトや下位プロジェクトにすることができます。

右側のプロジェクトをクリックすると、プロジェクトのすべてのログメッセージが表示されます。

更新されたプロジェクトは太字で表示され、新しいコミットの回数が右側のカッコ内に表示されます。プロジェクトをクリックすると、自動的に既読になります。

主な操作

ダイアログ上部のツールバーからプロジェクトモニターの操作や設定が可能です。

今すぐチェック

設定された間隔でプロジェクトを監視している際、このボタンを押すことで直ちに全てのプロジェクトを確認します。もし更新が見つかった場合でも、全てのプロジェクトの確認が終了するまでは通知が表示されないことに注意してください。

プロジェクトを追加

監視を始めるプロジェクトを追加するダイアログを表示します。

編集

選択されたプロジェクトの設定ダイアログを表示します。

削除

確認ダイアログを表示した後、選択されたプロジェクトを削除します。

すべて確認済みにする

すべてのプロジェクトのすべてのリビジョンを確認済みにします。未確認のリビジョンを含むプロジェクトを選択後に別のプロジェクトを選択すると、自動的にすべて確認済みになることに注意してください。

Shift キーを押しながらボタンをクリックすると、すべてのエラー状態も併せてクリアされます。

すべて更新

すべてのモニター中の作業コピーについてUpdateを実行します。URLでモニターされているプロジェクトは更新されず、作業コピーのパスが設定されているもののみです。

オプション

プロジェクトモニターの動作を設定するダイアログを表示します。

第6章 SubWCRev プログラム

SubWCRev は、Subversion の作業コピーの状態を読み取り、オプションでテンプレートファイルのキーワード置換を行うのに使用する、Windows コンソールアプリケーションです。ビルドプロセスの一部として、ビルドするものに作業コピーの情報を組み込むのにしばしば使用します。典型的なのは、About ボックスにリビジョン番号を含めるのに使用することでしょう。

SubWCRev コマンドライン

SubWCRevは、デフォルトで作業コピーの外部参照を除いた全ファイルの Subversion の状態を読み込みます。検出した最も大きいコミットリビジョン番号を記録し、そのリビジョンのコミットのタイムスタンプが、それはまた、作業コピーの変更、または更新リビジョンが混在しているかどうかを記録します。リビジョン番号や更新リビジョン範囲、変更状態を標準出力に出力します。

SubWCRev.exeはコマンドラインやスクリプトから呼び出されます。制御にはコマンドラインパラメーターを使用します。

SubWCRev WorkingCopyPath [SrcVersionFile DstVersionFile] [-nmdfe]

WorkingCopyPath はチェックする作業コピーのパスです。SubWCRev は作業コピーのみで使用でき、直接リポジトリを扱えません。作業コピーへのパスは、絶対パス、相対パスどちらでもかまいません。

リポジトリリビジョンや URL といったフィールドをテキストファイルに保存するため、SubWCRev がキーワード置換を行うようにしたい場合があります。その場合、テンプレートファイル SrcVersionFile や、テンプレートの置換バージョンを含む出力ファイル DstVersionFile を用意する必要があります。

特定のファイルやパスを無視するために SubWCRev へ無視パターンを設定することができます。無視パターンは .subwcrevignore という名前のファイルから読み込まれます。ファイルは特定のパスでもワーキングコピーのルートに配置しても構いません。もしファイルが見つからない場合は、ファイルを一切無視しません。.subwcrevignore は改行で区切ることで複数のパターンを指定することができます。パターンはリポジトリのルートからの相対パスと .subwcrevignore ファイルからの相対パスにマッチします。例えば、 doc フォルダ内にある全てのファイルを無視する場合、 .subwcrevignore には以下のように記載します。

/trunk/doc
/trunk/doc/*

また、.subwcrevignore ファイルが trunk からチェックしたワーキングコピーのルートに存在する場合、以下のように記載しても同様の動きになります。

doc
doc/*

全ての画像を無視する場合、無視パターンは以下のように設定します。

*.png
*.jpg
*.ico
*.bmp

重要

Subversionと同様に、無視パターンは大文字と小文字を区別します。

ヒント

Windowsのエクスプローラーでピリオドで始まるファイルを作成するには、.subwcrevignore.と入力してください。最後にピリオドがあることに注意してください。

SubWCRev の動作に影響を与えるオプションスイッチが多数あります。複数を使用する場合は、1つにグループ化して指定する必要があります。例えば、 -n -m ではなく、 -nm と指定します。

表6.1 使用できるコマンドラインスイッチ一覧

切り替え説明
-nこのスイッチが与えられた場合、SubWCRev は ERRORLEVEL 7 で終了します。このとき作業コピーにはローカルの変更が含まれています。これは、コミットしていない変更が残っていたまま構築するのを防ぎます。
-Nこのスイッチが指定された場合、作業コピーに無視リストに入っていないバージョン管理外の項目が含まれているときは、 SubWCRev は ERRORLEVEL 11 で終了します。
-mこのスイッチが与えられた場合、SubWCRev は ERRORLEVEL 8 で終了します。このとき作業コピーはリビジョンが混ざった状態です。これは、作業コピーに一部が更新された状態で構築するのを防ぎます。
-dこのスイッチが与えられた場合、先方のファイルがすでに存在すれば SubWCRev は ERRORLEVEL 9 で終了します。
-fこのスイッチが与えられた場合、SubWCRev はフォルダーの最後に変更したリビジョンを含みます。デフォルトでは、リビジョン番号を取得する時のファイルのみ使用します。
-eこのスイッチが与えられた場合、SubWCRev は同じリポジトリからだけでなく、svn:externals が含まれているかディレクトリを検査します。
-Eこのスイッチが指定されると、 -eと同様になりますが、プロパティで指定された特定のリビジョンしか含まれていない場合は、リビジョンが特定された外部参照を無視します。そのため、リビジョンが混同することがありません。
-xこのスイッチが与えられた場合、SubWCRev はリビジョン番号を 16 進数で出力します。
-Xこのスイッチが与えられた場合、SubWCRev はリビジョン番号を「0X」で始まる十六進数で出力します。
-Fこのスイッチが指定されると、SubWCRevはすべての.subwcrevignoreファイルと含まれるすべてのファイルを無視します。
-qこのスイッチが指定された場合、 SubWCRev は標準出力に作業コピーの状態を表示せずにキーワード置換を行います。


エラーがない場合、SubWCRevは0を返します。しかしエラーが発生した場合は、標準エラー出力(コンソール)にエラーメッセージが出力されます。そして、

表6.2 SubWCRevのエラーコードの一覧

エラーコード説明
1文法エラー。1つまたは複数のコマンドライン引数が無効です。
2コマンドラインで指定されたファイルまたはフォルダーが見つかりません。
3入力ファイルが開けないか、ターゲットファイルが作成できません。
4メモリを確保できません。これは、ソースファイルが大きすぎる場合などに発生する可能性があります。
5ソースファイルのプロパティをスキャンできません。
6SVNエラー: SubWCRevが作業コピーから情報を検索しようとする際に、Subversionがエラーで復帰しました。
7作業コピーはローカルで変更されました。この場合は-nスイッチが必要です。
8作業コピーに複数のリビジョンが混在しています。この場合は-mスイッチが必要です。
9出力ファイルが既に存在しています。この場合は-dスイッチが必要です。
10指定されたパスは作業コピーやその一部を指すものではありません。
11作業コピーにバージョン管理外のファイルやフォルダーが含まれています。-Nスイッチが必要です。


のエラーが返却されます。

キーワード置換

元ファイルと先ファイルを与えると、SubWCRev は元ファイルから先ファイルへ、以下のようにキーワード置換を行いながらコピーします。

表6.3 利用可能なキーワードの一覧

キーワード説明
$WCREV$作業コピー内のもっとも新しいリビジョン番号に置き換わります。
$WCREV&$作業コピー内のもっとも新しいリビジョン番号に、&の後の値でANDを取った値に置き換わります。たとえば、$WCREV&0xFFFF$のように指定します。
$WCREV-$, $WCREV+$作業コピー内のもっとも新しいリビジョン番号に、+や-の後の値で加えたり減じたりした値に置き換わります。たとえば、$WCREV-1000$のように指定します。
$WCDATE$, $WCDATEUTC$最後にコミットされたリビジョンのコミット日時の書式を変更します。デフォルトでは、国際的な書式である yyyy-mm-dd hh:mm:ss が使用されます。また、 strftime() というように独自の書式を指定することもできます。 たとえば、 $WCDATE=%a %b %d %I:%M:%S %p$ のようになります。使用することができる書式文字のリストについては、オンライン参照を参照してください。
$WCNOW$, $WCNOWUTC$現在のシステム日時に置き換わります。ビルド時間を表示するにに使用できます。$WCDATE$ で説明したフォーマットが使われます。
$WCRANGE$作業コピーの更新リビジョンの範囲に置き換わります。もし作業コピーが単一の状態ならば、単一のリビジョンになります。作業コピーに複数のリビジョン、例えば最新版と特定のリビジョンに更新したファイルが混在している場合、リビジョンの範囲は100:200のような形式になります。
$WCMIXED$$WCMIXED?TText:FText$ は、更新リビジョンが混ざっていれば TText に、そうでなければ FText に置き換わります。
$WCMODS$$WCMODS?TText:FText$ は、ローカルで変更があれば TText に、そうでなければ FText に置き換わります。
$WCUNVER$$WCUNVER?TText:FText$ は、作業コピーにバージョン管理外の項目がある場合は TText に、そうでなければ FText に置換されます。
$WCEXTALLFIXED$全ての外部参照が特定のリビジョンに固定されている場合、 $WCEXTALLFIXED?TText:FText$TText で置き換えられ、そうでない場合は FText で置き換えられます。
$WCISTAGGED$もしリポジトリのURLがパターンを分類するタグを含んでいる場合は、 $WCISTAGGED?TText:FText$TText で置き換えられ、そうでない場合は FText で置き換えられます。
$WCURL$SubWCRev に渡した作業コピーのパスの URL に置き換わります。
$WCINSVN$$WCINSVN?TText:FText$ は、項目がバージョン管理下にあれば TText に、そうでなければ FText に置き換わります。
$WCNEEDSLOCK$$WCNEEDSLOCK?TText:FText$ は、エントリに svn:needs-lock プロパティが設定されていれば TText に、そうでなければ FText に置き換わります。
$WCISLOCKED$$WCISLOCKED?TText:FText$ は、項目がロック中の場合 TText に、そうでなければ FText に置き換わります。
$WCLOCKDATE$, $WCLOCKDATEUTC$ロック日時に置き換わります。日時のフォーマットは $WCDATE$ で説明した通りです。
$WCLOCKOWNER$ロック所有者の名前に置き換わります。
$WCLOCKCOMMENT$ロックについてのコメントに置き換わります。
$WCUNVER$$WCUNVER?TText:FText$は、作業コピーにバージョン管理外のファイルやフォルダーがある場合はTTextに、そうでなければFTextに置換されます。


SubWCRev は式のネストを直接サポートしていません。たとえば、次のような式は使用することができません。

#define SVN_REVISION "$WCMIXED?$WCRANGE$:$WCREV$$"

しかし、次のように形式を変更すれば使用することができます。

#define SVN_RANGE       $WCRANGE$
#define SVN_REV         $WCREV$
#define SVN_REVISION    "$WCMIXED?SVN_RANGE:SVN_REV$"

ヒント

以上のキーワードのうちいくつかは、作業コピー全体というよりも、単一ファイルに適用されます。そのため、単一ファイルを走査するよう SubWCRev が呼ばれたときにのみ使用する意味があります。これは $WCINSVN$, $WCNEEDSLOCK$, $WCISLOCKED$, $WCLOCKDATE$, $WCLOCKOWNER$ and $WCLOCKCOMMENT$ に適用します。

キーワード例

以下のサンプルは、テンプレートファイル内のキーワードが、どのように出力ファイルへ置換されるかを示します。

// Test file for SubWCRev

char *Revision      = "$WCREV$";
char *Revision16    = "$WCREV&0xFF$";
char *Revisionp100  = "$WCREV+100$";
char *Revisionm100  = "$WCREV-100$";
char *Modified      = "$WCMODS?Modified:Not modified$";
char *Unversioned   = "$WCUNVER?Unversioned items found:no unversioned items$";
char *Date          = "$WCDATE$";
char *CustDate      = "$WCDATE=%a, %d %B %Y$";
char *DateUTC       = "$WCDATEUTC$";
char *CustDateUTC   = "$WCDATEUTC=%a, %d %B %Y$";
char *TimeNow       = "$WCNOW$";
char *TimeNowUTC    = "$WCNOWUTC$";
char *RevRange      = "$WCRANGE$";
char *Mixed         = "$WCMIXED?Mixed revision WC:Not mixed$";
char *ExtAllFixed   = "$WCEXTALLFIXED?All externals fixed:Not all externals fixed$";
char *IsTagged      = "$WCISTAGGED?Tagged:Not tagged$";
char *URL           = "$WCURL$";
char *isInSVN       = "$WCINSVN?versioned:not versioned$";
char *needslck      = "$WCNEEDSLOCK?TRUE:FALSE$";
char *islocked      = "$WCISLOCKED?locked:not locked$";
char *lockdateutc   = "$WCLOCKDATEUTC$";
char *lockdate      = "$WCLOCKDATE$";
char *lockcustutc   = "$WCLOCKDATEUTC=%a, %d %B %Y$";
char *lockcust      = "$WCLOCKDATE=%a, %d %B %Y$";
char *lockown       = "$WCLOCKOWNER$";
char *lockcmt       = "$WCLOCKCOMMENT$";

#if $WCMODS?1:0$
#error Source is modified
#endif

// End of file

SubWCRev.exe path\to\workingcopy testfile.tmpl testfile.txt の実行後、出力ファイル testfile.txt は以下のようになります。

// Test file for SubWCRev

char *Revision = "22837";
char *Revision16 = "53";
char *Revisionp100 = "22937";
char *Revisionm100 = "22737";
char *Modified = "Modified";
char *Unversioned = "no unversioned items";
char *Date = "2012/04/26 18:47:57";
char *CustDate = "Thu, 26 April 2012";
char *DateUTC = "2012/04/26 16:47:57";
char *CustDateUTC = "Thu, 26 April 2012";
char *TimeNow = "2012/04/26 20:51:17";
char *TimeNowUTC = "2012/04/26 18:51:17";
char *RevRange = "22836:22837";
char *Mixed = "Mixed revision WC";
char *ExtAllFixed = "All externals fixed";
char *IsTagged = "Not tagged";
char *URL = "https://svn.code.sf.net/p/tortoisesvn/code/trunk";
char *isInSVN = "versioned";
char *needslck = "FALSE";
char *islocked = "not locked";
char *lockdateutc = "1970/01/01 00:00:00";
char *lockdate = "1970/01/01 01:00:00";
char *lockcustutc = "Thu, 01 January 1970";
char *lockcust = "Thu, 01 January 1970";
char *lockown = "";
char *lockcmt = "";

#if 1
#error Source is modified
#endif

// End of file

ヒント

このようなファイルがそのビルドに含まれるため、そのファイルがバージョン管理されていると思われるでしょう。バージョン管理下にあるのはテンプレートファイルであって、生成したファイルではありません。そうでなければ、 バージョンファイルを生成するたびに変更をコミットしなければなりません。そして順次バージョンファイルを更新しなければなりません。

COM インターフェイス

他のプログラムから Subversion のリビジョン情報にアクセスする必要がある場合、SubWCRev のCOM インターフェイスを使用できます。作成するオブジェクトは SubWCRev.object で、以下のメソッドをサポートしています。

表6.4 COM オートメーションのサポート

メソッド説明
.GetWCInfoこの方法は作業コピーを横断してリビジョン情報を集めます。当然、以下のメソッドを呼び出す前に、これを呼び出さなくてはなりません。第 1 引数はパスです。第 2 引数は、フォルダーのリビジョンを含める場合に true としてください。コマンドラインスイッチ -f と等価です。第 3 引数は、svn:externals を含める場合に true としてください。コマンドラインスイッチ -e と等価です。
.GetWCInfo2GetWCInfo() と同様ですが、第4引数は -E スイッチに設定した場合と等価になります。
.Revision最新コミット時の作業コピーのリビジョンです。$WCREV$と同じです。
.Date最新コミット時のコミット日時です。$WCDATE$ と同じです。
.Authorもっとも大きいコミットリビジョン番号の作者。これは変更した作業コピーを最後にコミットした人などです。
.MinRev$WCRANGE$ で参照できる更新リビジョンの最小値
.MaxRev$WCRANGE$ で参照できる更新リビジョンの最大値
.HasModificationsローカルに変更がある場合 True
.HasUnversionedバージョン管理外の項目がある場合はtrue
.UrlGetWCInfoで使用された作業コピーのリポジトリ上のURLに置き換わります。$WCURL$と同じです。
.IsSvnItem項目がバージョン管理下にあると True になります。
.NeedsLocking項目に svn:needs-lock プロパティがセットされていれば True になります。
.IsLocked項目がロックされていると True になります。
.LockCreationDateロック日時を表す文字列です。ロックされていない場合は空文字列となります。
.LockOwnerロック所有者を表す文字列です。ロックされていない場合は空文字列となります。
.LockCommentロック作成時に入力したコメントです。


以下のサンプルでは、どのようにインターフェイスを使用するべきかを示しています。

// testCOM.js - javascript file
// test script for the SubWCRev COM/Automation-object

filesystem = new ActiveXObject("Scripting.FileSystemObject");

revObject1 = new ActiveXObject("SubWCRev.object");
revObject2 = new ActiveXObject("SubWCRev.object");
revObject3 = new ActiveXObject("SubWCRev.object");
revObject4 = new ActiveXObject("SubWCRev.object");

revObject1.GetWCInfo(
    filesystem.GetAbsolutePathName("."), 1, 1);
revObject2.GetWCInfo(
    filesystem.GetAbsolutePathName(".."), 1, 1);
revObject3.GetWCInfo(
    filesystem.GetAbsolutePathName("SubWCRev.cpp"), 1, 1);
revObject4.GetWCInfo2(
    filesystem.GetAbsolutePathName("..\\.."), 1, 1, 1);

wcInfoString1 = "Revision = " + revObject1.Revision +
                "\nMin Revision = " + revObject1.MinRev +
                "\nMax Revision = " + revObject1.MaxRev +
                "\nDate = " + revObject1.Date +
                "\nURL = " + revObject1.Url + "\nAuthor = " +
                revObject1.Author + "\nHasMods = " +
                revObject1.HasModifications + "\nIsSvnItem = " +
                revObject1.IsSvnItem + "\nNeedsLocking = " +
                revObject1.NeedsLocking + "\nIsLocked = " +
                revObject1.IsLocked + "\nLockCreationDate = " +
                revObject1.LockCreationDate + "\nLockOwner = " +
                revObject1.LockOwner + "\nLockComment = " +
                revObject1.LockComment;
wcInfoString2 = "Revision = " + revObject2.Revision +
                "\nMin Revision = " + revObject2.MinRev +
                "\nMax Revision = " + revObject2.MaxRev +
                "\nDate = " + revObject2.Date +
                "\nURL = " + revObject2.Url + "\nAuthor = " +
                revObject2.Author + "\nHasMods = " +
                revObject2.HasModifications + "\nIsSvnItem = " +
                revObject2.IsSvnItem + "\nNeedsLocking = " +
                revObject2.NeedsLocking + "\nIsLocked = " +
                revObject2.IsLocked + "\nLockCreationDate = " +
                revObject2.LockCreationDate + "\nLockOwner = " +
                revObject2.LockOwner + "\nLockComment = " +
                revObject2.LockComment;
wcInfoString3 = "Revision = " + revObject3.Revision +
                "\nMin Revision = " + revObject3.MinRev +
                "\nMax Revision = " + revObject3.MaxRev +
                "\nDate = " + revObject3.Date +
                "\nURL = " + revObject3.Url + "\nAuthor = " +
                revObject3.Author + "\nHasMods = " +
                revObject3.HasModifications + "\nIsSvnItem = " +
                revObject3.IsSvnItem + "\nNeedsLocking = " +
                revObject3.NeedsLocking + "\nIsLocked = " +
                revObject3.IsLocked + "\nLockCreationDate = " +
                revObject3.LockCreationDate + "\nLockOwner = " +
                revObject3.LockOwner + "\nLockComment = " +
                revObject3.LockComment;
wcInfoString4 = "Revision = " + revObject4.Revision +
                "\nMin Revision = " + revObject4.MinRev +
                "\nMax Revision = " + revObject4.MaxRev +
                "\nDate = " + revObject4.Date +
                "\nURL = " + revObject4.Url + "\nAuthor = " +
                revObject4.Author + "\nHasMods = " +
                revObject4.HasModifications + "\nIsSvnItem = " +
                revObject4.IsSvnItem + "\nNeedsLocking = " +
                revObject4.NeedsLocking + "\nIsLocked = " +
                revObject4.IsLocked + "\nLockCreationDate = " +
                revObject4.LockCreationDate + "\nLockOwner = " +
                revObject4.LockOwner + "\nLockComment = " +
                revObject4.LockComment;

WScript.Echo(wcInfoString1);
WScript.Echo(wcInfoString2);
WScript.Echo(wcInfoString3);
WScript.Echo(wcInfoString4);

C# から SubWCRev の COM オブジェクトを使用する方法の例を次に示します。

using LibSubWCRev;
SubWCRev sub = new SubWCRev();
sub.GetWCInfo("C:\\PathToMyFile\\MyFile.cc", true, true);
if (sub.IsSvnItem == true)
{
    MessageBox.Show("バージョン管理対象");
}
else
{
    MessageBox.Show("バージョン管理対象外");
}

第7章 IBugtraqProvider インターフェイス

シンプルな bugtraq: プロパティを使用するよりも、より密接に課題管理システムと統合するため、TortoiseSVN は COM プラグインを使用できます。課題管理システムから直接情報を取得できるプラグインとともに使用することでユーザーとやりとりし、TortoiseSVN への未クローズ問題の情報提供やユーザーが入力したログメッセージの検証、さらに問題のクローズといったコミット完了後の処理実行までも行うことができます。

私たちは、各プログラミング言語で COM オブジェクトを実装する方法について、情報やチュートリアルを提供することはできませんが、 C++/ATL と C# で書かれたプラグインのサンプルを、私たちのリポジトリの contrib/issue-tracker-plugins フォルダーで提供しています。そのフォルダーからも、プラグインを作成するのに必要なインクルードファイルを入手することができます(リポジトリにアクセスする方法は、 「ライセンス」 を参照してください)。

重要

プラグインは32ビット版と64ビット版の両方を提供する必要があります。 TortoiseSVN の x64 バージョンでは32ビットのプラグインを使用することができませんし、その逆も同様です。

命名規則

もし TortoiseSVN 用の問題追跡プラグインをリリースするならば、Tortoise<何とか>という名前は使用しないでください。私たちはTortoiseというプレフィックスを、 Windows に統合するバージョン管理クライアントのために予約しておきたいのです。例えば、TortoiseCVS や TortoiseSVN、TortoiseHg、TortoiseGit、TortoiseBzr など、いずれもバージョン管理クライアントです。

Tortoise クライアントのプラグインは、Turtle<何とか> と命名してください。 <何とか> は、接続する問題解決システムの名前になります。または、 Turtle と似た発音で、頭文字が異なる言葉を使用しても結構です。例えば、

  • Gurtle - Google code のための問題追跡プラグイン

  • TurtleMine - Redmine のための問題追跡プラグイン

  • VurtleOne - VirsionOne のための問題追跡プラグイン

が良い例です。

IBugtraqProvider インターフェイス

TortoiseSVN 1.5 以降では、 IBugtraqProvider インターフェイスを実装するプラグインを使用することができます。このインターフェイスでは、プラグインが課題追跡を操作するために使用できるいくつかのメソッドが用意されています。

HRESULT ValidateParameters (
  // Parent window for any UI that needs to be
  // displayed during validation.
  [in] HWND hParentWnd,

  // The parameter string that needs to be validated.
  [in] BSTR parameters,

  // Is the string valid?
  [out, retval] VARIANT_BOOL *valid
);

このメソッドは、ユーザーがプラグインを追加・設定できる設定ダイアログから呼び出されます。 parameters の文字列は、プラグインに追加情報(例えば問題追跡ツールのURLや、ログイン情報など)を伝えるために使用することができます。プラグインは parameters の文字列を検査し、文字列が有効でなければエラーダイアログを表示する必要すべきです。 hParentWnd はプラグインが表示する各ダイアログの親ウィンドウとして使用します。プラグインは、 parameters の文字列の検査に成功した場合は、 TRUE を返さなければなりません。プラグインが FALSE を返すと、設定ダイアログはユーザーが作業コピーのパスにプラグインを追加することを許可しません。

HRESULT GetLinkText (
  // Parent window for any (error) UI that needs to be displayed.
  [in] HWND hParentWnd,

  // The parameter string, just in case you need to talk to your
  // web service (e.g.) to find out what the correct text is.
  [in] BSTR parameters,

  // What text do you want to display?
  // Use the current thread locale.
  [out, retval] BSTR *linkText
);

プラグインは、TortoiseSVN のコミットダイアログでプラグインを起動するためのボタン、例えば「問題を選択」や「チケットを選択」などの文字列を提供することができます。文字列がボタン内に収まらないほど長くならないように注意してください。このメソッドがエラーを返した場合(たとえば E_NOTIMPL を返した場合)は、ボタンにはデフォルトのテキストが使用されます。

HRESULT GetCommitMessage (
  // Parent window for your provider's UI.
  [in] HWND hParentWnd,

  // Parameters for your provider.
  [in] BSTR parameters,
  [in] BSTR commonRoot,
  [in] SAFEARRAY(BSTR) pathList,

  // The text already present in the commit message.
  // Your provider should include this text in the new message,
  // where appropriate.
  [in] BSTR originalMessage,

  // The new text for the commit message.
  // This replaces the original message.
  [out, retval] BSTR *newMessage
);

これは、プラグインの中心的なメソッドです。このメソッドは、 TortoiseSVN のコミットダイアログでユーザーがプラグイン用のボタンをクリックしたときに呼び出されます。

parameters の文字列は、設定ダイアログでプラグインの設定を行った際に、ユーザーが設定した文字列です。通常は、プラグインはこの情報を、問題追跡ツールの URL を指定したり、ログイン情報を指定したりするために使用します。

commonRoot の文字列は、コミットダイアログを表示するために選択されたすべての項目の親のパスが入っています。これは、ユーザーがコミットダイアログで選択した全項目のルートパスではないことに注意してください。ブランチ/タグダイアログの場合、これはコピーされるパスです。

pathList パラメーターは、ユーザーがコミットのために選択したパス(文字列)の配列をが含まれています。

originalMessageパラメーターは、コミットダイアログのログメッセージボックスに入力したテキストが含まれています。ユーザーはまだ何もテキストを入力していない場合、この文字列は空になります。

newMessageに返された文字列は、コミットダイアログのログメッセージのエディットボックスにコピーされ、すでに何が書かれていてもそれを置き換えます。プラグインが originalMessage を変更しなかった場合、ここでは同じ文字列を返却する必要があります。そうしなければ、ユーザーが入力した文字列は失われます。

IBugtraqProvider2 インターフェイス

TortoiseSVN 1.6 では、プラグイン用により機能的な、新しいインターフェイスを追加しました。この IBugtraqProvider2 インターフェイスは IBugtraqProvider を継承しています。

HRESULT GetCommitMessage2 (
  // Parent window for your provider's UI.
  [in] HWND hParentWnd,

  // Parameters for your provider.
  [in] BSTR parameters,
  // The common URL of the commit
  [in] BSTR commonURL,
  [in] BSTR commonRoot,
  [in] SAFEARRAY(BSTR) pathList,

  // The text already present in the commit message.
  // Your provider should include this text in the new message,
  // where appropriate.
  [in] BSTR originalMessage,

  // You can assign custom revision properties to a commit
  // by setting the next two params.
  // note: Both safearrays must be of the same length.
  //       For every property name there must be a property value!

  // The content of the bugID field (if shown)
  [in] BSTR bugID,

  // Modified content of the bugID field
  [out] BSTR * bugIDOut,

  // The list of revision property names.
  [out] SAFEARRAY(BSTR) * revPropNames,

  // The list of revision property values.
  [out] SAFEARRAY(BSTR) * revPropValues,

  // The new text for the commit message.
  // This replaces the original message
  [out, retval] BSTR * newMessage
);

このメソッドは、TortoiseSVNのコミットダイアログでユーザーがプラグインボタンをクリックした時に呼び出されます。このメソッドは、 GetCommitMessage() の代わりに呼び出されます。ここで使用されるパラメーターについては、 GetCommitMessageのドキュメントを参照してください。

commonURLパラメーターは、コミットダイアログを表示するために選択されたすべての項目の親URLです。これは基本的には commonRoot パスのURLです。

bugID パラメーターは、 bug-ID フィールドの内容が内容が含まれています(bugtraq:messageプロパティの設定により、表示される場合)。

返却パラメーターbugIDOutは、メソッドから戻るときにbug-ID フィールドを埋めるために使用されます。

revPropNamesrevPropValues 出力パラメーターには、コミット時に設定されるリビジョンのプロパティの名前と値のペアを入れることができます。プラグインは、両方の配列が同じサイズであることを確認する必要があります。revPropNamesには各プロパティの名前、revPropValuesには関連付けられた値を格納します。リビジョンのプロパティが設定される存在しない場合、プラグインが空の配列を返す必要があります。

HRESULT CheckCommit (
  [in] HWND hParentWnd,
  [in] BSTR parameters,
  [in] BSTR commonURL,
  [in] BSTR commonRoot,
  [in] SAFEARRAY(BSTR) pathList,
  [in] BSTR commitMessage,
  [out, retval] BSTR * errorMessage
);

このメソッドは、コミットダイアログが閉じられ、コミットが開始される直前に呼び出されます。プラグインは、コミットのために選択されたファイル・フォルダーや、ユーザーが入力したコミットメッセージを検証するためにこのメソッドを使用することができます。パラメーターにはGetCommitMessage2()の場合と同様で、commonURL についてはすべてのチェックした項目であり、 commonRoot はすべてのチェックした項目のルートパスであるということです。

ブランチ/タグダイアログの場合、 commonURL はコピー元のURLであり、 commonRoot はコピー先のURLが設定されています。

出力パラメーター errorMessage は、TortoiseSVNがユーザーに示すエラーメッセージを設定し、コミットを開始する場合は空にする必要があります。エラーメッセージを返した場合、 TortoiseSVN はダイア​​ログにエラー文字列を表示し、ユーザーが間違いを訂正できるようにコミットダイアログは開いたままにします。したがってプラグインはユーザーに、何が間違っているのかと、それを修正する方法を通知する必要があります。

HRESULT  OnCommitFinished (
  // Parent window for any (error) UI that needs to be displayed.
  [in] HWND hParentWnd,

  // The common root of all paths that got committed.
  [in] BSTR commonRoot,

  // All the paths that got committed.
  [in] SAFEARRAY(BSTR) pathList,


  // The text already present in the commit message.
  [in] BSTR logMessage,

  // The revision of the commit.
  [in] ULONG revision,


  // An error to show to the user if this function
  // returns something else than S_OK
  [out, retval] BSTR * error
);

このメソッドは、コミットに成功した時に呼び出されます。プラグインは、例えば、選択した問題を閉じるか、または問題にコミットに関する情報を追加する場合は、このメソッドを使用することができます。パラメーターは、 GetCommitMessage2 の場合と同じです。

HRESULT HasOptions(
  // Whether the provider provides options
  [out, retval] VARIANT_BOOL *ret
);

このメソッドは、ユーザーがプラグインを設定する設定ダイアログから呼び出されます。プラグインがShowOptionsDialogで独自の設定ダイアログを提供している場合 、TRUE を返し、それ以外の場合は FALSE を返す必要があります。

HRESULT ShowOptionsDialog(
  // Parent window for the options dialog
  [in] HWND hParentWnd,

  // Parameters for your provider.
  [in] BSTR parameters,

  // The parameters string
  [out, retval] BSTR * newparameters
);

このメソッドは設定ダイアログ上で、 HasOptions が TRUE を返したときに表示される「オプション」ボタンをユーザーがクリックした時に呼び出されます。プラグインは動作を容易に設定させるために、オプションダイアログを表示することができます。

parameters 文字列には、すでに設定/入力されているプラグインのパラメーターの文字列が含まれています。

newparameters 出力パラメーターには、プラグインが、オプションダイアログで収集した情報から構築されたパラメーター文字列を設定する必要があります。その paramameters 文字列は、他のすべての IBugtraqProvider と IBugtraqProvider2 のメソッドに渡されます。

付録A よくある質問(FAQ)

TortoiseSVN は常に開発が行われているため、ドキュメントを完全に最新の状態に維持するのは困難なこともあります。私たちは TortoiseSVN のメーリングリストである https://groups.google.com/forum/#!forum/tortoisesvnhttps://groups.google.com/forum/#!forum/tortoisesvn-dev でよく尋ねられる質問を含む オンラインFAQ を整備しています。

回答が得られていない質問がある場合は、次のメーリングリストのいずれかに質問をしてください。

付録B こんなときは……

この付録には TortoiseSVN を使用する際の問題や疑問に対する解決法があります。

大量のファイルの同時移動・コピー

ひとつのファイルを移動・コピーするには、TortoiseSVN名前を変更... でできます。しかし、この方法でたくさんのファイルを移動・コピーするには、とても遅くたくさん手を動かさなければなりません。

お勧めの方法は、ファイルを新しい場所に右ドラッグすることです。単にファイルの上で右クリックし、マウスボタンを押したままにします。その後、新しい場所にファイルをドラッグし、マウスボタンを離します。コンテキストメニューが表示されるので、コンテキストメニューSVN バージョン管理下の項目をここにコピーするコンテキストメニューSVN バージョン管理下の項目をここに移動する を選択します。

図B.1 The TortoiseSVN right drag context menu for moving files

The TortoiseSVN right drag context menu for moving files


ログメッセージの入力の強制

ログメッセージを空にしてコミットするのを防ぐには、2つ方法があります。TortoiseSVN 特有の方法と、Subversion クライアント全てで使用できる方法ですがサーバーに直接アクセスできる必要があります。

サーバー上のフックスクリプト

リポジトリサーバーに直接アクセスできるのならば、コミット時のログメッセージが、空だったり短すぎると拒否するような pre-commit フックスクリプトをインストールすればいいのです。

サーバーのリポジトリフォルダーには、hooks というフックスクリプトのサンプルがあるサブフォルダーがあります。pre-commit.tmpl ファイルは、ログメッセージがなかったり短すぎる場合にコミットを拒否するサンプルスクリプトです。このファイルにはこのスクリプトをインストールし使用する方法も書かれています。このファイルの指示に従ってください。

TortoiseSVN 以外に他の Subversion クライアントも使用するようなときに、この方法をお勧めします。欠点は、コミットがサーバーによって拒否され、ユーザーにエラーメッセージが返ることです。クライアントには、コミットの前に拒否されるかどうかわかりません。ログメッセージが十分長くなるまで、TortoiseSVN が OK ボタンを無効にするようにしたければ、以下で説明する方法で行ってください。

プロジェクトプロパティ

TortoiseSVN は機能を制御するのにプロパティを使用します。そういったプロパティのひとつに、tsvn:logminsize プロパティがあります。

フォルダーにこのプロパティをセットすると、プロパティで指定した長さ以上ログメッセージを入力するまで、TortoiseSVN はコミットダイアログの OK ボタンを無効にします。

これらのプロジェクトプロパティの詳細については、 「プロジェクト設定」 を参照してください。

リポジトリからの選択したファイルの更新

通常、作業コピーを更新するのに、TortoiseSVN更新 を使用します。しかし、同僚が、(同時に他のファイルのいずれの変更もマージせず) 追加だけ行った新しいファイルのみを取り出したい場合、違ったアプローチを取る必要があります。

TortoiseSVN変更をチェック を使用してください。それから、リポジトリに対して行われた変更を見るのに、リポジトリをチェック をクリックしてください。ローカルに更新したいファイルを選択し、コンテキストメニューから更新してください。

リポジトリのリビジョンのロールバック(取り消し)

リビジョンログダイアログの使用

いくつかのリビジョンでの変更を取り消す場合、断然簡単なのはリビジョンログダイアログを使用する方法です。

  1. 変更を取り消す必要のあるファイルやフォルダーを選択してください。すべての変更を取り消す場合は、トップレベルフォルダーを選択してください。

  2. TortoiseSVNログを表示 を選択してリビジョン一覧を表示します。参照したいリビジョンを表示させるために、必要に応じてすべて取得次の100件を使用してください。

  3. 変更を取り消したいリビジョンを選択してください。リビジョン範囲を取り消すのなら、最初のものを選択してから、Shift キーを押したまま最後のものを選択してください。複数のリビジョンやその範囲を選択する場合は、Ctrlキーを押しながらリビジョンを選択してください。選択したリビジョンで右クリックし、コンテキストメニューこのリビジョンにおける変更を取り消す を選択してください。

  4. もしくは、もっと古いリビジョンを HEAD リビジョンにしたい場合は、選択したリビジョンの上で 右クリック し、コンテキストメニューこのリビジョンに戻す を選択してください。これにより、選択したリビジョン以降の変更がすべて取り消されます。

変更の取り消しは作業コピーに対して行われます。結果を確認し、変更をコミットしてください。

マージダイアログの使用

リビジョン番号のリストを入力して指定する場合、マージダイアログを使用することもできます。前の方法では暗黙にマージが使用されましたが、この方法では明示的にマージを使用します。

  1. 作業コピーで TortoiseSVNマージ を選択してください。

  2. マージタイプダイアログの中で、リビジョンの範囲をマージを選択してください。

  3. マージ元のURLフィールドに、作業コピーのフォルダーに対応するリポジトリの完全なURLを入力してください。デフォルトでURLが入力されているはずです。

  4. マージするリビジョンの範囲フィールドに、変更を取り消したいリビジョン番号のリストを入力してください(または、上記の方法と同様にログダイアログを使用して選択してください)。

  5. 逆マージチェックボックスがチェックされていることを確認してください。

  6. マージオプションダイアログはデフォルトのままにしてください。

  7. マージをクリックするとマージを完了します。

作業コピー内の変更が取り消されました。結果が期待通りかどうかを確認し、変更をコミットしてください。

svndumpfilter の使用

TortoiseSVN は決してデータを失わないため、ロールバックしたリビジョンはまだ中間リビジョンとして存在しています。 HEAD リビジョンが以前の状態になっただけです。すべての痕跡を削除して、リポジトリから完全に見えなくする場合は、もっと極端な手段を採らねばなりません。これは本当に十分な理由がなければ、お勧めしません。考えられる理由としては、誰かが公開リポジトリに機密文書をコミットしたなどでしょう。

リポジトリからデータを削除する唯一の方法は、Subversion コマンドラインツールの svnadmin を使うことです。この実行方法の説明は、Repository Maintenance にあります。

ファイルやフォルダーに対して 2 リビジョン間の比較

項目の履歴にある2つのリビジョン(例えば同じファイルのリビジョン100と200)を比較したい場合、単純に TortoiseSVNログを表示 を使用して、そのファイルのリビジョンの履歴を表示します。そこで、比較したい2つのリビジョンを取り出し、コンテキストメニューリビジョンを比較 を使用してください。

2つの別ツリーにある同じ項目(例えばトランクとブランチ)を比較したい場合、両方のツリーを開くのにリポジトリブラウザーを使用できます。それから同じ場所のファイルを選択し、コンテキストメニューリビジョンの比較 を使用してください。

2つのツリーでどこが変更されか(例えばトランクとタグ付けされたリリース)を比較したい場合、TortoiseSVNリビジョングラフ を使用できます。比較する2つのノードを選択し、コンテキストメニューHEADリビジョンを比較 を使用してください。これで変更されたファイルの一覧が表示され、変更の詳細を見るよう特定のファイルを選択できます。また、変更したファイルすべてを含むツリー構造をエクスポートしたり、単純に変更したファイルをすべて表示したりできます。詳細は 「フォルダーの比較」 をご覧ください。その他には、変更の全サマリを最小コンテキストで見るのに、コンテキストメニューHEADリビジョンに対するUnified形式での差分 を使用してください。

共通のサブプロジェクトを含める

作業コピーに別プロジェクト、たとえばライブラリのコードを含めたくなることがあると思います。実現する方法が少なくとも4つあります。

svn:externals の使用

プロジェクトにあるフォルダーに svn:externals プロパティをセットしてください。このプロパティは複数行からなります。各行には、共通コードをチェックアウトするフォルダーとして使用するサブフォルダー名と、そこにチェックアウトするリポジトリの URL を記述します。もっと詳しいことは 「外部項目」 をご覧ください。

新しいフォルダーをコミットしてください。そこで更新すると、Subversion は各リポジトリから作業コピーに、プロジェクトのコピーを取得します。必要なサブフォルダーは自動的に作成されます。メインの作業コピーを更新する度にも、全外部プロジェクトの最新版を取得します。

外部プロジェクトが同じリポジトリにある場合、メインプロジェクトの変更をコミットすると、変更がコミットリストに含まれます。

もし異なるリポジトリに存在する外部プロジェクトに変更を加えた場合、メインプロジェクトをコミットする際に外部プロジェクトに加えた変更も併せて表示されます。しかし、これらの外部プロジェクトへの変更は別々にコミットしなければなりません。

説明した3つの方法のうち、クライアント側でセットアップが必要ないものは1つだけです。一度フォルダープロパティに外部参照を設定すると、すべてのクライアントで、更新時に設定したフォルダーを取得します。

ネストした作業コピーの使用

プロジェクトに共通コードを格納する新しいフォルダーを作成してください。ですがまだ Subversion に追加しないでください。

新しいフォルダーで TortoiseSVNチェックアウト を選択し、共通コードのコピーをここにチェックアウトしてください。これで、メインの作業コピーの中に独立した作業コピーをネストさせます。

2つの作業コピーは独立しています。親作業コピーの変更をコミットした際には、ネストした作業コピーの変更は無視されます。同様に、親作業コピーを更新した際には、ネストした作業コピーは更新されません。

相対位置の使用

同じ共通コアコードを複数のプロジェクトで使用するが、使用するプロジェクトごとに複数の同じ作業コピーを維持したくなければ、使用するその他のプロジェクトと関連する、独立した場所にチェックアウトできます。例えば以下のようになります。

C:\Projects\Proj1
C:\Projects\Proj2
C:\Projects\Proj3
C:\Projects\Common

その上で、共通コードには相対パスで参照してください。例: ..\..\Common\DSPcore

プロジェクトが関係ない場所に散乱している場合、以下のバリエーションを使用できます。共通コードを一カ所に置き、その場所をプロジェクト内でハードコードしているものになるようドライブレター変換を使用します。例えば、共通コードを D:\Documents\FrameworkC:\Documents and Settings\{login}\My Documents\framework にチェックアウトし、

SUBST X: "D:\Documents\framework"

として自分のソースコード内で使用するドライブマッピングを作成してください。自分のコードでは絶対パスを指定できます。

#include "X:\superio\superio.h"

この方法は、全てが PC の環境でしか利用できません。また、必要なドライブマッピングを明文化しておかないと、チームはファイルがどこにあるか分からなくなってしまいます。はっきり言って、この方法は閉じた開発環境向けで、一般的にはお勧めできません。

プロジェクトをリポジトリに追加

最も簡単な方法は、単に自分のプロジェクトにおける作業コピーの中にサブフォルダーに追加することでしょう。しかし、この外部プロジェクトの更新やアップグレードを手作業で行わなければならないという欠点があります。

アップグレードしやすくするよう、 ToretoiseSVN にはエクスプローラーの右ドラッグコンテキストメニューのコマンドを用意しています。新しいバージョンの外部ライブラリを展開したフォルダーを、作業コピー内のフォルダーに右ドラッグして、コンテキストメニューSVN ここにあるベンダーブランチを更新を実行するだけです。これでコピー先のフォルダーに新しいファイルがコピーされます。自動的に新規ファイルは追加され、新しいバージョンで無くなったファイルは削除されます。

リポジトリへのショートカットの作成

特定の場所をリポジトリブラウザーでたびたび開く必要があるのなら、TortoiseProc の自動化インターフェイスを使用して、デスクトップショートカットを作成できます。単に新しいショートカットを作成し、項目の場所を以下のようにセットしてください。

TortoiseProc.exe /command:repobrowser /path:"url/to/repository"

もちろん本当のリポジトリ URL を含める必要があります。

バージョン管理外のファイルの無視

たまたま無視するはずのファイルを追加してしまったら、どのようにしたらそのファイルを失わずにバージョン管理下から外せるのでしょうか? おそらくプロジェクトの一部ではない、しかし長時間かけてお好みに設定した IDE の設定ファイルがあることでしょう。

まだ追加をコミットしていない場合は、 TortoiseSVNの追加を元に戻す... を使用することで追加を取り消すことができます。その後、誤って後で再び追加しないように、無視リストにファイル(複数可)を追加する必要があります。

ファイルがリポジトリ内に既にある場合は、リポジトリから削除する必要がありますし、無視リストに追加します。幸いなことに TortoiseSVN にはこれを行うための便利なショートカットがあります。 TortoiseSVNバージョン管理から除外し、無視リストに追加 を実行すれば、まずリポジトリからファイルやフォルダーを削除するようにマークし、ローカルコピーを保持します。そして、アイテムを無視リストに追加し、誤って再び Subversion に追加されないようにします。この後、必要があるのは親フォルダーをコミットすることだけです。

作業コピーをバージョン管理外に

作業コピーから.svnディレクトリを削除し、通常のフォルダーツリーにする場合、これを単純にエクスポートできます。どのようにするかは、「作業コピーをバージョン管理外へ」をご覧ください。

作業コピーの削除

不要になった作業コピーをきれいに削除するには、どのようにすればよいのでしょうか。簡単です。 Windows エクスプローラーで、フォルダーごと削除するだけです。作業コピーはプライベートな存在であり、内部で自己完結しています。 Windows エクスプローラーで作業コピーを削除しても、リポジトリ内のデータにはまったく影響しません。

付録C 管理者向けの便利な小技

この付録には TortoiseSVN を複数のコンピュータに配置する上での 問題や疑問に対する解決法があります。

グループポリシーでの TortoiseSVN のデプロイ

TortoiseSVN インストーラーは MSI ファイルとなっています。これはドメインコントローラのグループポリシーに対して MSI ファイルを追加する際に、問題が発生しないことを意味しています。

Microsoft のナレッジベース 314934 http://support.microsoft.com/?kbid=314934 で得られる方法はよくまとまっています。

TortoiseSVNは、ユーザーの構成ではなくコンピュータの構成の下にインストールする必要があります。TortoiseSVNはCRTとMFC DLL 必要としており、それはユーザーごとではなくコンピュータごとに配布されるからです。どうしてもユーザーごとにTortoiseSVNをインストールする必要がある場合は、TortoiseSVNをインストールするすべてのコンピュータに対して、Microsoft製MFCとCRTのパッケージのバージョン12をインストールする必要があります。

すべてのユーザーを同じ設定にしたいのであれば、 MSI ファイルをカスタマイズすることができます。 TSVN の設定は、レジストリの HKEY_CURRENT_USER\Software\TortoiseSVN 以下に登録され、一般的な Subversion の設定は、 %APPDATA%\Subversion にある設定ファイルに記述されています。 MSI のカスタマイズ方法については、 MSI 改変フォーラムに行くか、ウェブで MSI の改変を検索してください。

更新チェックのリダイレクト

TortoiseSVN は数日おきに、新しいバージョンが出ているかをばチェックします。使用可能な新しいバージョンがある場合は、コミットダイアログに通知が表示されます。

図C.1 アップグレードの通知を表示するコミットダイアログ

アップグレードの通知を表示するコミットダイアログ

自分のドメインにいるたくさんのユーザーに対して責任を負っているなら、確認をとった特定バージョンのみ使用させ、最新版をインストールさせたくないでしょう。おそらくユーザーがすぐにアップグレードしないよう、アップグレードダイアログを表示させたくないことでしょう。

TortoiseSVN 1.4.0 以降では、イントラネットのサーバーにその更新チェックのリダイレクトすることができます。レジストリキーのHKCU\Software\TortoiseSVN\UpdateCheckURL (文字列値)をご使用のイントラネット内のテキストフ​​ァイルを指すURLに設定してください。そのテキストフ​​ァイルには、次の形式である必要があります。

1.9.1.6000
TortoiseSVN の新しいバージョンが使用可能です。
http://192.168.2.1/downloads/TortoiseSVN-1.9.1.6000-svn-1.9.1.msi

ファイルの最初の行はバージョン文字列です。TortoiseSVNのインストールパッケージの正確なバージョン文字列と一致していることを確認する必要があります。2行目は、コミットダイアログに表示する文字列です。任意の文字列を設定することができます。ただし、コミットダイアログの容量が制限されていることに注意してください。メッセージが長すぎると、切り捨てられてしまいます。3行目は、新しいインストールパッケージへのURLです。コミットダイアログでカスタムメッセージラベルをユーザーがクリックすると、このURLが開かれます。また、単に直接ではなく、MSIファイルのWebページを指すことができます。 URLは、Webページを指定した場合には、そのページが開かれ、ユーザーに表示される、デフォルトのWebブラウザーで開かれます。 MSIパッケージを指定した場合、ブラウザーはローカルでMSIファイルを保存するようにユーザーに要求します。

SVN_ASP_DOT_NET_HACK 環境変数の設定

何でもかんでもすべてを選択してしまうユーザーに多くの問題と混乱を発生させたので、バージョン1.4.0以降では、TortoiseSVNのインストーラーがSVN_ASP_DOT_NET_HACK 環境変数を設定するオプションを提供していません。

しかし、この機能はTortoiseSVNやその他のSVNクライアントで利用できます。有効にするには、WindowsのASPDOTNETHACKという名前の環境変数を1に設定してください。実際には、この環境変数の値は意識されません。環境変数があれば機能が有効になります。

重要

なお、これは未だに VS.NET2002 を使用している人にのみ必要です。 Visual Studio のそれ以降のバージョンでは、この対策は必要ありません。それよりも古いツールを使用している人は、使用をやめるべきです!

コンテキストメニューエントリの無効化

バージョン 1.5.0 以降では、TortoiseSVN はコンテキストメニューエントリを無効(実際には非表示)にできます。コンパイル上の理由だけではなく、この機能は気軽につかうべきではありませんので、GUI は用意されておらず、レジストリを直接操作する必要があります。特定のコマンドを使うべきでないユーザーがいる場合に、そのコマンドを無効にできます。なお、エクスプローラー のコンテキストメニューエントリを隠すだけで、他の方法では実行することができます。例えば、コマンドラインや、TortoiseSVN 自体の他のダイアログから実行する場合などです。

コンテキストメニューを表示する際の情報を保持しているレジストリキーは、HKEY_CURRENT_USER\Software\TortoiseSVN\ContextMenuEntriesMaskLowHKEY_CURRENT_USER\Software\TortoiseSVN\ContextMenuEntriesMaskHigh です。

それぞれのレジストリエントリは、特定のメニューエントリに対応する各ビットの DWORD 値です。ビットをセットすると対応するメニューエントリが無効になります。

表C.1 メニューエントリとその値

メニューエントリ
0x0000000000000001チェックアウト
0x0000000000000002更新
0x0000000000000004コミット
0x0000000000000008追加
0x0000000000000010変更の取り消し
0x0000000000000020クリーンアップ
0x0000000000000040競合の解決
0x0000000000000080切り替え
0x0000000000000100インポート
0x0000000000000200エクスポート
0x0000000000000400ここにリポジトリを作成
0x0000000000000800ブランチ・タグ
0x0000000000001000マージ
0x0000000000002000削除
0x0000000000004000名前変更
0x0000000000008000特定リビジョンへ更新
0x0000000000010000差分
0x0000000000020000ログの表示
0x0000000000040000競合の編集
0x0000000000080000再配置
0x0000000000100000変更をチェック
0x0000000000200000無視
0x0000000000400000リポジトリブラウザー
0x0000000000800000注釈履歴
0x0000000001000000パッチを作成
0x0000000002000000パッチの適用
0x0000000004000000リビジョングラフ
0x0000000008000000ロック
0x0000000010000000ロックの削除
0x0000000020000000プロパティ
0x0000000040000000URL と差分表示
0x0000000080000000バージョン管理外の項目を削除
0x0000000100000000すべてマージ
0x0000000200000000過去のバージョンと差分
0x0000000400000000貼り付け
0x0000000800000000作業コピーをアップグレード
0x0000001000000000差分元として選択
0x0000002000000000次のファイルと比較: 「ファイル名」
0x0000004000000000Unified形式の差分
0x2000000000000000設定
0x4000000000000000ヘルプ
0x8000000000000000TortoiseSVN について


例: 再配置バージョン管理外の項目を削除する設定 といったメニューエントリを無効にするには、以下のように値を設定してください。

  0x0000000000080000
+ 0x0000000080000000
+ 0x2000000000000000
= 0x2000000080080000

下位の DWORD 値 (0x80080000) は HKEY_CURRENT_USER\Software\TortoiseSVN\ContextMenuEntriesMaskLow に格納せねばならず、上位の DWORD 値 (0x20000000) は HKEY_CURRENT_USER\Software\TortoiseSVN\ContextMenuEntriesMaskHigh に格納せねばなりません。

メニューエントリを、再度有効にするには、単純に2つのレジストリキーを削除してください。

付録D TortoiseSVN の自動化

すべての TortoiseSVN のコマンドがコマンドライン引数で制御できます。バッチファイルで自動化したり、テキストエディターなどの他のプログラムから、特定のコマンドやダイアログを起動したりすることができます。

重要

TortoiseSVN はあくまで GUI クライアントです。ここでは TortoiseSVN のダイアログを表示させて、ユーザーに入力を促す方法を説明します。入力を伴わずに操作をするスクリプトを書くのであれば、公式の Subversion コマンドラインクライアントを使用してください。

TortoiseSVNのコマンド

TortoiseSVN の GUI プログラムは TortoiseProc.exe から呼び出します。実行するコマンドは /command:<コマンド名> 引数で指定し、 <コマンド名> の部分にはコマンド名を指定します。ほとんどのコマンドでは /path:"<パス名>" 引数でパスを指定する必要があります。下記の表で、 /command:<コマンド名> で指定するコマンドと、 /path:"<パス名>" で指定するパスの意味を説明します。

パラメーターを必要としない特殊なコマンド /command:abcd がありますが、もし何もコマンドラインから指定されなかった場合、代わりにプロジェクトモニターが起動します。もし /tray を指定すると、プロジェクトモニターを表示せず、システムトレイにアイコンが表示された状態で起動します。

コマンドによっては、複数の対象のパスを受け付けます(例えば、コミット時に複数のファイルを指定する場合など)。 /path 引数には * で区切って複数のパスを指定することができます。

改行で区切った複数のパスを記述したファイルで指定することもできます。ファイルはUTF-16形式で、BOM を入れないでください。ファイルを渡したい場合は、/pathではなく/pathfileを使用してください。コマンド実行後にTortoiseProcがファイルを自動削除するようにしたい場合は、/deletepathfileを使用してください。/deletepathfileを指定しない場合、手作業でファイルを削除しなければファイルは残ります。

多くのコマンド(コミットや更新など)で表示される進行ダイアログは、通常はコマンドが終了した後も OK ボタンを押すまで開いたままになります。設定ダイアログで進行ダイアログを自動的に閉じるように設定することができます。ただしこの場合、コマンドをバッチファイルから起動しても、 TortoiseSVN コンテキストメニューから起動しても、進行ダイアログが閉じるようになります。

/configdir:"<設定ファイルのディレクトリのパス>" を指定すると、異なる場所にある設定ファイルを指定することができます。この引数は、レジストリで設定されているデフォルトパスを上書きします。

/closeonend 引数を指定すると、設定を変更することなくコマンド終了時に進行ダイアログを自動で閉じることができます。

  • /closeonend:0 ダイアログを自動的に閉じません。

  • /closeonend:1 エラーがなければ自動的に閉じます。

  • /closeonend:2 エラーや競合がなければ自動的に閉じます。

  • /closeonend:3 エラー、競合、マージがなければ自動的に閉じます。

エラーや競合がない場合にローカル操作の進行ダイアログを自動的に閉じるには、 /closeforlocal 引数を指定してください。

以下の表には、 TortoiseProc.exe のコマンドラインで使用してアクセスすることができる、すべてのコマンドを一覧しています。上で述べたように、 /command:<コマンド名> の形で使用してください。この表では紙面を節約するため、頭に付ける /command は省略しています。

表D.1 使用できるコマンドとオプションの一覧

コマンド説明
:about「バージョン情報」ダイアログを表示します。コマンドが省略された場合もバージョン情報ダイアログを表示します。
:log

ログダイアログを開きます。/pathでログを表示するファイルやフォルダーを指定します。その他のオプションは次の通りです。

  • /startrev:xxx,

  • /endrev:xxx,

  • /limit:xxx limits the amount of fetched messages

  • /strictで「コピーが発生したら停止」チェックボックスが有効になり、

  • /mergeで「マージされたリビジョンを含める」が有効になり、

  • /datemin:"{datestring}"でフィルターの開始日を設定し、

  • /datemax:"{datestring}"でフィルターの終了日を設定します。日付の書式はSVNの日付リビジョンで使われているものと同じです。

  • /findstring:"filterstring"でフィルター文字列を指定し、

  • /findtextで正規表現ではなくテキストのフィルターを使用するようになり、

  • /findregexでテキストのフィルターではなく正規表現を使用するようになり、

  • /findtype:XではXとして0~511の数値を指定します。数値は次のオプションの合計値です。

    • /findtype:0 すべての項目で絞り込み

    • /findtype:1 ログメッセージ本文で絞り込み

    • /findtype:2 パス名で絞り込み

    • /findtype:4 作者名で絞り込み

    • /findtype:8 リビジョン番号で絞り込み

    • /findtype:16 未使用

    • /findtype:32 バグ ID で絞り込み

    • /findtype:64 未使用

    • /findtype:128 日付で絞り込み

    • /findtype:256 日付の範囲で絞り込み

  • /outfile:path\to\file が指定された場合、ログダイアログが閉じられたときに、選択されたリビジョンがファイルに書き出されます。リビジョンはマージダイアログと同じ書式で書き出されます。

An svn date revision can be in one of the following formats:

  • {2006-02-17}

  • {15:30}

  • {15:30:00.200000}

  • {"2006-02-17 15:30"}

  • {"2006-02-17 15:30 +0230"}

  • {2006-02-17T15:30}

  • {2006-02-17T15:30Z}

  • {2006-02-17T15:30-04:00}

  • {20060217T1530}

  • {20060217T1530Z}

  • {20060217T1530-0500}

:checkout

Opens the checkout dialog. The /path specifies the target directory and the /url specifies the URL to checkout from. If you specify the key /blockpathadjustments, the automatic checkout path adjustments are blocked. The /revision:XXX specifies the revision to check out.

If you specify /outfile:"path/to/file" the specified file will contain three lines after a checkout. The first line is the checkout path, the second line the url and the third the revision.

:import「インポート」ダイアログを開きます。 /path でインポートするデータのディレクトリを指定します。 /logmsg 引数で、ログメッセージの初期値を指定できます。また、 /logmsgfile:<パス> でファイルからログメッセージの初期値を指定することもできます。この場合、 <パス> でログメッセージの入ったファイルの場所を指定します。
:update/path で指定した作業コピーを HEAD リビジョンに更新します。 /rev を指定すると、どのリビジョンに更新するかをユーザーに確認するダイアログを表示します。ダイアログを表示しないようにするには、 /rev:1234 のようにリビジョン番号を指定してください。その他のオプションとして /nonrecursive/ignoreexternals/includeexternals があります。 /stickydepth を指定すると、部分的なチェックアウトを行う際に、深さが固定されます。 /skipprechecks を指定すると、更新前に行われるすべての検査を行いません。これを指定すると ログを表示 ボタンが無効になり、更新後に差分のコンテキストメニューも無効になります。
:commitコミットダイアログを開きます。 /path でコミットするディレクトリやファイルのリストを指定します。 /logmsg でログメッセージを初期値を指定できます。また、 /logmsgfile:<パス> でログメッセージの初期値をファイルで指定することもできます。この場合、 <パス> でログメッセージの入ったファイルの場所を指定します。バグ追跡システムとの統合が正しく設定されている場合、 /bugid:"<バグ ID>" でバグ ID ボックスの値を設定することができます。
:add/path で指定されたファイルをバージョン管理に追加します。
:revert作業コピーで行った変更を取り消します。 /path で取り消す項目を指定します。
:cleanup/path で指定された作業コピーの、中断されたり失敗したりした操作をクリーンアップし、作業コピーのロックを解除します。 /cleanup を指定することで、実際にクリーンアップするかどうかを指定することもできます。 /noui を指定すると、(クリーンアップの終了を通知したりエラーを表示したりする)ポップアップダイアログを抑制します。 /noprogressui を指定すると、進行状況ダイアログの表示も抑制します。 /nodlg を指定すると、ユーザーがクリーンアップ処理の内容を選択するためのダイアログを表示しません。クリーンアップ時の動作は、 /cleanup で状態のクリーンアップ、 /breaklocks で全てのロックの解除、 /revert でコミットしていない変更の破棄、 /delunversioned/delignored/refreshshell/externals/fixtimestamps/vacuum で指定することができます。
:resolve/path で指定した競合ファイルを解決済みにします。 /noquestion を指定すると、本当に行ってもよいか確認せずに解決済みにします。
:repocreate/path にリポジトリを作成します。
:switch切り替えダイアログを開きます。/pathで切り替えるディレクトリ、/urlで切り替え先のURLを指定します。
:export/path で指定された作業コピーを別のディレクトリにエクスポートします。 /path でバージョン管理外ディレクトリを指定すると、ダイアログが表示されて /path で指定されたディレクトリにエクスポートする URL を尋ねてきます。 /blockpathadjustments を指定すると、パスの自動調整を抑制します。
:dropexport作業コピーを /path から /droptarget で指定されたディレクトリにエクスポートします。このコマンドでは、エクスポートダイアログを表示せずに直接実行します。 /overwrite を指定すると、既存のファイルを確認なしで上書きします。 /autorename を指定すると、ファイルが既に存在するとき、上書きせずにエクスポートされたファイルの名前を自動的に変更します。/extendedオプションは、localchangesと共に指定すると、ローカルで変更されたファイルのみをエクスポートし、unversionedと共に指定すると、それに加えてバージョン管理されていない項目もすべてエクスポートします。
:dropvendorCopies the folder in /path recursively to the directory specified in /droptarget. New files are added automatically, and missing files get removed in the target working copy, basically ensuring that source and destination are exactly the same. Specify /noui to skip the confirmation dialog, and /noprogressui to also disable showing the progress dialog.
:mergeマージダイアログを開きます。/path にはターゲットディレクトリを指定します。マージするリビジョン範囲は、 /fromurl:URL, /revrange:string のオプションを使用できます。2つのリポジトリツリーをマージするには、 /fromurl:URL, /tourl:URL, /fromrev:xxx, /torev:xxx のオプションを使用できます。
:mergeall「すべてマージ」ダイアログを開きます。 /path で対象ディレクトリを指定します。
:copyブランチ/タグダイアログを開きます。/pathでブランチ/タグの作成元の作業コピーを指定します。また、/urlは作成先のURLです。 URLが^で始まる場合は、リポジトリのルートからの相対URLとみなされます。新しいブランチ/タグへ作業コピーを切り替えオプションを既定でチェックしておきたい場合は、/switchaftercopyを指定してください。中間フォルダーを作成オプションをチェックするには、/makeparentsスイッチを指定してください。/logmsgでログメッセージの初期値を指定できます。また、コマンドラインでログメッセージを渡したくない場合は、/logmsgfile:<パス>を使用します。<パス>でログメッセージが入ったファイルの場所を指定します。
:settings設定ダイアログを開きます。
:remove/path で指定されたファイルをバージョン管理下から削除します。
:rename/path で指定されたファイルの名前を変更します。このファイルの新しい名前を入力するダイアログが表示されます。一度に同様のファイルの名前の変更を行う際、確認を行わないようにするには、 /noquestion を指定してください。
:diffTortoiseSVNの設定で指定された外部差分ビューアーを起動します。/pathには1番目のファイルを指定します。/path2オプションを指定すると、その2つのファイルに対して差分ビューアーが起動します。/path2を省略すると、/pathで指定されたファイルとその作業ベースの間の差分となります。指定されたファイルにプロパティの変更がある場合は、変更された各プロパティについても外部差分ビューアーが起動されます。これを防ぐには、/ignorepropsを指定してください。リビジョン番号を指定するには、/startrev:xxx/endrev:xxxを指定してください。ペグリビジョンを指定する場合は、/pegrevision:xxxを指定してください。/blameを指定して/path2を指定しない場合、指定されたリビジョンのファイルの注釈履歴が表示されます。 /line:xxxを指定すると、差分を表示するときにその行番号にジャンプします。
:shelveShelves the specified paths in a new shelf. The option /shelfname:name specifies the name of the shelf. An optional log message can be specified with /logmsg:message. If option /checkpoint is passed, the modifications of the files are kept.
:unshelveApplies the shelf with the name /shelfname:name to the working copy path. By default the last version of the shelf is applied, but you can specify a version with /version:X.
:showcompare

unified オプションが指定された場合は、Unified差分ファイルに含まれる変更されたファイルの一覧をダイアログで表示します。URLがファイルを指していた場合は、その2ファイルに対して差分ビューアーを起動します。

url1url2revision1revision2 の各オプションを指定する必要があります。pegrevisionignoreancestryblameunified オプションを指定することもできます。

指定されたURLのプロパティの変更があった場合、変更された各プロパティについても外部差分ビューアーが起動します。これを避けるには、/ignorepropsオプションを指定してください。

If a unified diff is requested, an optional prettyprint option can be specified which will show the merge-info properties in a more user readable format.

:conflicteditor/path の競合ファイルを編集するために、 TortoiseSVN の設定ダイアログで指定した競合エディターを起動します。
:relocate再配置ダイアログを表示します。 /path には、再配置する作業コピーのパスを指定します。
:helpヘルプファイルを開きます。
:repostatus「変更をチェック」ダイアログを開きます。 /path には作業コピーのディレクトリを指定します。 /remote を指定すると、ユーザーが リポジトリをチェック ボタンを押したときのように、直ちにリポジトリにアクセスを開始します。
:repobrowser

/path で指定された作業コピーの URL の場所、または /path で直接指定された URL の場所から、リポジトリブラウザーを起動します。

/rev:xxx で、リポジトリブラウザーが表示するリビジョンを指定できます。 /rev:xxx が省略されると、デフォルトは HEAD になります。

/path で URL を指定した場合、 /projectpropertiespath:<作業コピーのパス> でプロジェクトのプロパティを読み出したり使用したりする場所のパスを指定できます。

/outfile:<出力ファイルのパス> を指定すると、リポジトリブラウザーを閉じたときに、選択された URL とリビジョンがファイルに書き出されます。テキストファイルの1行目には URL が入り、2行目にはリビジョン番号がテキストで記述されます。

:ignore/path で指定されたすべての対象を無視リストに追加します。つまり svn:ignore プロパティにそのファイルを追加します。
:blame

/path で指定したファイルの注釈履歴ダイアログを開きます。

/startrev/endrev を指定すると、注釈範囲を指定するダイアログが表示されず、指定したリビジョンの値を使用します。

/line:nnn を指定すると、 TortoiseBlame を開く際に指定した行番号にジャンプします。

/ignoreeol/ignorespaces/ignoreallspaces の各オプションもサポートしています。

:cat/path で指定した URL や作業コピーのパスのファイルを、 /savepath:path で指定した場所に保存します。 /revision:xxx でリビジョンを指定できます。指定したリビジョンのファイルを取得するのに使用できます。
:createpatchCreates a patch file for the path given in /path. To skip the file Save-As dialog you can pass /savepath:path to specify the path where to save the patch file to directly. To prevent the unified diff viewer from being started showing the patch file, pass /noview. If a unified diff is requested, an optional prettyprint option can be specified which will show the merge-info properties in a more user readable format.
:revisiongraph

/path で指定したパスのリビジョングラフを表示します。

グラフウィンドウを表示せずに、特定のパスのリビジョングラフのイメージファイルを作成する場合には、 /output:path で出力ファイルのパスを指定してください。出力ファイルには、リビジョングラフを出力できるファイル形式の拡張子を付与する必要があります。出力できるのは .svg.wmf.png.jpg.bmp.gif のいずれかです。

リビジョングラフは、表示方法を設定するための多くのオプションがあり、出力イメージファイルを作成するときにこれらのオプションを設定できます。オプションは /option:XXXX を指定します。 XXXX は十進数の数値です。オプションの値を知るには、リビジョングラフを通常の方法で起動して、ユーザーインターフェイスからオプションを指定し、グラフを終了させます。その際、コマンドラインで指定する値は、レジストリの次の項目に書き込まれています。 HKCU\Software\TortoiseSVN\RevisionGraphOptions

:lock/path で指定したファイルや、指定したディレクトリにあるすべてのファイルをロックします。ロック時のコメントを入力するよう「ファイルをロック」ダイアログを表示します。
:unlock/path で指定したファイルや、指定したディレクトリにあるすべてのファイルのロックを解除します。
:rebuildiconcacheWindows のアイコンキャッシュを再生成します。Windows のアイコンが破損したときのみ使用してください。(避けられない)副作用として、デスクトップのアイコンが再配置されてしまうことがあります。メッセージボックスの表示を抑制するには、 /noquestion を指定してください。
:properties

/path で指定されたパスのプロパティダイアログを表示します。

このコマンドでバージョン管理されたプロパティを扱う場合は、作業コピーを指定する必要があります。

/rev:XXX が指定されていて、 /path がURLであれば、ダイアログでリビジョンプロパティを表示・編集できます。

特定のプロパティのプロパティダイアログを直接開く場合は、プロパティ名を /property:name の指定してください。

:sync

現在の設定がエクスポートした設定より新しいかどうかに応じて、設定をエクスポート/インポートします。

/path オプションでパスを渡すと、設定の読み書きに指定したパスが使用されます。

/askforpath を指定すると、エクスポートまたはインポートするパスを選択するダイアログが表示されます。

/load/save も指定されていない場合、 TortoiseSVN はどちらの設定が新しいかを元にインポートとエクスポートのどちらを行うかを決定します。もしエクスポートファイルのほうが新しければ設定をインポートし、現在の設定のほうが新しければ設定をファイルにエクスポートします。

/load を指定すると、設定ファイルから設定をインポートします。

/save を指定すると、設定ファイルに設定をエクスポートします。

/local を指定すると、ローカルな設定も含めてエクスポートします(ローカルなパスを参照している設定など)。


コマンドの例(1行で入力してください)

TortoiseProc.exe /command:commit
                 /path:"c:\svn_wc\file1.txt*c:\svn_wc\file2.txt"
                 /logmsg:"ログメッセージのテスト" /closeonend:0

TortoiseProc.exe /command:update /path:"c:\svn_wc\" /closeonend:0

TortoiseProc.exe /command:log /path:"c:\svn_wc\file1.txt"
                 /startrev:50 /endrev:60 /closeonend:0

Tsvncmd URL ハンドラ

特殊な URL を使用すると、web ページから TortoiseProc を呼び出すことができます。

TortoiseSVN は、TortoiseSVN コマンドを実行するようなハイパーリンクを作成する、tsvncmd: という新しいプロトコルを登録します。コマンドやパラメーターは、コマンドラインから TortoiseSVN を自動化するのと同じです。

tsvncmd: URL の形式は以下のようになります。

tsvncmd:command:cmd?parameter:paramvalue?parameter:paramvalue

cmd は許可されたコマンドの1つ、 parameterpathrevision のような引数の名前、そして paramvalue は引数に設定される値です。引数のリストの数は、使われるコマンドに依存します。

以下のコマンドを tsvncmd: URL に使用できます。

  • :update
  • :commit
  • :diff
  • :repobrowser
  • :checkout
  • :export
  • :blame
  • :repostatus
  • :revisiongraph
  • :showcompare
  • :log
  • :properties

簡単な URL の例としては、次のものがあります。

<a href="tsvncmd:command:update?path:c:\svn_wc?rev:1234">Update</a>

また、より複雑なケースでは次のものがあります。

<a href="tsvncmd:command:showcompare?
url1:https://svn.code.sf.net/p/stefanstools/code/trunk/StExBar/src/setup/Setup.wxs?
url2:https://svn.code.sf.net/p/stefanstools/code/trunk/StExBar/src/setup/Setup.wxs?
revision1:188?revision2:189">compare</a>

TortoiseIDiff コマンド

画像差分ツールには、起動時のふるまいを制御するのに使用する、コマンドラインオプションが少しあります。オプションは TortoiseIDiff.exe により呼ばれます。

以下の表は、コマンドラインで画像差分ツールに渡す、全オプションの一覧です。

表D.2 使用できるオプションの一覧

オプション説明
:left左に表示するファイルのパス。
:lefttitleタイトルの文字列。イメージファイルのフルパスの代わりに、この文字列をイメージビューのタイトルに使用します。
:right右に表示するファイルのパス。
:righttitleタイトルの文字列。イメージファイルのフルパスの代わりに、この文字列をイメージビューのタイトルに使用します。
:overlay指定すると、画像差分ツールがオーバーレイモード(アルファブレンディング)に変わります。
:fit指定すると、画像差分ツールはどちらの画像も画面一杯に表示します。
:showinfoイメージ情報ボックスを表示します。


サンプル(一行で入力してください):

TortoiseIDiff.exe /left:"c:\images\img1.jpg" /lefttitle:"image 1"
                  /right:"c:\images\img2.jpg" /righttitle:"image 2"
                  /fit /overlay

TortoiseUDiffコマンド

Unified差分ビューアーにはコマンドラインオプションが2つだけあります。

表D.3 使用できるオプションの一覧

オプション説明
:patchfileUnified差分ファイルへのパスです。
:pパイプモードを有効にします。Unified差分を標準入力から読み取ります。


例(1行で入力してください)

                TortoiseUDiff.exe /patchfile:"c:\diff.patch"
            

他のコマンドで差分を取った場合、TortoiseUDiffで差分を直接表示させることができます。

                svn diff | TortoiseUDiff.exe /u
            

/pパラメーターを省略しても動作します。

                svn diff | TortoiseUDiff.exe
            

付録E コマンドラインインターフェイスのクロスリファレンス

時々このマニュアルは、コマンドラインインターフェイス(CLI)の説明をしている Subversion のドキュメントを参照しています。TortoiseSVN があるシーンの裏で何を行っているか理解する助けになるよう、それぞれの TortoiseSVN の GUI 操作と同等な CLI コマンドを示すリストを用意しました。

注記

TortoiseSVN で行うことと同等な物が CLI にありますが、TortoiseSVN が CLI を呼ぶことはなく、直接 Subversion ライブラリを使用するのを覚えていてください。

TortoiseSVN のバグを見つけたら、Subversion の問題か TortoiseSVN の問題かを切り分けるために、CLI を使用してそれを再現するようにお願いするかもしれません。このリファレンスで、どのコマンドを行うべきか確認してください。

規約と基本規則

以下の説明では、リポジトリの位置を表す URL (例: https://svn.code.sf.net/p/tortoisesvn/code/trunk/)は、単に URL と表します。作業コピーのパス(例: C:\TortoiseSVN\trunk)は、単に PATH と表します。

重要

TortoiseSVN は Windows シェル拡張ですから、カレントワーキングディレクトリの概念は使用できません。作業コピーのパスは相対パスではなく絶対パスで与えられます。

いくつかの項目はオプションで、TortoiseSVN ではチェックボックスやラジオボタンで制御されています。こういったオプションはコマンドラインの定義では [角かっこ] で表されます。

TortoiseSVNのコマンド

チェックアウト

svn checkout [-depth ARG] [--ignore-externals] [-r rev] URL PATH
      

depthの引数は、「チェックアウトする深さ」コンボボックスに関連します。

外部参照を除外する がチェックされているなら、--ignore-externals スイッチを使用してください。

特定のリビジョンをチェックアウトしたい場合、-r スイッチを使って指定してください。

更新

svn info URL_of_WC
svn update [-r rev] PATH
      

複数の項目を更新するのに、現在の Subversion では不可分操作できません。そこで TortoiseSVN は、まず HEAD リビジョンをリポジトリから探し出し、複数のリビジョン場混じった作業コピーを作らないように、特定のリビジョン番号を持つすべての項目を更新します。

1項目しか選択しないで更新したり、選択した項目がすべて同じリポジトリにない場合、TortoiseSVN は HEAD リビジョンに更新します。

ここでのコマンドラインオプションはありません。特定リビジョンへ更新 も update コマンドを実装していますが、こちらはもっとオプションがあります。

リビジョンの更新

svn info URL_of_WC
svn update [-r rev] [-depth ARG] [--ignore-externals] PATH
      

depthの引数は、「チェックアウトする深さ」コンボボックスに関連します。

外部参照を除外する がチェックされているなら、--ignore-externals スイッチを使用してください。

コミット

TortoiseSVN ではコミットダイアログを使って複数の Subversion コマンドを実行します。最初は、コミットできる作業コピーの項目について状態チェックを行います。リストを確認し、コミットするよう選択したファイルと BASE に diff をかけることができます。

svn status -v PATH
      

バージョン管理外のファイルを表示にチェックがあると、TortoiseSVN は作業コピーの階層にあるバージョン管理外のファイルやフォルダーも(無視ルールを考慮して)表示します。svn status コマンドはバージョン管理外のフォルダー以下は検索しないため、この特殊な機能は直接対応する Subversion コマンドがありません。

バージョン管理外のファイルやフォルダーをチェックすると、最初にその項目を作業コピーへ追加します。

svn add PATH...
      

OK をクリックすると、その場で Subversion のコミット(commit)が実行されます。ファイル選択のチェックボックスをすべてデフォルト状態のままにすると、作業コピーの再帰的コミットが実行されます。ファイルを選択を外した場合、コマンドラインで個別にパスを指定した形で、非再帰的コミット(-N)が実行されます。

svn commit -m "LogMessage" [-depth ARG] [--no-unlock] PATH...
      

LogMessage にはログメッセージエディットボックスの内容を記述してください。空でもかまいません。

ロックを保持 にチェックしているなら、--no-unlock スイッチを使用してください。

差分

svn diff PATH
      

メインのコンテキストメニューから差分が実行された場合、BASEリビジョンから変更されたファイルに対して比較を行います。上記のCLIコマンドの出力では比較を行い、結果をUnified差分ファイルで出力します。しかし、TortoiseSVNはこれを使用しているわけではありません。TortoiseSVNはTortoiseMerge(または、任意の差分表示プログラム)でフルテキストファイルの差分を視覚的に表示します、そのため、CLIで直接相当するものはありません。

TortoiseSVN で、バージョン管理下であってもなくても、任意の 2 ファイルを比較することができます。TortoiseSVN は、単に2つのファイルを選択した差分プログラムに渡し、どこに差分があるかを比較させます。

ログの表示

svn log -v -r 0:N --limit 100 [--stop-on-copy] PATH
or
svn log -v -r M:N [--stop-on-copy] PATH
      

デフォルトでは TortoiseSVN は --limit を使用してログメッセージを 100 個取得しようとします。古い API を使用するような設定になっていれば、リポジトリのリビジョンを100個分、ログメッセージを取得するには、2 番目の形式を使用してください。

コピー/名前の変更が発生したら停止 がチェックされている場合は、--stop-on-copy スイッチを使用してください。

変更をチェック

svn status -v PATH
or
svn status -u -v PATH
      

状態チェックの初期状態では、作業コピーに対してのみ行います。リポジトリをチェック をクリックすると、更新時にどのファイルが変更されるかリポジトリもチェックしますが、これには -u スイッチが必要です。

バージョン管理外のファイルを表示にチェックがあると、TortoiseSVN は作業コピーの階層にあるバージョン管理外のファイルやフォルダーも(無視ルールを考慮して)表示します。svn status コマンドはバージョン管理外のフォルダー以下は検索しないため、この特殊な機能は直接対応する Subversion コマンドがありません。

リビジョングラフ

リビジョングラフは TortoiseSVN のみの機能です。コマンドラインにはありません。

What TortoiseSVN does is an

svn info URL_of_WC
svn log -v URL
        

where URL is the repository root and then analyzes the data returned.

リポジトリブラウザー

svn info URL_of_WC
svn list [-r rev] -v URL
      

リポジトリブラウザーでトップレベルに表示されるリポジトリのルートを決めるのに svn info を使用できます。このレベル以上へは へ行けません。またこのコマンドは、リポジトリブラウザーに表示されるロック情報を返します。

svn list は URL とリビジョンで指定した、ディレクトリの内容をリスト表示します。

競合の編集

このコマンドには、同等の CLI がありません。競合したファイルを見て、どの行を使用するか整理するのに、TortoiseMerge や、その他の3画面差分・マージツールを起動します。

解決済み

svn resolved PATH
      

名前変更

svn rename CURR_PATH NEW_PATH
      

削除

svn delete PATH
      

変更の取り消し

svn status -v PATH
      

第一段階として、作業コピー内で変更の取り消しが行える項目を決定するよう、状態チェックを行います。一覧を確認し、BASE に対するファイルの比較、取り消す項目の選択を行えます。

OK をクリックすると、その場で Subversion の変更の取り消し(revert)が実行されます。ファイル選択のチェックボックスをすべてデフォルト状態のままにすると、作業コピーの再帰的な(-R)変更の取り消しが実行されます。ファイルの選択を外した場合、コマンドラインで個別にパスを指定した形で、変更の取り消しが実行されます。

svn revert [-R] PATH...
      

クリーンアップ

svn cleanup PATH
      

ロックの取得

svn status -v PATH
      

第一段階として、作業コピー内でロックできる項目を決定するよう、状態チェックを行います。ロックしたい項目を選択できます。

svn lock -m "LockMessage" [--force] PATH...
      

LockMessage には、ロックメッセージエディットボックスの内容を記述してください。空でもかまいません。

ロックを奪う にチェックが付いている場合、--force スイッチを使用してください。

ロックの解除

svn unlock PATH
      

ブランチ・タグ

svn copy -m "LogMessage" URL URL
or
svn copy -m "LogMessage" URL@rev URL@rev
or
svn copy -m "LogMessage" PATH URL
      

ブランチ/タグダイアログはリポジトリへのコピーを実行します。以下のようにラジオボタンのオプションが3つあります。

  • リポジトリ内の最新リビジョン
  • リポジトリのリビジョンを指定
  • 作業コピー

これは上記のコマンドライン 3 種に該当します。

LogMessage にはログメッセージエディットボックスの内容を記述してください。空でもかまいません。

切り替え

svn info URL_of_WC
svn switch [-r rev] URL PATH
      

マージ

svn merge [--dry-run] --force From_URL@revN To_URL@revM PATH
      

マージのテスト は、--dry-run スイッチ付きの merge と同じ動作をします。

svn diff From_URL@revN To_URL@revM
      

Unified diff はマージ処理されるものを差分で表示します。

エクスポート

svn export [-r rev] [--ignore-externals] URL Export_PATH
      

この形式はバージョン管理外フォルダーからアクセスし、エクスポート先に指定フォルダーを使用します。

作業コピーを別の場所にエクスポートするのに、Subversion ライブラリを使用ません。そのため、相当するコマンドラインが存在しません。

TortoiseSVN が行うのは、操作の進行を表示しながら、新しい場所に全ファイルをコピーすることです。バージョン管理外ファイル/フォルダーも、オプションでエクスポートできます。

どちらの場合でも、外部参照を除外する がチェックされていれば、--ignore-externals スイッチを使用してください。

再配置

svn switch --relocate From_URL To_URL
      

ここにリポジトリを作成

svnadmin create --fs-type fsfs PATH
      

追加

svn add PATH...
      

フォルダーを選択すると、TortoiseSVN はまず、追加できる項目を再帰的に検索します。

インポート

svn import -m LogMessage PATH URL
      

LogMessage にはログメッセージエディットボックスの内容を記述してください。空でもかまいません。

注釈履歴

svn blame -r N:M -v PATH
svn log -r N:M PATH
      

注釈情報を参照するのに TortoiseBlame を使用する場合、ツールチップにログメッセージを表示するのに、ファイルのログも必要です。注釈をテキストファイルで参照する場合は、この情報は必要ありません。

無視リストに追加

svn propget svn:ignore PATH > tempfile
{tempfileを編集し無視する項目を追加してください}
svn propset svn:ignore -F tempfile PATH

svn:ignore プロパティは複数行の値をとることがあるため、ここでは、直接コマンドラインで指定するのではなく、テキストファイルで変更する方法を示します。

パッチを作成

svn diff PATH > patch-file
      

TortoiseSVN は、作業コピーと BASE リビジョンを比較して、unified差分形式のパッチファイルを作成します。

パッチの適用

パッチと作業コピーが同じリビジョンでない場合、パッチの適用は困難な作業です。幸いなことに、Subversionには該当する機能がありませんが、TortoiseMergeを使用sるうことができます。

付録F 実装の詳細

この付録には TortoiseSVN の機能を実装する上での、議論の詳細が納められています。

アイコンオーバーレイ

すべてのファイルやフォルダーは、Subversion ライブラリが報告する Subversion の状態値を持っています。コマンドラインクライアントでは、1 文字のコードで表示しますが、TortoiseSVN ではアイコンオーバーレイでグラフィカルに表示します。オーバーレイアイコンの数は非常に制限されているので、オーバーレイアイコンごとに複数の状態値を持つこともありえます。

競合 オーバーレイアイコンは、更新や切替の結果でローカルの変更とリポジトリからダウンロードした変更が競合した場合の、競合状態を表示するのに使用します。操作が完了できない時に陥る、妨害状態を表すときにも表示します。

変更 オーバーレイアイコンは、ローカルで変更がある変更状態や、ローカルの変更にリポジトリからの変更点をマージしたマージ状態、ファイルが削除されて、同名の異なるファイルに置き換わった 置換状態を表示するのに使用します。

削除 オーバーレイアイコンは、削除するようスケジュールした 削除状態や、見つからない 紛失状態の場合に表示されます。通常、紛失ファイルは表示できませんが、紛失ファイルがあるはずの親フォルダーに表示します。

バージョン管理に 追加 されるファイルやフォルダーには + 記号がつきます。

Subversion 内 オーバーレイアイコンは、通常状態のファイルや、まだ状態が分からないファイルに表示します。これは、TortoiseSVN が状態を取得するバックグラウンドプロセスを用いているためで、それはオーバーレイアイコンを更新する数秒前かもしれません。

要ロックオーバーレイは、 svn:needs-lock プロパティが設定されているファイルに表示されます。

ローカルの作業コピーでファイルにロックされている場合、ロック オーバーレイアイコンが使われます。

無視 オーバーレイアイコンは、常に無視するパターンに含まれていたり、親フォルダーに svn:ignore プロパティが設定されていたりするために 無視 状態になった項目を表すのに使用します。このオーバーレイはオプションです。

バージョン管理外 オーバーレイは、バージョン管理外 状態の項目を表すのに使用します。これはバージョン管理下にあるフォルダー内の、バージョン管理外の項目です。このオーバーレイはオプションです。

Subversion の状態が none(作業コピーにない項目)の場合はオーバーレイを表示しません。無視バージョン管理外 のオーバーレイを無効にした場合は、そのファイルにもオーバーレイを表示しません。

ファイルは Subversion 状態を1つしか持ちません。例えば、ファイルをローカルで変更し、そのファイルを同時に削除するようマークをつけることができます。Subversion は状態値を1つ返します。この場合、削除です。この優先順は、Subversion で定義しています。

TortoiseSVN が再帰的な状態を表示する場合(デフォルト設定)、各フォルダーには、自身の状態と以下のすべての子ファイルの状態を反映させたオーバーレイが表示されます。ひとつにまとめたオーバーレイを表示するのに、前述の優先順位が使用されます。この際、もっとも優先順が高いのは、競合状態です。

実はシステムで使用できるアイコンのすべてを見ることはありません。Windows で使用できるオーバーレイの数は 15 個に制限されているからです。Windows は 4 個使用し、残りの 11 個を他のアプリケーションで使用できるようにしています。TortoiseCVS も使用していると、使用できるオーバーレイスロットが足らなくならないように、TortoiseSVN はGood Citizen (TM) に徹し、オーバーレイを他のアプリケーションが使用できるように制限しているのです。

Tortoise クライアントには他のバージョン管理システム向けのものもあるため、オーバーレイアイコンの表示を共有するコンポーネントを作成しました。ここでは技術的な細部は重要ではありませんが、知っておいてほしいのは、共有コンポーネントによってすべての Tortoise クライアントが同じオーバーレイを使用することができ、 複数の Tortoise クライアントをインストールしたとき、オーバーレイの最大数である11個を超えずに使うことができる点です。もちろん、若干の欠点もあります。すべての Tortoise クライアントが同じオーバーレイを使用するため、作業コピーが使用しているバージョン管理システムをオーバーレイアイコンで見分けることができません。

  • 通常変更競合 は常に読み込み・表示されます。

  • 削除 は可能ならばロードしますが、スロットが足りなければ 変更 にフォールバックします。

  • 読み取り専用 は可能ならばロードしますが、スロットが足りなければ 通常 にフォールバックします。

  • ロックは可能ならばロードしますが、スロットが足りなければ 通常 にフォールバックします。

  • 追加 は可能ならばロードしますが、スロットが足りなければ 変更 にフォールバックします。

付録G 言語パックとスペルチェッカー

標準のインストーラーは英語のみをサポートしていますが、個別に言語パックやスペルチェック辞書をダウンロードし、インストールすることができます。

言語パック

TortoiseSVNのユーザーインターフェイスはたくさんの言語に翻訳されています。翻訳状況ページからご希望の言語パックをダウンロードすることができます。まだ言語パックが用意されていない言語ならば、チームに参加して翻訳をしてみましょう ;-)

各言語パックは、.msiインストーラーとしてパッケージ化されています。インストールプログラムを実行し、指示に従うだけです。インストールが完了したら、翻訳版が使用できるようになります。

ドキュメントもさまざまな言語に翻訳されています。ウェブサイトのサポートページから翻訳されたマニュアルをダウンロードすることができます。

スペルチェッカー

TortoiseSVN は、利用できれば Windows スペルチェッカーを使用します(Windows 8 以降)。つまり、既定の OS の言語とは異なるスペルチェッカーを使用したい場合は、 Windows の設定からスペルチェッカーモジュールをインストールする必要があります(設定 > 時刻と言語 > 地域と言語)。

TortoiseSVN はプロジェクトプロパティの tsvn:projectlanguage で正しく設定されたスペルチェッカーを使用します。

Windows のスペルチェッカーが使用できない場合、 TortoiseSVN は OpenOfficeMozilla と同じ辞書を使用することもできます。

インストーラーは自動でUS ないし UK の英語辞書を追加します。その他の言語を使用したければ、一番簡単なのは TortoiseSVN の言語パックをインストールすることです。TortoiseSVN のローカルユーザーインターフェイスと同様に、適当なディレクトリにインストールされます。再起動するとこの辞書が有効になります。

もしくは辞書を自分でインストールすることもできます。OpenOffice か Mozilla がすでにインストールされていれば、そのアプリケーションがインストールされているフォルダーにある辞書をコピーできます。そうでなければ、辞書ファイルを http://wiki.services.openoffice.org/wiki/Dictionaries からダウンロードする必要があります。

辞書ファイルを入手したら、ファイルをロケール文字だけのファイル名にに変更します。(例:

  • en_US.aff

  • en_US.dic

) その後、このファイルを %APPDATA%\TortoiseSVN\dic フォルダーにコピーします。もしフォルダーがなければ作成してください。TortoiseSVN は TortoiseSVN のインストールフォルダの下にある Languages フォルダー(普通は C:\Program Files\TortoiseSVN\Languages )も検索しますが、ここは言語パックのファイルが保存されている場所です。しかし、 %APPDATA% フォルダーは管理者権限が不要な上、優先度が高く設定されています。次回 TortoiseSVN を起動した際、スペルチェッカーが有効になります。

複数の辞書をインストールした場合、TortoiseSVN はどの辞書を使用するかを以下のルールで決定します。

用語集

追加

ファイルやディレクトリをリポジトリに追加する Subversion コマンドです。新しい項目は、コミットした際にリポジトリに追加されます。

BASE リビジョン

作業コピー にあるファイルやフォルダーの現在のベースリビジョンで、最後にチェックアウト、更新、コミットを実行したときの、ファイルやフォルダーのリビジョンです。 BASE リビジョンは、通常は HEAD リビジョンと同じではありません。

注釈履歴

このコマンドはテキストファイル専用で、それぞれの行が最後に変更された時の、リポジトリのリビジョンと作者を注釈表示します。私たちの GUI の実装は TortoiseBlame と呼ばれ、リビジョン番号の上にマウスを置くと、コミット日時やログメッセージも表示します。

ブランチ

バージョン管理システムでよく使用される用語で、ある時点で開発が2つの独立したパスに分岐したことをと表します。メインの開発ラインからブランチを作成すれば、メインラインを不安定にせずに新機能の開発を行うことができます。また、今後バグフィックスのみを行うための安定版リリースのブランチを作成すれば、新機能の開発は不安定なトランクで行うことができます。 Subversion のブランチは、簡易コピー として実装されています。

チェックアウト

空のディレクトリに、リポジトリからバージョン管理下のファイルをダウンロードし、ローカルの作業コピーを作成する Subversion のコマンドです。

クリーンアップ

Subversion book から引用します。作業コピーの再帰的なクリーンアップ(ロックの解除、未完操作の回復)を行います。 作業コピーがロックされています というエラーが出続ける場合、このコマンドを実行し、古くなったロックを削除し、作業コピーをまた使えるようにします。ここで言う ロック とは、ファイルシステムのロックを指しており、リポジトリのロックではないことに注意してください。

コミット

ローカルの作業コピーの変更点をリポジトリに渡し、リポジトリのリビジョンを新しく作成するのに使用する Subversion のコマンドです。

競合

リポジトリの変更がローカルにマージされる際、時には同じ行に変更がある場合があります。この場合、 Subversion はどちらを使用するか自動的に決定できません。これを競合と呼びます。それ以降の変更をコミットする前には、ファイルを手作業で編集し競合を解決しなければなりません。

コピー

Subversion リポジトリでは、単一ファイルやツリー全体のコピーを作成できます。これは、領域を消費しないように、オリジナルへのリンクに少し似ている 簡易コピー で実装されています。コピーの作成ではコピー内に履歴を保存します。そのためコピーされる前についても追跡できます。

削除

バージョン管理下のファイルを削除(してコミット)すると、リポジトリ内のそのコミットを行ったバージョン以降、その項目はもう存在しなくなります。しかしもちろん、それ以前のリポジトリのリビジョンには、まだ存在していますから、まだそれにアクセスできます。必要なら削除した項目をコピーし、履歴を含め完全に復活できます。

差分

差分の表示の略。どのような変更が行われたのか正確に見たいときに便利です。

エクスポート

このコマンドは、作業コピーのようにバージョン管理下のフォルダーをコピーしますが、 .svn は作成しません。

FSFS

Subversion が持つリポジトリ用のファイルシステムバックエンドです。ネットワークフォルダー上で使用することができます。1.2以降のリポジトリのデフォルトです。

GPO

グループポリシーオブジェクト。

HEAD リビジョン

リポジトリにあるファイルやフォルダーの最新リビジョンです。

インポート

単一のリビジョンで、フォルダー階層の内容をリポジトリにインポートする Subversion のコマンドです。

ロック

バージョン管理下の項目のロックを取得すると、その作業コピーを除いて、ロックが解除されるまでリポジトリにコミット不可の印が付きます。

ログ

ファイルやフォルダーのリビジョンの歴史を表します。履歴とも呼びます。

履歴

ファイルやフォルダーのリビジョンの歴史を表します。ログとも呼びます。

マージ

リポジトリに追加された変更を、ローカルで行った変更を壊さないように、作業コピーに追加するプロセスです。時には自動的に調整できず、作業コピーが競合と呼ばれる状態になります。

作業コピーを更新する際に、自動的にマージが行われます。また、 TortoiseSVN のマージコマンドを使用して、別のブランチにある変更を指定してマージすることもできます。

パッチ

作業コピーの変更がテキストファイルのみである場合、 Subversion の Diff コマンドを使用すると、変更内容を Unified 差分ファイルとして単一ファイルに出力することができます。この種のファイルはよくパッチと呼ばれており、他の誰か(やメーリングリスト)にメールで送ったり、他の作業コピーに適用したりすることができます。コミットのアクセス権を持たない人は、変更を作成し、パッチファイルをコミット権限を持つ人に送ることができます。また、変更に自信がない場合、他の人にパッチを送ってレビューしてもらうこともできます。

プロパティ

ディレクトリやファイルのバージョン管理をするのに加えて、 Subversion はバージョン管理されたメタデータを追加できます。これは、バージョン管理下のディレクトリやファイルごとにプロパティとして参照されます。プロパティには、レジストリキーと同じように、それぞれ名前と値があります。 Subversion には、 svn:eol-style のような内部で使用する特殊なプロパティがいくつかあります。 TortoiseSVN にも tsvn:logminsize のような特殊なプロパティがあります。任意の名前と値を持つプロパティの追加もできます。

再配置

サーバー上の異なるディレクトリに移動したり、ドメイン名が変更されたりして、リポジトリが移動した場合、作業コピーを再配置すれば、作業コピーのリポジトリのURLが新しい場所を指すようになります。

【注意】このコマンドは、作業コピーが指している同じリポジトリの同じ場所を指し、そのリポジトリが移動されてしまったときのみに使用してください。その他の場合には、代わりに切り替えコマンドを使用する必要があります。

リポジトリ

データを集中して格納し保守する場所。複数のデータベースやファイルをネットワーク上に分散して置くこともでき、ネットワークに出ずに直接アクセスできる場所に置くこともできます。

競合の解決

作業コピーのファイルが、マージ後に競合状態になったままになった場合、人間がエディター(または TortoiseMerge)で競合を整理しなければなりません。このプロセスは競合の解決と言われています。競合したファイルを解決済みにすると、コミットできるようになります。

変更の取り消し

作業コピーを最後に更新したとき、 Subversion はそれぞれのファイルの当時の コピーをローカルに保持しています。変更を行った後で、その変更を取り消したい場合は、変更の取り消し コマンドを使用して当時のコピーに戻せます。

リビジョン

変更セットをコミットするたびに、新しいリビジョンがリポジトリに作成されます。各リビジョンは、履歴の決まった時点のリポジトリツリーの状態を表します。過去にさかのぼる場合は、リビジョン N のような形でリポジトリを調べられます。

言い換えるとリビジョンは、リビジョンが作成された時に行われた変更を示しています。

リビジョンプロパティ(revprop)

ファイルがプロパティを持てるように、リポジトリの各リビジョンもプロパティを持つことができます。リビジョンが作成されるときに、 svn:date svn:author svn:log といった特殊なリビジョンプロパティが自動的に作成され、それぞれコミット日時、コミットした人、ログメッセージを表しています。これらのプロパティは編集できますが、バージョン管理できません。そのため変更は永続的で元に戻せません。

SVN

Subversion のよく使われる省略表現。

svnserveリポジトリサーバーで使われる、 Subversion カスタムプロトコルの名前。

切り替え

ちょうど特定リビジョンへ更新が履歴上の別の位置へ、作業コピーの時間ウィンドウを変更するように、切り替えはリポジトリの別の位置へ、作業コピーの場所ウィンドウを変更します。トランクとブランチの違いが少ない時、それぞれの作業する際に役に立ちます。その2つの間で作業コピーを切り替えると、差異のあるファイルのみが転送されます。

更新

リポジトリから作業コピーへ最新の変更点を取得するコマンド。作業コピーの変更点に、他の人が行った変更をマージします。

作業コピー

ローカルのサンドボックスで、バージョン管理ファイルに対して作業を行う場所です。また通常ローカルのハードディスクに記録されています。リポジトリからのチェックアウトで作業コピーを作成し、コミットで変更点をリポジトリに反映します。

索引

シンボル

(+), ローカルとリモートの状態
その場でインポート, その場でインポート
アイコン, アイコンオーバーレイ
アクセス, リポジトリへのローカルアクセス
インストール, インストール
インポート, リポジトリへのデータのインポート
ウィンドウズのプロパティ, 詳細なステータス
ウェブサイト, チェックアウトリンク
ウェブビュー, Web ベースのリポジトリビューアーとの統合
エクスプローラー, TortoiseSVNの特徴
エクスポート, Subversion 作業コピーをエクスポート
オーバーレイ, アイコンオーバーレイ, アイコンオーバーレイ
オーバーレイの優先度, アイコンオーバーレイ
キーワード, svn:keywords
キーワード展開, svn:keywords
クライアントフック, クライアント側フックスクリプト
クリーン, 変更の取り消し
クリーンアップ, クリーンアップ
グラフ, リビジョングラフ
グループポリシー, グループポリシーでの TortoiseSVN のデプロイ, コンテキストメニューエントリの無効化
コピー, ブランチ/タグの作成, リポジトリブラウザー
コマンドライン, TortoiseSVNのコマンド, TortoiseIDiff コマンド, TortoiseUDiffコマンド
コマンドラインクライアント,
コミット, 変更のリポジトリへのコミット
コミットを元に戻す, リポジトリのリビジョンのロールバック(取り消し)
コミットメッセージ, リビジョンログダイアログ, ログメッセージの入力の強制
コミットモニター,
コンテキストメニュー, コンテキストメニュー
コンテキストメニューエントリ, コンテキストメニューエントリの無効化
サウンド, 一般設定
サーバーの移動, 作業コピーの再配置
サーバーサイドアクション, リポジトリブラウザー
サーバービューアー, リポジトリブラウザー
サーバー側フックスクリプト, サーバー側フックスクリプト
ショートカット, リポジトリへのショートカットの作成
ステータス, ステータス情報の取得, ローカルとリモートの状態
スペルチェッカー, スペルチェッカー
タグ, ファイルやフォルダーのコピー・移動・名前の変更, ブランチ/タグの作成
チェックアウト, 作業コピーのチェックアウト
チェックアウトリンク, チェックアウトリンク
チェックイン, 変更のリポジトリへのコミット
ツリーの競合, 競合の解決
デプロイ, グループポリシーでの TortoiseSVN のデプロイ
ドメインコントローラ, グループポリシーでの TortoiseSVN のデプロイ
ドラッグハンドラ, ドラッグ&ドロップ
ドラッグ&ドロップ, ドラッグ&ドロップ
ネットワークフォルダー, ネットワークフォルダー上のリポジトリへのアクセス
バグ追跡, バグ追跡ツール/課題追跡システムとの統合
バグ追跡システム, バグ追跡ツール/課題追跡システムとの統合
バックアップ, リポジトリのバックアップ
バージョン, 更新チェックのリダイレクト
バージョン抽出,
バージョン管理,
バージョン管理の削除, バージョン管理外のファイルの無視
バージョン管理外, 作業コピーをバージョン管理外へ, バージョン管理外のファイルの無視
バージョン管理外の「作業コピー」, Subversion 作業コピーをエクスポート
バージョン管理外のファイル・フォルダー, ファイルやディレクトリの無視
パターンマッチ, 無視リストでのパターンマッチ
パッチ, パッチの作成及び適用
ファイルのコピー, ファイルやフォルダーのコピー・移動・名前の変更
ファイルのバージョン番号,
ファイルの移動, ファイルやフォルダーのコピー・移動・名前の変更
ファイルを比較, ファイルやフォルダーに対して 2 リビジョン間の比較
ファイル名の変更, ファイルやフォルダーのコピー・移動・名前の変更
フォルダーの比較, ファイルやフォルダーに対して 2 リビジョン間の比較
フック, サーバー側フックスクリプト
フックスクリプト, サーバー側フックスクリプト, クライアント側フックスクリプト
ブランチ, ファイルやフォルダーのコピー・移動・名前の変更, ブランチ/タグの作成
プラグイン,
プロキシサーバー, ネットワーク設定
プロジェクトプロパティ, TortoiseSVN のプロジェクトプロパティ
プロジェクトモニター,
ベンダプロジェクト, 共通のサブプロジェクトを含める
マージ, マージ
リビジョン範囲, リビジョン範囲のマージ
2つのツリー, 2つの異なるツリーをマージする
マージの競合, マージ後に発生した競合の扱い
マージツール, 外部差分・マージツール
マージ追跡, マージ追跡
マージ追跡ログ, マージ追跡機能
モニター中のプロジェクト,
リビジョン, リビジョン, リビジョングラフ
リビジョンの比較, フォルダーの比較
リビジョングラフ, リビジョングラフ
リビジョンプロパティ, ログメッセージや作者の変更
リポジトリ, リポジトリ, リポジトリへのデータのインポート
リポジトリ URL の変更, 作業コピーの再配置
リポジトリから分離, バージョン管理外のファイルの無視
リポジトリへのファイル追加, リポジトリへのデータのインポート
リポジトリビューアー, Web ベースのリポジトリビューアーとの統合
リポジトリブラウザー, リポジトリブラウザー
リポジトリ作成, リポジトリの作成
リモートコミット,
リリースとしてマーク, ブランチ/タグの作成
リンク, チェックアウトリンク
レジストリ, 高度な設定
ログ, リビジョンログダイアログ
ログや作者の編集, ログメッセージや作者の変更
ログキャッシュ, ログキャッシュ
ログメッセージ, リビジョンログダイアログ, ログメッセージの入力の強制
ロック, ロック
ロールバック, リポジトリのリビジョンのロールバック(取り消し)
一時ファイル, インポート
不完全なチェックアウト, 作業コピーのチェックアウト
作成, コマンドラインクライアントを使用したリポジトリの作成
TortoiseSVN, TortoiseSVNを使用したリポジトリの作成
作業コピー, 作業コピー
作業コピーの作成, 作業コピーのチェックアウト
作業コピーの状態, ステータス情報の取得
共通プロジェクト, 共通のサブプロジェクトを含める
再編成, 大量のファイルの同時移動・コピー
再配置, 作業コピーの再配置
切り替え, チェックアウトするか切り替えるか...
削除, ファイルやフォルダーの削除
取り消し, 変更の取り消し
右クリック, コンテキストメニュー
右ドラッグ, ドラッグ&ドロップ
名前変更, ファイルやフォルダーの移動, リポジトリブラウザー, 大量のファイルの同時移動・コピー
変更, ローカルとリモートの状態
変更のエクスポート, フォルダーの比較
変更の取り消し, 変更の取り消し, リポジトリのリビジョンのロールバック(取り消し)
変更を元に戻す, リポジトリのリビジョンのロールバック(取り消し)
変更リスト, 変更リスト
変更点, ファイルやフォルダーに対して 2 リビジョン間の比較
変更点の取得, 他人の変更に伴う作業コピーの更新
変更点の表示, ステータス情報の取得
変更点の送信, 変更のリポジトリへのコミット
外部リポジトリ, 外部項目
外部参照, 外部項目, 共通のサブプロジェクトを含める
展開, 無視リストでのパターンマッチ
履歴, リビジョンログダイアログ
差分, 差分の表示, パッチの作成及び適用
差分ツール, 外部差分・マージツール
差分比較, 差分の表示
常に無視する, 一般設定
延期, 延期
延期を解除, 延期
新規ファイルのバージョン管理, 新しいファイルやディレクトリの追加
更新, 他人の変更に伴う作業コピーの更新, リポジトリからの選択したファイルの更新
更新チェック, 更新チェックのリダイレクト
最大化, ウィンドウの最大化
最新バージョンのチェック, 更新チェックのリダイレクト
機能の無効化, コンテキストメニューエントリの無効化
比較, 差分の表示
注釈, 誰がその行を変更したか?
注釈履歴, 誰がその行を変更したか?
無視, ファイルやディレクトリの無視
特殊なファイル, 特殊なファイル
画像の差分, TortoiseIDiff を使用した画像の差分
移動, ファイルやフォルダーの移動, 大量のファイルの同時移動・コピー
移動したサーバー, 作業コピーの再配置
空のメッセージ, ログメッセージの入力の強制
競合, コピー・変更・マージモデル, 競合の解決
絞り込み, ログメッセージの絞り込み
統計, 統計情報
翻訳, 言語パック
自動化, TortoiseSVNのコマンド, Tsvncmd URL ハンドラ, TortoiseIDiff コマンド, TortoiseUDiffコマンド
解決, 競合の解決
言語パック, 言語パック
設定, TortoiseSVN の設定
認証, 認証
認証キャッシュ, 認証
読み取り専用, ロック
課題追跡システム, バグ追跡ツール/課題追跡システムとの統合,
賞賛, 誰がその行を変更したか?
辞書, スペルチェッカー
追加, 新しいファイルやディレクトリの追加
部分的なチェックアウト, 作業コピーのチェックアウト
除外パターン, 一般設定

C

CLI,
COM, ,
COM SubWCRev インターフェイス, COM インターフェイス

F

FAQ,

I

IBugtraqProvider,

S

SUBST ドライブ, アイコンオーバレイ設定
Subversion book,
Subversion のプロパティ, Subversion のプロパティ
SubWCRev,
SVN_ASP_DOT_NET_HACK, SVN_ASP_DOT_NET_HACK 環境変数の設定