TortoiseSVN - Windows用Subversionクライアント

TortoiseSVN
Windows用Subversionクライアント
Version 1.9
Stefan Küng
Lübbe Onken
Simon Large
TortoiseSVN: Windows用Subversionクライアント: Version 1.9
: Stefan Küng, Lübbe Onken, 、 Simon Large
翻訳: 倉澤 望 (鍋太郎) (nabetaro @ caldron.jp), 藤本 理弘 ([email protected]), 阿
部 恒彦
発行日 2015/06/01 20:57:36 (r26544)
目次
序章 .................................................................................. xi
1. TortoiseSVNとは ............................................................... xi
2. TortoiseSVNの特徴 ............................................................. xi
3. ライセンス ................................................................... xii
4. 開発 ......................................................................... xii
4.1. TortoiseSVN の歴史 .................................................. xiii
4.2. 謝辞 ................................................................. xiii
5. このガイドの読み方 .......................................................... xiii
6. 本書で使用している表現 ....................................................... xiv
1. さぁはじめましょう ................................................................. 1
1.1. TortoiseSVNのインストール .................................................... 1
1.1.1. システム要件 .......................................................... 1
1.1.2. インストール .......................................................... 1
1.2. バージョン管理の基本概念 ..................................................... 1
1.3. 試してみましょう ............................................................. 2
1.3.1. リポジトリの作成 ...................................................... 2
1.3.2. プロジェクトのインポート .............................................. 2
1.3.3. 作業コピーのチェックアウト ............................................ 3
1.3.4. ファイルの変更 ........................................................ 4
1.3.5. ファイルの追加 ........................................................ 4
1.3.6. プロジェクトの変更履歴を見る .......................................... 5
1.3.7. 変更を取り消す ........................................................ 5
1.4. さあ使ってみよう ............................................................. 6
2. バージョン管理の基本概念 ........................................................... 7
2.1. リポジトリ ................................................................... 7
2.2. バージョン管理モデル ......................................................... 7
2.2.1. ファイル共有の問題 .................................................... 7
2.2.2. ロック・変更・アンロックモデル ........................................ 8
2.2.3. コピー・変更・マージモデル ............................................ 9
2.2.4. Subversionではどうしているのか ....................................... 11
2.3. Subversionの動作 ............................................................ 11
2.3.1. 作業コピー ........................................................... 11
2.3.2. リポジトリ URL ...................................................... 12
2.3.3. リビジョン ........................................................... 13
2.3.4. 作業コピーのリポジトリ追跡方法 ....................................... 15
2.4. まとめ ...................................................................... 15
3. リポジトリ ........................................................................ 17
3.1. リポジトリの作成 ............................................................ 17
3.1.1. コマンドラインクライアントを使用したリポジトリの作成 ................. 17
3.1.2. TortoiseSVNを使用したリポジトリの作成 ................................ 17
3.1.3. リポジトリへのローカルアクセス ....................................... 18
3.1.4. ネットワークフォルダー上のリポジトリへのアクセス ..................... 18
3.1.5. リポジトリのレイアウト ............................................... 18
3.2. リポジトリのバックアップ .................................................... 20
3.3. サーバー側フックスクリプト .................................................. 20
3.4. チェックアウトリンク ........................................................ 21
3.5. リポジトリへのアクセス ...................................................... 22
4. 日常の使用ガイド .................................................................. 23
4.1. 機能概要 .................................................................... 23
4.1.1. アイコンオーバーレイ ................................................. 23
4.1.2. コンテキストメニュー ................................................. 23
4.1.3. ドラッグ&ドロップ ................................................... 25
4.1.4. 共通のショートカット ................................................. 26
4.1.5. 認証 ................................................................. 26
4.1.6. ウィンドウの最大化 ................................................... 27
iii
TortoiseSVN
4.2. リポジトリへのデータのインポート ............................................
4.2.1. インポート ...........................................................
4.2.2. その場でインポート ...................................................
4.2.3. 特殊なファイル .......................................................
4.3. 作業コピーのチェックアウト ..................................................
4.3.1. チェックアウトの深さ .................................................
4.4. 変更のリポジトリへのコミット ................................................
4.4.1. コミットダイアログ ...................................................
4.4.2. 変更リスト ...........................................................
4.4.3. ファイルの一部だけをコミットする .....................................
4.4.4. コミット一覧からの項目の除外 .........................................
4.4.5. コミットログメッセージ ...............................................
4.4.6. コミットの進行状況 ...................................................
4.5. 他人の変更に伴う作業コピーの更新 ............................................
4.6. 競合の解決 ..................................................................
4.6.1. ファイルの競合 .......................................................
4.6.2. プロパティの競合 .....................................................
4.6.3. ツリーの競合 .........................................................
4.7. ステータス情報の取得 ........................................................
4.7.1. アイコンオーバーレイ .................................................
4.7.2. 詳細なステータス .....................................................
4.7.3. ローカルとリモートの状態 .............................................
4.7.4. 差分の表示 ...........................................................
4.8. 変更リスト ..................................................................
4.9. リビジョンログダイアログ ....................................................
4.9.1. リビジョンログダイアログの起動 .......................................
4.9.2. リビジョンログのアクション ...........................................
4.9.3. 追加情報の取得 .......................................................
4.9.4. ログメッセージの追加取得 .............................................
4.9.5. 現在の作業コピーのリビジョン .........................................
4.9.6. マージ追跡機能 .......................................................
4.9.7. ログメッセージや作者の変更 ...........................................
4.9.8. ログメッセージの絞り込み .............................................
4.9.9. 統計情報 .............................................................
4.9.10. オフラインモード ....................................................
4.9.11. 表示の更新 ..........................................................
4.10. 差分の表示 .................................................................
4.10.1. ファイルの差分 ......................................................
4.10.2. 改行コードと空白のオプション ........................................
4.10.3. フォルダーの比較 ....................................................
4.10.4. TortoiseIDiff を使用した画像の差分 ..................................
4.10.5. Office ドキュメントの差分 ...........................................
4.10.6. 外部差分・マージツール ..............................................
4.11. 新しいファイルやディレクトリの追加 .........................................
4.12. ファイルやフォルダーのコピー・移動・名前の変更 .............................
4.13. ファイルやディレクトリの無視 ...............................................
4.13.1. 無視リストでのパターンマッチ ........................................
4.14. 削除、移動、名前変更 .......................................................
4.14.1. ファイルやフォルダーの削除 ..........................................
4.14.2. ファイルやフォルダーの移動 ..........................................
4.14.3. ファイル名の大文字・小文字が競合した場合の対処 ......................
4.14.4. ファイル名の変更の修復 ..............................................
4.14.5. バージョン管理外のファイルの削除 ....................................
4.15. 変更の取り消し .............................................................
4.16. クリーンアップ .............................................................
4.17. プロジェクト設定 ...........................................................
4.17.1. Subversion のプロパティ .............................................
4.17.2. TortoiseSVN のプロジェクトプロパティ ................................
iv
27
27
28
29
29
30
32
32
35
35
36
36
38
39
41
41
42
42
45
45
46
47
50
50
52
53
53
54
60
61
61
62
62
64
67
67
67
68
69
69
71
72
72
73
73
75
76
76
77
78
78
79
79
79
81
82
82
85
TortoiseSVN
4.17.3. プロパティエディター ................................................ 91
4.18. 外部項目 ................................................................... 98
4.18.1. 外部フォルダー ...................................................... 98
4.18.2. 外部ファイル ....................................................... 100
4.18.3. ドラッグ&ドロップで外部参照を作成 ................................. 100
4.19. ブランチ/タグの作成 ....................................................... 100
4.19.1. ブランチ/タグの作成 ................................................ 101
4.19.2. ブランチやタグを作成するその他の方法 ............................... 103
4.19.3. チェックアウトするか切り替えるか... ................................ 103
4.20. マージ .................................................................... 105
4.20.1. リビジョン範囲のマージ ............................................. 105
4.20.2. 2つの異なるツリーをマージする ..................................... 107
4.20.3. マージオプション ................................................... 108
4.20.4. マージ結果のレビュー ............................................... 109
4.20.5. マージ追跡 ......................................................... 110
4.20.6. マージ中に発生した競合の扱い ....................................... 111
4.20.7. 機能ブランチの保守 ................................................. 112
4.21. ロック .................................................................... 112
4.21.1. Subversion でロックがどのように働くか .............................. 113
4.21.2. ロックの取得 ....................................................... 114
4.21.3. ロックの解除 ....................................................... 115
4.21.4. ロック状態のチェック ............................................... 115
4.21.5. ロックしていないファイルを読み込み専用にするには ................... 115
4.21.6. ロックのフックスクリプト ........................................... 116
4.22. パッチの作成及び適用 ...................................................... 116
4.22.1. パッチファイルの作成 ............................................... 116
4.22.2. パッチファイルの適用 ............................................... 118
4.23. 誰がその行を変更したか? ................................................... 118
4.23.1. ファイルの注釈履歴 ................................................. 119
4.23.2. 注釈履歴の差分 ..................................................... 121
4.24. リポジトリブラウザー ...................................................... 121
4.25. リビジョングラフ .......................................................... 124
4.25.1. リビジョングラフのノード ........................................... 125
4.25.2. 表示の変更 ......................................................... 126
4.25.3. グラフの使用 ....................................................... 127
4.25.4. 表示の更新 ......................................................... 128
4.25.5. ツリーの剪定 ....................................................... 128
4.26. Subversion 作業コピーをエクスポート ...................................... 129
4.26.1. 作業コピーをバージョン管理外へ ..................................... 130
4.27. 作業コピーの再配置 ........................................................ 130
4.28. バグ追跡ツール/課題追跡システムとの統合 .................................. 131
4.28.1. ログメッセージへの課題IDの付与 ..................................... 132
4.28.2. 課題追跡システムからの情報取得 ..................................... 136
4.29. Web ベースのリポジトリビューアーとの統合 .................................. 137
4.30. TortoiseSVN の設定 ....................................................... 138
4.30.1. 一般設定 ........................................................... 138
4.30.2. リビジョングラフの設定 ............................................. 147
4.30.3. アイコンオーバレイ設定 ............................................. 149
4.30.4. ネットワーク設定 ................................................... 153
4.30.5. 外部プログラムの設定 ............................................... 154
4.30.6. 保存データの設定 ................................................... 159
4.30.7. ログキャッシュ ..................................................... 160
4.30.8. クライアント側フックスクリプト ..................................... 163
4.30.9. TortoiseBlame の設定 ............................................... 168
4.30.10. TortoiseUDiff設定 ................................................. 169
4.30.11. TortoiseSVN の設定のエクスポート .................................. 170
4.30.12. 高度な設定 ........................................................ 170
4.31. 最終ステップ .............................................................. 175
v
TortoiseSVN
5. プロジェクトモニター .............................................................
5.1. プロジェクトをモニターに追加 ...............................................
5.2. モニターダイアログ .........................................................
5.2.1. 主な操作 ............................................................
6. SubWCRev プログラム ..............................................................
6.1. SubWCRev コマンドライン ...................................................
6.2. キーワード置換 .............................................................
6.3. キーワード例 ...............................................................
6.4. COM インターフェイス ......................................................
7. IBugtraqProvider インターフェイス ................................................
7.1. 命名規則 ...................................................................
7.2. IBugtraqProvider インターフェイス .........................................
7.3. IBugtraqProvider2 インターフェイス ........................................
A. よくある質問(FAQ) ..............................................................
B. こんなときは…… .................................................................
B.1. 大量のファイルの同時移動・コピー ...........................................
B.2. ログメッセージの入力の強制 .................................................
B.2.1. サーバー上のフックスクリプト ........................................
B.2.2. プロジェクトプロパティ ..............................................
B.3. リポジトリからの選択したファイルの更新 .....................................
B.4. リポジトリのリビジョンのロールバック(取り消し) ...........................
B.4.1. リビジョンログダイアログの使用 ......................................
B.4.2. マージダイアログの使用 ..............................................
B.4.3. svndumpfilter の使用 ................................................
B.5. ファイルやフォルダーに対して 2 リビジョン間の比較 ..........................
B.6. 共通のサブプロジェクトを含める .............................................
B.6.1. svn:externals の使用 ................................................
B.6.2. ネストした作業コピーの使用 ..........................................
B.6.3. 相対位置の使用 ......................................................
B.6.4. プロジェクトをリポジトリに追加 ......................................
B.7. リポジトリへのショートカットの作成 .........................................
B.8. バージョン管理外のファイルの無視 ...........................................
B.9. 作業コピーをバージョン管理外に .............................................
B.10. 作業コピーの削除 ..........................................................
C. 管理者向けの便利な小技 ...........................................................
C.1. グループポリシーでの TortoiseSVN のデプロイ ...............................
C.2. 更新チェックのリダイレクト .................................................
C.3. SVN_ASP_DOT_NET_HACK 環境変数の設定 .......................................
C.4. コンテキストメニューエントリの無効化 .......................................
D. TortoiseSVN の自動化 .............................................................
D.1. TortoiseSVNのコマンド ......................................................
D.2. Tsvncmd URL ハンドラ ......................................................
D.3. TortoiseIDiff コマンド ....................................................
D.4. TortoiseUDiffコマンド ......................................................
E. コマンドラインインターフェイスのクロスリファレンス ................................
E.1. 規約と基本規則 .............................................................
E.2. TortoiseSVNのコマンド ......................................................
E.2.1. チェックアウト ......................................................
E.2.2. 更新 ................................................................
E.2.3. リビジョンの更新 ....................................................
E.2.4. コミット ............................................................
E.2.5. 差分 ................................................................
E.2.6. ログの表示 ..........................................................
E.2.7. 変更をチェック ......................................................
E.2.8. リビジョングラフ ....................................................
E.2.9. リポジトリブラウザー ................................................
E.2.10. 競合の編集 .........................................................
E.2.11. 解決済み ...........................................................
vi
176
176
177
177
179
179
181
182
184
187
187
187
189
192
193
193
193
193
193
193
194
194
194
194
195
195
195
195
196
196
196
197
197
197
198
198
198
199
199
202
202
208
209
209
211
211
211
211
211
212
212
212
213
213
213
213
214
214
TortoiseSVN
E.2.12. 名前変更 ...........................................................
E.2.13. 削除 ...............................................................
E.2.14. 変更の取り消し .....................................................
E.2.15. クリーンアップ .....................................................
E.2.16. ロックの取得 .......................................................
E.2.17. ロックの解除 .......................................................
E.2.18. ブランチ・タグ .....................................................
E.2.19. 切り替え ...........................................................
E.2.20. マージ .............................................................
E.2.21. エクスポート .......................................................
E.2.22. 再配置 .............................................................
E.2.23. ここにリポジトリを作成 .............................................
E.2.24. 追加 ...............................................................
E.2.25. インポート .........................................................
E.2.26. 注釈履歴 ...........................................................
E.2.27. 無視リストに追加 ...................................................
E.2.28. パッチを作成 .......................................................
E.2.29. パッチの適用 .......................................................
F. 実装の詳細 .......................................................................
F.1. アイコンオーバーレイ .......................................................
G. 言語パックとスペルチェッカー .....................................................
G.1. 言語パック .................................................................
G.2. スペルチェッカー ...........................................................
用語集 ...............................................................................
索引 .................................................................................
vii
214
214
214
214
214
215
215
215
215
216
216
216
216
216
216
217
217
217
218
218
220
220
220
221
224
図の一覧
1.1. バージョン管理外フォルダーの TortoiseSVN メニュー ................................ 2
1.2. インポートダイアログ ............................................................. 3
1.3. ファイル差分ビューアー ........................................................... 4
1.4. ログダイアログ ................................................................... 5
2.1. 典型的なクライアント/サーバーシステム ............................................ 7
2.2. 回避したい問題 ................................................................... 8
2.3. ロック・変更・アンロックモデル ................................................... 9
2.4. コピー・変更・マージモデル ...................................................... 10
2.5. ...コピー・変更・マージモデル(の続き) .......................................... 10
2.6. リポジトリのファイルシステム .................................................... 12
2.7. リポジトリ ...................................................................... 14
3.1. バージョン管理外フォルダーの TortoiseSVN メニュー ............................... 17
4.1. エクスプローラーのアイコンオーバーレイ表示 ....................................... 23
4.2. バージョン管理下のフォルダーのコンテキストメニュー ............................... 24
4.3. バージョン管理されたフォルダー内のショートカットに対するエクスプローラーのファイ
ルメニュー ............................................................................ 25
4.4. バージョン管理下のディレクトリに対する右ドラッグメニュー ......................... 25
4.5. 認証ダイアログ .................................................................. 26
4.6. インポートダイアログ ............................................................ 28
4.7. チェックアウトダイアログ ........................................................ 30
4.8. コミットダイアログ .............................................................. 33
4.9. コミットダイアログのスペルチェッカー ............................................ 37
4.10. コミットの状況を表示している進行ダイアログ ...................................... 38
4.11. 更新が完了したときの進行ダイアログ ............................................. 39
4.12. エクスプローラーのアイコンオーバーレイ表示 ...................................... 45
4.13. エクスプローラーのプロパティページの Subversion タブ ........................... 47
4.14. 変更をチェック ................................................................. 48
4.15. 変更リストがあるコミットダイアログ ............................................. 51
4.16. リビジョンログダイアログ ....................................................... 53
4.17. リビジョンログダイアログの上部のリストのコンテキストメニュー .................... 54
4.18. Code Collaborator 設定ダイアログ ............................................... 57
4.19. 2つのリビジョンを選択した時の上部のリストのコンテキストメニュー ................ 57
4.20. ログダイアログ下部の一覧でコンテキストメニューを表示したところ .................. 58
4.21. ログダイアログ下部の一覧で複数ファイル選択時にコンテキストメニューを表示したと
ころ .................................................................................. 59
4.22. マージ追跡リビジョンを表示したログダイアログ .................................... 61
4.23. 「作者別コミット数」ヒストグラム ............................................... 64
4.24. 「作者別コミット数」円グラフ ................................................... 65
4.25. 「時期別コミット数」グラフ ..................................................... 66
4.26. オフライン移行ダイアログ ....................................................... 67
4.27. リビジョンの比較ダイアログ ..................................................... 70
4.28. 画像差分ビューアー ............................................................. 71
4.29. バージョン管理外のファイルでのエクスプローラーコンテキストメニュー .............. 73
4.30. バージョン管理下のディレクトリに対する右ドラッグメニュー ........................ 74
4.31. バージョン管理外のファイルでのエクスプローラーコンテキストメニュー .............. 75
4.32. バージョン管理下のファイルに対するエクスプローラーのコンテキストメニュー ........ 77
4.33. 変更の取り消しダイアログ ....................................................... 80
4.34. クリーンアップダイアログ ....................................................... 81
4.35. Subversion のプロパティページ .................................................. 82
4.36. プロパティの追加 ............................................................... 83
4.37. フックスクリプトのプロパティダイアログ .......................................... 87
4.38. bool型のユーザープロパティダイアログ ............................................ 88
4.39. state型のユーザープロパティダイアログ ........................................... 88
4.40. 1行型のユーザープロパティダイアログ ............................................ 89
4.41. 複数行型のユーザープロパティダイアログ .......................................... 90
viii
TortoiseSVN
4.42. svn:externals プロパティページ ................................................. 92
4.43. svn:keywords プロパティページ .................................................. 92
4.44. svn:eol-style プロパティページ ................................................. 93
4.45. tsvn:bugtraq プロパティページ .................................................. 94
4.46. ログメッセージサイズのプロパティページ .......................................... 95
4.47. 言語プロパティページ ........................................................... 95
4.48. svn:mime-type プロパティページ ................................................. 96
4.49. svn:needs-lock プロパティページ ................................................ 96
4.50. svn:executable プロパティページ ................................................ 96
4.51. プロパティダイアログのマージログメッセージのテンプレート設定 .................... 97
4.52. ブランチ/タグの作成ダイアログ ................................................. 101
4.53. 切り替えダイアログ ............................................................ 104
4.54. マージウィザード - リビジョン範囲の選択 ....................................... 106
4.55. マージウィザード - ツリーのマージ ............................................. 108
4.56. 競合の解決ダイアログ .......................................................... 111
4.57. すべてマージダイアログ ........................................................ 112
4.58. ロックダイアログ .............................................................. 114
4.59. 変更をチェックダイアログ ...................................................... 115
4.60. パッチ作成ダイアログ .......................................................... 117
4.61. 注釈履歴ダイアログ ............................................................ 119
4.62. TortoiseBlame ................................................................. 120
4.63. リポジトリブラウザー .......................................................... 122
4.64. リビジョングラフ .............................................................. 124
4.65. URL からエクスポートダイアログ ................................................ 129
4.66. 再配置ダイアログ .............................................................. 131
4.67. 課題追跡システムのプロパティダイアログ ......................................... 133
4.68. 課題追跡システムクエリダイアログの例 ........................................... 137
4.69. 設定ダイアログの「全般」ページ ................................................ 139
4.70. 設定ダイアログの「コンテキストメニュー」ページ ................................. 141
4.71. 設定ダイアログの「ダイアログ1」ページ ......................................... 142
4.72. 設定ダイアログの「ダイアログ2」ページ ......................................... 143
4.73. 設定ダイアログの「ダイアログ3」ページ ......................................... 145
4.74. 設定ダイアログの「色」ページ .................................................. 146
4.75. 設定ダイアログの「リビジョングラフ」ページ ..................................... 147
4.76. 設定ダイアログのリビジョングラフの「色」ページ ................................. 148
4.77. 設定ダイアログの「アイコンオーバーレイ」ページ ................................. 149
4.78. 設定ダイアログの「アイコンセット」ページ ....................................... 152
4.79. 設定ダイアログの「オーバーレイハンドラー」ページ ............................... 152
4.80. 設定ダイアログの「ネットワーク」ページ ......................................... 153
4.81. 設定ダイアログの「差分ビューアー」ページ ....................................... 154
4.82. 設定ダイアログの「差分/マージの高度な設定」ダイアログ .......................... 158
4.83. 設定ダイアログの「保存されたデータ」ページ ..................................... 159
4.84. 設定ダイアログの「ログキャッシュ」ページ ....................................... 160
4.85. 設定ダイアログのログキャッシュ統計 ............................................ 162
4.86. 設定ダイアログの「フックスクリプト」ページ ..................................... 163
4.87. 設定ダイアログのフックスクリプトの設定 ......................................... 164
4.88. 設定ダイアログの「課題追跡システムとの統合」ページ ............................. 167
4.89. 設定ダイアログの「TortoiseBlame」ページ ........................................ 168
4.90. 設定ダイアログの「TortoiseUDiff」ページ ........................................ 169
4.91. 設定ダイアログの「同期」ページ ................................................ 170
4.92. タスクバーでのデフォルトのグループ化 ........................................... 172
4.93. タスクバーでのリポジトリ毎のグループ化 ......................................... 172
4.94. タスクバーでのリポジトリ毎のグループ化 ......................................... 173
4.95. タスクバーでのグループ化にリポジトリのカラーオーバーレイが付いた様子 ........... 173
5.1. プロジェクトモニターのプロジェクトの編集ダイアログ .............................. 176
5.2. プロジェクトモニターのメインダイアログ .......................................... 177
C.1. アップグレードの通知を表示するコミットダイアログ ................................ 198
ix
表の一覧
2.1.
4.1.
6.1.
6.2.
6.3.
6.4.
C.1.
D.1.
D.2.
D.3.
リポジトリにアクセスするURL .....................................................
ピン留めされたリビジョン .......................................................
使用できるコマンドラインスイッチ一覧 ............................................
SubWCRevのエラーコードの一覧 ...................................................
利用可能なキーワードの一覧 .....................................................
COM オートメーションのサポート .................................................
メニューエントリとその値 .......................................................
使用できるコマンドとオプションの一覧 ............................................
使用できるオプションの一覧 .....................................................
使用できるオプションの一覧 .....................................................
x
13
103
180
180
181
184
199
203
209
209
序章
バージョン管理は、情報の変更を管理する技術です。これは、たとえばソフトウェアのあちこちに変
更を加えたり、その翌日にはその変更の一部を取り消したりチェックしたりすることに時間を費やし
てきたようなプログラマたちにとって、長い間重要な技でした。そのような開発者たちが同時に働く
チームを想像してみてください。恐らく同じファイルに同時に変更を加える場面があるでしょう。な
ぜ、このような潜在的な混沌を管理する良いシステムが求められているかがわかるでしょう。
1. TortoiseSVNとは
TortoiseSVN は、 Apache™ Subversion® バージョン管理システムの無料でオープンソースのWindows
版クライアントです。 TortoiseSVN はファイルやディレクトリを時間を超えて管理します。ファイ
ルは リポジトリ に集中的に格納されます。リポジトリは普通のファイルサーバーとよく似ています
が、ファイルを古いバージョンに戻したり、いつ、だれがデータに変更を加えたのかを履歴から確認
したりすることができます。このため、
Subversion
などのバージョン管理システムは、一般的
に「タイムマシン」のようなものと考えられています。
バージョン管理システムによっては、ソフトウェア構成管理(SCM)システムを兼ねている場合もあ
ります。このようなシステムはソースコードのツリーを管理するために最適化して設計されており、
ソフトウェア開発に特化した多くの機能を持っています。例えば、プログラム言語をネイティブに理
解したり、ソフトウェアを構築するのに必要なツールが付属していたりといった具合にです。しか
し、Subversionはそういったシステムではありません。あらゆるファイルの集合(ソースコードを含
む)を管理する汎用的なシステムです。
2. TortoiseSVNの特徴
TortoiseSVNはSubversionクライアントとして、どのような点が優れているのでしょうか?主な特徴
は次の通りです。
シェル統合
TortoiseSVNはWindowsのシェル(すなわちエクスプローラー)に統合されています。つまり、す
でに使い慣れた方法で操作することができます。そして、バージョン管理の機能が必要になるた
びに違うアプリケーションに切り替える必要はありません。
Windowsのエクスプローラーに限らず、TortoiseSVNのコンテキストメニューは、他のファイルマ
ネージャや、「ファイルを開く」ダイアログのような一般のWindowsアプリケーションで共通に
使用されているダイアログでも使用することができます。しかし、TortoiseSVNはWindowsエクス
プローラーの拡張機能として開発されていることを認識しておいてください。つまり、他のアプ
リケーションの中では、アイコンオーバーレイが表示されないといったように、統合が不完全に
なることもあります。
アイコンオーバレイ
バージョン管理されているファイルやフォルダーの状態は、小さなオーバレイアイコンによって
表されます。これで作業コピーの状態をすぐに確認することができます。
グラフィカルユーザーインターフェイス(GUI)
あるファイルやフォルダーの変更を一覧する際、リビジョンをクリックすると、それをコミット
した際のコメントを読むことができます。また、変更されたファイルの一覧からファイルをダブ
ルクリックするだけで、すぐに変更内容を確認することができます。
コミットダイアログでは、コミットに含まれる可能性のある項目の一覧が表示されます。各項目
と共に表示されるチェックボックスで、コミットに含めたいファイルを選択することができま
xi
序章
す。バージョン管理されていないファイルも一覧に表示されるので、新しいファイルの追加し忘
れを防ぐことができます。
Subversionコマンドへの容易なアクセス
エクスプローラーのコンテキストメニューから、すべてのSubversionコマンドを利用できま
す。TortoiseSVNは独自のサブメニューにそのコマンドを追加します。
TortoiseSVNはSubversionのクライアントであるため、Subversion自体が持つ特徴も紹介します。
ディレクトリのバージョン管理
CVSは個々のファイルの履歴しか追跡できませんが、Subversionでは、時系列でディレクトリツ
リー全体に行われた変更を追跡する「仮想的な」バージョン管理ファイルシステムを実装してい
ます。ファイルおよびディレクトリがバージョン管理されます。そのため、クライアント側から
ファイルやディレクトリを操作するmove(移動)やcopy(コピー)コマンドが実装されていま
す。
不可分コミット
コミットは完全にリポジトリに格納されるか、全くされないかのどちらかになります。これによ
り、開発者は論理的に一貫した変更を作成し、コミットすることができます。
バージョン管理されたメタデータ
すべてのファイルやディレクトリには、不可視の「プロパティ」が添付されています。任意の
キーと値の組み合わせを作成し格納することができます。プロパティはファイルの内容と同様
に、時系列でバージョン管理されます。
ネットワークレイヤーの選択
Subversionはリポジトリへのアクセスが抽象化されており、新しいネットワークメカニズムを容
易に実装できるようになっています。Subversionの「先進的」なネットワークサーバー
は、Apacheウェブサーバーのモジュールになっており、HTTPの一種であるWebDAV/DeltaVで通信
します。これは、Subversionに安定性や相互運用性の面で大きな利点を与え、認証、認可、デー
タ圧縮、リポジトリ閲覧のような、様々な重要な機能を使用することができます。もっと小さい
スタンドアロンのSubversionサーバーもあります。このサーバーはsshで簡単にトンネル通信が
できる独自プロトコルで通信します。
一貫したデータの取り扱い
Subversionはテキストファイル(人が読める形式)でもバイナリファイル(人が読めない形式)
でも、ファイルの差分をバイナリ差分アルゴリズムを用いて表現します。どちらのタイプのファ
イルでも、リポジトリに圧縮して格納されます。また、差分はネットワークを使って双方向に通
信されます。
効率的なブランチやタグの作成
ブランチやタグを作成するときのコストは、プロジェクトの規模に比例しません。Subversionは
ブランチやタグを作成するのに、ハードリンクによく似た単純なプロジェクトのコピーで行いま
す。そのため、この操作はとても小さいコストであり、一定の時間で完了し、リポジトリのほん
の小さな領域しか使用しません。
3. ライセンス
TortoiseSVNは、 GNU General Public License (GPL) に基づいて開発されているオープンソース・プ
ロジェクトです。個人用・商用にかかわらず、何台のPCにも、無料でダウンロードでき無料で使用で
きます。
ほとんどの人はインストーラーだけをダウンロードしますが、このプログラムのソースコードもすべ
て読めるようになっています。こちらのリンクから閲覧可能です。https://sourceforge.net/p/
tortoisesvn/code/HEAD/tree/ 現在開発中のバージョンは /trunk/ に、リリース済みのバージョンは
/tags/ にあります。
4. 開発
TortoiseSVN や Subversion は、開発者のコミュニティによって開発されています。世界中の様々な
国の出身者が、偉大なソフトウェアを開発するために協力しています。
xii
序章
4.1. 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以外のクライアントもコンポーネントを共有できるものがあります。
4.2. 謝辞
Tim Kemp
TortoiseSVNプロジェクトを始めたことに
Stefan Küng
TortoiseSVNが現在の姿になるまでに彼が費やした努力とリーダーシップに
Lübbe Onken
美しいアイコン、ロゴ、バグ取り、翻訳と翻訳管理に
Simon Large
マニュアルを管理してくれたことに
Stefan Fuhrmann
ログキャッシュとリビジョングラフの開発に
The Subversion Book
Subversion のすばらしい入門書に(第2章はここからのコピー)
The Tigris Style project
本書で再利用されているスタイルに
われらが協力者達
パッチや、バグレポート、新しいアイデア、メーリングリストでの質疑応答などに
われらが寄進者達
送ってくれた音楽で楽しんだ時間に
5. このガイドの読み方
本書は、データ管理に
Subversion
を使用しようとしているコンピューターに詳しい人で、コマ
ンドラインのクライアントよりも
GUI
のクライアントを使用したい人向けに書かれています。
TortoiseSVN は Windows のシェル拡張ですので、ユーザーは Windows エクスプローラーに慣れてお
り、使い方を知っていることを前提とします。
xiii
序章
序章ではTortoiseSVNとは何かを説明します。また、TortoiseSVNプロジェクトやそこで作業している
人々のコミュニティ、使用や頒布にあたってのライセンス条件を簡単に説明しています。
1章さぁはじめましょうでは、TortoiseSVNをPCにインストールし、さっそく使い始める方法を説明し
ています。
2章バージョン管理の基本概念では、TortoiseSVNの基盤となるSubversionバージョン管理システムを
簡単に解説しています。これはSubversionプロジェクトのドキュメントを借用したもので、バージョ
ン管理の実現方法の差異やSubversionがどのように動作するのかを説明しています。
3章リポジトリ では、単独のPCで Subversion や TortoiseSVN を試すのに便利なように、ローカルリ
ポジトリのセットアップ方法を説明しています。また、リポジトリ管理についても若干の説明をして
います。サーバー上のリポジトリを使用する場合も関係します。
4章日常の使用ガイドはもっとも重要な章で、TortoiseSVNの主要な機能すべてとその使い方を説明し
ています。チュートリアルの形を採って、作業コピーのチェックアウトから始め、変更、コミット、
等を行います。それからさらに高度な話題に進みます。
6章SubWCRev プログラムはTortoiseSVNに含まれる独立したプログラムです。作業コピーからの情報
を展開し、ファイルに書き出すことができます。プロジェクトにビルド情報を含めるために使用する
ことができます。
付録B こんなときは……では、他の部分で明示されていない作業を行う上で、よく発生する質問に対
する答えを示しています。
付録D TortoiseSVN の自動化では、TortoiseSVNのGUIダイアログをコマンドラインから呼び出す方法
を示します。ユーザーの操作が必要なスクリプトを作成するのに便利です。
付録E
コマンドラインインターフェイスのクロスリファレンスでは、TortoiseSVNのコマンドと
Subversionのコマンドラインクライアントsvn.exeの同等の機能との関連を示しています。
6. 本書で使用している表現
ドキュメントが読みやすくなるよう、TortoiseSVNの画面やメニューの名前はすべて、異なるフォン
トになるようマークアップを施しました。例えばログダイアログといった具合です。
メニューの選択は矢印で表しました。TortoiseSVN
→
のTortoiseSVNからログを表示を選択するということです。
ログを表示は、コンテキストメニュー
TortoiseSVNダイアログの中で現れるローカルコンテキストメニューは、コンテキストメニュー → 名
前を付けて保存...のように表します。
ユーザーインターフェイスのボタンは、「続けるにはOKを押してください」というように表します。
ユーザーアクションは太字で示します。Alt+Aは、キーボードのAltキーを押したままでAキーを押し
ます。右ドラッグは、マウスの右ボタンを押したままで項目を新しい位置にドラッグします。
システムからの出力とキーボード入力は、このように異なるフォントで表します。
重要
重要な注釈はアイコンで印をつけています。
ヒント
人生を楽にする豆知識です。
xiv
序章
注意
自分が何をしているか注意すべきところです。
警告
最大限の注意を払う必要があるところです。この警告を無視すると、データが破損した
り、その他のトラブルが起きたりする可能性があります。
xv
第1章 さぁはじめましょう
この章は、TortoiseSVNを初めて試す方を対象にしたものです。TortoiseSVNのインストールの仕方
や、ローカルのリポジトリをセットアップする方法、よく使われる一連の操作を説明します。
1.1. TortoiseSVNのインストール
1.1.1. システム要件
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以前で終了しました。もし
それらが必要であれば、旧バージョンをダウンロードしてインストールすることができます。
1.1.2. インストール
TortoiseSVNはインストーラーを使用すると簡単にインストールできます。インストーラーのファイ
ルをダブルクリックし、画面の指示に従ってください。後はインストーラーが面倒を見てくれます。
最後にPCを再起動するのをお忘れなく。
重要
TortoiseSVNをインストールするには、Administrator権限が必要です。インストーラー
は必要な場合、Administrator権限を確認してきます。
TortoiseSVN のユーザーインターフェイスを翻訳する言語パックが、たくさんの言語で提供されてい
ます。言語パックのインストール方法は、付録G
言語パックとスペルチェッカーを参照してくださ
い。
インストールした後に何か問題が発生した場合は、 http://tortoisesvn.net/faq.html からオンラ
インFAQを参照して下さい。
1.2. バージョン管理の基本概念
実際のファイルで事故を起こさないように、 Subversion の主要な動きと使われている用語を知って
おくことは重要です。
リポジトリ
Subversionは、すべてのバージョン管理対象のファイルとその履歴を格納するデータベースを使
用します。このデータベースをリポジトリと呼びます。一般に、リポジトリはSubversionのサー
バープログラムが動作しているファイルサーバーに配置し、必要に応じて(TortoiseSVNのよう
な)Subversionクライアントに内容を提供します。バックアップを1つしか取らないならば、す
べてのデータの重要なマスターコピーであるリポジトリのバックアップを取ってください。
作業コピー
実際にどのような作業をするのかを紹介します。各開発者は自分のローカルのPCに、自分用の作
業コピーを持ちます(サンドボックスと呼ばれることもあります)。リポジトリから最新バー
ジョンを取り出し、他の誰にも影響せずに作業し、作業が完了したら変更をコミットしてリポジ
トリに書き戻します。
Subversion の作業コピーにはプロジェクトの履歴は含まれていませんが、リポジトリに存在し
ている変更前のファイルのコピーとして維持されています。これにより、どのような変更を加え
たのかを容易に確認することができます。
1
さぁはじめましょう
TortoiseSVN をスタートメニューから使用することはあまりありません。 TortoiseSVN はシェル拡張
ですので、まず Windows エクスプローラーを起動します。エクスプローラーでフォルダを右クリッ
クすると、このようなコンテキストメニューにいくつかの新しい項目が表示されます。
図1.1 バージョン管理外フォルダーの TortoiseSVN メニュー
1.3. 試してみましょう
ここでは、小さなテスト用のリポジトリを使用して、よく使用される機能をいくつか試してみます。
当然、これは単なるクイックスタートガイドなので、全機能を説明するわけではありません。いった
ん試してみた後は、このユーザーズガイドの残り部分を時間をかけて読んでいただければ、もっと詳
しいことが分かります。また、正しい Subversion サーバーの設定に関する知識も、そちらで説明し
ています。
1.3.1. リポジトリの作成
現実のプロジェクトでは、どこか安全なサーバーにリポジトリを構築し、それを制御するために
Subversion サーバーをインストールします。今回は練習なのでサーバーを使用せず、 Subversion の
ローカルリポジトリ機能を使用し、リポジトリをローカルのハードディスクの中に構築して直接アク
セスするようにします。
最初にPC上で新しい空のディレクトリを作成します。どこに作成しても良いのですが、練習として
C:\svn_repos に作成したとします。そして、すぐに作成したフォルダーを右クリックし、コンテキ
ストメニューから TortoiseSVN → ここにリポジトリを作成... を実行します。こうすれば、リポジト
リがフォルダー内に作成され、使用可能な状態になります。また、 フォルダー構造を作成 ボタンを
クリックすれば、デフォルトの内部フォルダー構造を作成することができます。
重要
ローカルリポジトリ機能は、テストや評価にはとても便利です。しかし、1人の開発者が
1台のPCのみを使って作業をして場合を除いて、 Subversion 専用のサーバーを設置すべ
きです。小さい会社では、サーバーのセットアップ作業を嫌って、ネットワークフォル
ダー上のリポジトリをアクセスするようにしたがるかもしれません。しかし、それはや
めてください。データを失うことになります。なぜこの方法が良くないのか、またサー
バーをセットアップする方法については、「ネットワークフォルダー上のリポジトリへ
のアクセス」をお読みください。
1.3.2. プロジェクトのインポート
これでリポジトリができましたが、その中身はまだ空です。 C:\Projects\Widget1 に追加したい
ファイルのセットがあるとします。エクスプローラーで Widget1 フォルダーに移動し、右クリック
2
さぁはじめましょう
します。そして、 TortoiseSVN → インポート...
されます。
を実行すると、次のインポートダイアログが表示
図1.2 インポートダイアログ
Subversion のリポジトリは、インターネット上のどこのリポジトリでも指定できるようにURLで参照
します。この場合は、私たちが持っているローカルリポジトリのURL、 file:///c:/svn_repos/trunk
を指すようにする必要があります。そして、プロジェクト名 Widget1 を追加します。 file: の後に
3つのスラッシュあることや、スラッシュの向きにも注意してください。
このダイアログのもう1つの重要な機能が、インポートメッセージ欄です。ここには何をしているの
か説明するメッセージを入力することができます。プロジェクトの履歴を参照するとき、このコミッ
トメッセージはどのような変更をなぜ行ったのかを知る有力なガイドになります。今回は簡単
に「Widget1プロジェクトをインポート」とでも入力してください。OKボタンをクリックすると、
フォルダーがリポジトリに登録されます。
1.3.3. 作業コピーのチェックアウト
これでプロジェクトがリポジトリに登録されましたので、次に日常の作業に使用する作業コピーを作
成します。フォルダーをインポートしたとき、フォルダーが自動的に作業コピーになる訳ではないの
で注意してください。Subversionでは、新しい作業コピーを作ることをチェックアウトといいます。
リポジトリのWidget1フォルダーを、PC上の開発用フォルダーC:\Projects\Widget1-Devにチェックア
ウトしてみましょう。フォルダーを作成し、次にそれを右クリックして、TortoiseSVN → チェッ
クアウト...
を選択します。それからチェックアウト元のURLを、file:///c:/svn_repos/trunk/
Widget1のような形式で入力し、OKをクリックします。これで開発用フォルダーに、リポジトリから
ファイルが読み込まれます。
重要
初期設定では、チェックアウトのメニュー項目はTortoiseSVNのサブメニューではなく、
エクスプローラーのメニューの最上位にあります。サブメニューの外にあるTortoiseSVN
のコマンドは、先頭がSVNで始まっており、SVN チェックアウト...となっています。
3
さぁはじめましょう
この作業コピーのファイルをエクスプローラーで見ると、右下に緑色のチェックが入っていることに
気が付くと思います。これは、この作業コピーがリポジトリの中にあるファイルと同じ内容であるこ
とを示しています。
1.3.4. ファイルの変更
さて、 filename>Widget1-Dev
しかし何が変更されたのでしょうか?変更されたファイルの1つを右クリックし、 TortoiseSVN →
差分 を選択してみてください。 TortoiseSVN のファイル比較ツールが起動し、どの行が変更された
のかが厳密に表示されます。
図1.3 ファイル差分ビューアー
さて、変更の内容に問題がないようでしたら、リポジトリを更新しましょう。これを変更をコミッ
トすると言います。
Widget1-Dev
フォルダーを右クリックし、
TortoiseSVN → コミッ
ト を選択してください。コミットダイアログには変更されたファイルが、チェックボックス付きで
一覧表示されます。この中の一部のファイルのみをコミットすることもできますが、今回はすべての
ファイルをコミットしましょう。メッセージ欄に何に関する変更なのかという説明を記入し、 OK を
クリックします。ファイルがリポジトリにアップロードされていることを表示する進捗ダイアログが
表示され、コミットが完了します。
1.3.5. ファイルの追加
プロジェクトの開発が進むにつれ、新規のファイルを追加する必要が出てくるかもしれません。
Extras.c
とというファイルにある新しい機能を追加し、参照を既存の
Makefile
に
追加するとしましょう。このフォルダーを右クリックして、
TortoiseSVN
→
追
加 を実行します。追加ダイアログが表示され、バージョン管理されていないファイルがすべて表示
4
さぁはじめましょう
されるので、追加したいファイルを選択します。他にも、追加したいファイルを右クリックして、
TortoiseSVN → 追加 を実行することでファイルを追加することもできます。
次にフォルダーをコミットするとき、新しいファイルは追加と表示され、既存のファイルは変更と表
示されます。なお、変更されたファイルをダブルクリックすると、どのような変更が行われたのかを
確認することができます。
1.3.6. プロジェクトの変更履歴を見る
TortoiseSVNで最も便利な機能のひとつがログダイアログです。ここで、コミットされたファイルや
フォルダの一覧と、コミット時に入力された詳細なメッセージを見ることができます。(勧めに応じ
てコミットメッセージを入力しましたか?入力していないなら、なぜ重要なのかが分かりますね)
図1.4 ログダイアログ
はい、ここでは少しずるをしてTortoiseSVNリポジトリからのスクリーンショットを使いました。
上の欄には、コミットされたリビジョンの一覧が、コミット時のメッセージの冒頭と一緒に表示され
ます。リビジョンを1つ選択すると、中央の欄にはそのリビジョンのログメッセージの全文、下の欄
には変更されたファイルやフォルダの一覧が表示されます。
それぞれの欄でコンテキストメニューを使用すると、その情報に関する様々な操作ができます。下の
欄のファイルをダブルクリックすると、そのリビジョンでの変更の詳細を見ることができます。詳し
くは「リビジョンログダイアログ」を参照してください。
1.3.7. 変更を取り消す
どのバージョン管理システムでも、以前に行った変更を取り消す機能を持っています。元に戻したく
なったら、 TortoiseSVN では簡単に実行することができます。
5
さぁはじめましょう
まだコミットしていない変更を取り消して、ファイルを編集前の状態に戻したくなった場合は、
TortoiseSVN → 変更の取り消し... を選択します。これで変更が取り消され(この場合はごみ箱の中
に入ります)、作業をする前にコミットされたバージョンに戻すことができます。一部の変更だけを
取り消したい場合は TortoiseMerge を使用すれば、行単位に変更を確認したり、変更を取り消した
りすることができます。
特定のリビジョンで行った変更を取り消したい場合は、ログダイアログを使用して変更を取り消した
いリビジョンを探します。そして、 コンテキストメニュー → このリビジョンにおける変更を取り消
す を選択すると、そのリビジョンで変更された部分が変更前の状態に戻ります。
1.4. さあ使ってみよう
この章では TortoiseSVN の中でもっとも重要でよく使われる機能を手早く紹介してきましたが、ま
だまだ紹介しきれない機能がたくさんあります。このマニュアルの残りの部分を、時間をかけて読む
ことを強くお勧めします。特に4章日常の使用ガイドには、ふだん操作についてより詳細なことが書
かれています。
有益で読みやすい文章にするために大変苦労しましたが、まだまだ充分ではないことを認識していま
す。時間をかけて、テストリポジトリで恐れずに試してみてください。使いこむことが最良の学習で
す。
6
第2章 バージョン管理の基本概念
この章は Subversion book にある同章をわずかに変更したものです。 Subversion book のオンライ
ン版は、 http://svnbook.red-bean.com/ から読むことができます。
この章では短く簡単に Subversion の概要の説明します。バージョン管理システムが初めてならば、
この章を読めばわかるでしょう。一般的なバージョン管理の概念から始めて、 Subversion の根底に
ある考え方を説明し、 Subversion の使い方の簡単な例を紹介します。
この章の事例では、一連のプログラムソースコードの共有を扱っていますが、 Subversion はどんな
ファイルでも扱えるということを意識しておいてください。プログラマーを助けるためだけのもので
はありません。
2.1. リポジトリ
Subversion
は集中管理型の情報共有システムです。この核となるのがデータを格納するリポジト
リです。リポジトリは情報をファイルシステムツリー(簡単にいえばファイルやディレクトリの階
層)の形で格納します。複数のクライアントがリポジトリに接続し、そのファイルを読み書きしま
す。データを書き込むと他の人が情報を使用できるようになりますし、データを読み込むと他の人の
情報をクライアントが受信します。
図2.1 典型的なクライアント/サーバーシステム
このどこが画期的なのでしょうか。普通のファイルサーバーと同じようにもみえます。確かにリポジ
トリもファイルサーバーの一種ですが、ふだん見かけるものとは異なります。 Subversion のリポジ
トリが特別なのは、そこに書き込まれたすべての変更を記憶していることです。すべてのファイルに
対するすべての変更、さらにディレクトリツリー自体に対して行われた変更、たとえばファイルや
ディレクトリの追加、削除、再配置、などを記憶しています。
クライアントがリポジトリからデータを読み出すときには、普通はファイルシステムツリーの最新の
バージョンだけが見えます。しかし、ファイルシステムの 以前の 状態も見ることができます。たと
えばクライアントは、「先週の水曜日にこのディレクトリには何が入っていたのか?」、とか「最後
にこのファイルを変更したのは誰で、その人は何を変更したのか?」 といった履歴に関する調査を
することができます。これらはあらゆる バージョン管理システム の核心になる関わる問いです。つ
まりバージョン管理システムは時間と共に、データを記録し修正内容を追跡するように設計されてい
るのです。
2.2. バージョン管理モデル
どのバージョン管理システムでも、根本的な問題を解決しなければなりません。それは、どのように
ユーザーに情報の共有をさせつつ、偶然にも他人の邪魔をしないようにするかです。リポジトリ内の
他人の変更を、誤って上書きしてしまうことは容易に起こりうることです。
2.2.1. ファイル共有の問題
次のような場面を想像してみてください。2人の同僚、ハリーとサリーがいたとします。2人は同時に
同じリポジトリ内のファイルを編集しようとしています。始めにハリーが変更を保存してから、(数
7
バージョン管理の基本概念
分後に)サリーが自分の新しいファイルを偶然にも上書きする可能性があります。(システムが変更
を記憶しているので)ハリーのバージョンが永遠に失われるわけではありませんが、ハリーが行った
変更はサリーの新バージョンに隠されて見えなくなります。サリーがハリーの変更を取り込まなかっ
たからです。おそらく事故でですが、ハリーの作業は事実上失われたり、少なくとも後のバージョン
のファイルには現れなくなったりします。これは確実に回避しなければならな状況です。
図2.2 回避したい問題
2.2.2. ロック・変更・アンロックモデル
多くのバージョン管理システムでは、ロック・変更・アンロックモデルというとても単純な方法で、
この問題に対処しています。このようなシステムでは、リポジトリはひとつのファイルにつき同時に
一人しか変更できないようにしています。この場合、ハリーは変更を加える前にあらかじめロックを
しなければなりません。ファイルをロックすることは、図書館から本を貸りるようなものです。ハ
リーがファイルにロックをかけると、サリーはそこに変更を加えられなくなります。サリーがファイ
ルをロックしようとしても、リポジトリはその要求を拒否します。できるのは、ファイルを読むこと
と、ハリーが変更を終えてロックを解除するのを待つことだけです。ハリーが変更を終えてロックを
解除すると、サリーはロックして編集できるようになります。
8
バージョン管理の基本概念
図2.3 ロック・変更・アンロックモデル
ロック・変更・アンロックモデルの問題点は、少々制限が厳しいことで、しばしばユーザーの作業の
邪魔になります。
• ロックは管理上の問題を起こす可能性があります。ハリーは、ファイルをロックしたまま忘れてし
まうかもしれません。いっぽうサリーは、ファイルが編集できるようになるのをずっと待ってい
て、その間何もできません。ハリーが休暇を取ってしまったりすると、サリーは管理者にハリーの
ロックを解除してもらわなければなりません。この状況では不要な遅れと、時間の浪費が発生しま
す。
• ロックは不必要な作業待ちを発生させる可能性があります。ハリーがテキストファイルの先頭を編
集していて、サリーは同じファイルの最後を編集したいだけだとしたらどうでしょう。変更は全く
重なることがありません。簡単にファイルを同時に編集でき、互いを適切にマージできるとすれ
ば、なんの障害も発生しないでしょう。この状況では待つ必要はないはずです。
• ロックは誤った安心感を与える可能性があります。ハリーがファイルAをロックして編集し、サ
リーがファイルBをロックして編集するとします。しかし、AとBが互いに依存しあっている場合、
変更すると意味的な矛盾が発生します。突然AとBが一緒には動作しなくなります。ロック方式のシ
ステムはこの問題に対して無力です。ある意味、誤った安心感を与えていると言えるでしょう。ハ
リーもサリーもファイルをロックしたことで安全な状態に入ったと感じ、自分の作業が保護されて
いると錯覚してしまうのです。
2.2.3. コピー・変更・マージモデル
Subversion
や
CVS
などのバージョン管理システムは、ロックの代わり
に
コピー・変更・マージ
モデルを使用します。このモデルでは、ユーザーのクライ
アントが個別にリポジトリを読み込み、ファイルやプロジェクトの個人的な
作業コ
ピー を作成します。そこからユーザーは並行して作業し、個人のコピーを変更します。最後に個人
のコピーを新しい最終版にマージします。バージョン管理システムはマージの補助を行いますが、正
しくマージする最終責任は人間が負うことになります。
例を挙げましょう。ハリーとサリーがそれぞれ同じプロジェクトの作業コピーを、リポジトリからコ
ピーして作成したとします。2人とも同時に作業し、それぞれのコピーの同じファイル A に変更を加
9
バージョン管理の基本概念
えました。先にサリーがリポジトリに変更を保存します。そのあとハリーが変更を適用しようとしま
すが、ハリーのファイル A は最新ではないとリポジトリに言われてしまいます。一方、リポジトリ
のファイル A には、ハリーが最後にコピーしたときから、何らかの変更が加わっています。そこで
ハリーは、リポジトリから新しい変更点を取得し、作業コピーのファイル A にマージするように指
示を出します。幸い、サリーの変更はハリーの変更に重なりません。そのため、いったん両方の変更
点を統合してしまえば、作業コピーの内容をリポジトリに書き戻すことができます。
図2.4 コピー・変更・マージモデル
図2.5 ...コピー・変更・マージモデル(の続き)
では、サリーの変更がハリーの変更に重なっていたら?そのときはどうなるのでしょう?この状況
は競合と呼ばれ、ふつうは多発するものではありません。ハリーがクライアントプログラムに、リポ
10
バージョン管理の基本概念
ジトリの最新の変更を自分の作業コピーにマージするよう指示を出すと、作業コピーのファイル
A
は競合している状態になります。このとき彼は競合した変更を両方とも見ることができ、どちらを採
用するかを選択することができます。ソフトウェアは自動的に競合を解決できないことに注意してく
ださい。理解し正しく選択する力を持っているのは人間だけです。ハリーがいったん重なった変更を
解決したら、(おそらくサリーと競合について話し合ったあとで)マージしたファイルを安全にリポ
ジトリに保存できます。
コピー・変更・マージモデルは少々無秩序に見えますが、実際にはとてもスムーズに事が進みます。
ユーザーは他の人を待つこともなく、並行して作業を進められます。同じファイルに対して作業を
行った場合でも、ほとんどの変更は重ならないことが分かると思います。そして、競合を解決するの
にかかる時間は、ロックシステムで失われる時間よりもずっと少ないのです。
このことは、最終的にひとつの重要な要因にたどり着きます。ユーザー間のコミュニケーションで
す。ユーザーがお互いに意見をやりとりしなければ、構文上・意味上の競合が増えていきます。どん
なシステムもユーザーに完璧なコミュニケーションを強要できませんし、意味上の競合も検出できま
せん。したがって、ロックシステムなら競合は防げるなどという間違った思い込みで安心するなど、
全く意味がありません。実際には、ロックは生産性を下げる以外の何物でもないように思えます。
ロック・変更・アンロックモデルの方がよいといわれる事例もあります。マージできないファイルが
ある場合です。例えば、リポジトリに画像イメージが含まれている場合、2人が同時にイメージを変
更してもこれをマージする方法はありません。ハリーとサリーのどちらも自分の行った変更を失って
しまいます。
2.2.4. Subversionではどうしているのか
通常、 Subversion はコピー・変更・マージモデルを使用しますし、ほとんどの場合この方法が求め
られていると思います。しかし、バージョン1.2で、 Subversion はファイルのロックもサポートし
ました。したがって、マージできないファイルがあったり、管理するのに単にロックポリシーを強制
したりしたい場合にも、 Subversion は必要に応じてそういった機能を提供することができます。
2.3. Subversionの動作
2.3.1. 作業コピー
作業コピーについてはすでに説明したとおりですので、今度は Subversion クライアントでどのよう
に作業コピーを作成したり使用したりするかを見ていきましょう。
Subversion の作業コピーは、ローカルシステム上にある通常のディレクトリツリーで、ここにファ
イルが集められています。お望みのファイルをどれでも編集することができますし、それがソース
コードのファイルなら、いつも通りそのファイルからプログラムをコンパイルできます。作業コピー
は自分の個人的な作業場所です。 Subversion が他人の変更をここに組み込むことはありませんし、
同様に、明確に指示するまで自分の変更が他人に公開されることもありません。
作業コピーのファイルに変更を加え、それがうまく動作することを確認したあとで、その変更を同じ
プロジェクトで一緒に作業しているほかの人に(リポジトリに書き込むことで) 公開 するためのコ
マンドが Subversion には用意されています。また、他の人の変更が公開されたときは、その変更を
(リポジトリから読み出して)自分の作業コピーにマージするコマンドが用意されています。
作業コピーには、 Subversion のコマンドの実行を補助するために、作成・保守される特別なファイ
ルがあります。具体的には、作業コピーの中に .svn という名前のサブディレクトリが作られます。
これは作業コピーの
管理ディレクトリ
として知られています。管理ディレクトリ内のファイル
は、まだ公開していない変更があるか、また他の人の作業によって最新でなくなっているかを
Subversion が認識する助けになります。 Subversion 1.7 以前では、 .svn ディレクト
リは作業コピー内のバージョン管理対象のディレクトリそれぞれに作られていました。 Subversion
1.7 で完全に方法が変更され、各作業コピーが持つ管理ディレクトリは作業コピーのルートの直下に
1つだけ作られるようになりました。
典型的な Subversion リポジトリでは、いくつものプロジェクトのファイル(やソースコード)を保
持し、リポジトリのファイルシステムツリー以下に、プロジェクトごとのサブディレクトリを置いて
います。この配置では、ユーザーの作業コピーは大抵リポジトリの特定のサブツリーに相当します。
11
バージョン管理の基本概念
例えば、2つのソフトウェアプロジェクトがあるリポジトリがあったとします。
図2.6 リポジトリのファイルシステム
具体的には、リポジトリのルートディレクトリに paint と calc というサブディレクトリがありま
す。
作業コピーを取得するために、リポジトリのサブツリーを チェックアウト しなければなりません
(チェックアウト は、リソースのロックや予約が必要なように思われますが、そんなことはありま
せん。単に、プロジェクトのプライベートなコピーを作成するだけです)。
button.c を変更したとしましょう。 .svn ディレクトリには、ファイルの変更日時と元の内容が記録
されていますから、 Subversion はファイルが変更されていることがわかります。しかし、変更は明
確に指示するまで公開はされません。変更を公開する操作は通常、変更をリポジトリへ コミット す
る(もしくは チェックイン する)と呼ばれています。
変更を他の人に公開するには、 Subversion のコミット(commit)コマンドを使用します。
さて、 button.c への変更を、リポジトリにコミットした後で、他のユーザーが /calc の作業コピー
をチェックアウトすると、変更が反映された最新版のファイルが取得されます。
自分にサリーという相棒がいて、 /calc の作業コピーを自分と同時にチェックアウトしたとしま
す。自分が button.c の変更をコミットしても、サリーの作業コピーは変更されません。 Subversion
はユーザーが操作しないと作業コピーを更新しないからです。
サリーのプロジェクトを最新状態にするには、Subversion に作業コピーを 更新 するよう指示し
ます。これは Subversion の更新(update)コマンドを使用します。これによって、自分の変更がサ
リーの作業コピーに組み込まれ、またチェックアウト後にコミットされた他の人の変更も同様に組み
込まれます。
サリーは、どのファイルを更新するかを指定する必要はありません。Subversion は .svn ディレクト
リの情報とリポジトリ内の詳細情報を使用して、どのファイルを更新するか決めるのです。
2.3.2. リポジトリ URL
Subversion のリポジトリは、ローカルディスクや様々なネットワークプロトコル経由など、多様な
方法でアクセスできます。しかし、リポジトリの位置は常に URL で表します。 URL スキーマはアク
セス方法を表します。
12
バージョン管理の基本概念
スキーマ
アクセス方法
file://
ローカルないしネットワークドライブのリポジトリに直接アクセスし
ます。
http://
Subversion を組み込んだ Apache サーバーに WebDAV プロトコルでア
クセスします。
https://
http:// と同じですが、SSL 暗号化を用います。
svn://
認証のない TCP/IP による独自プロトコルで svnserve サーバーにア
クセスします。
svn+ssh://
認証・暗号化された TCP/IP による独自プロトコルで svnserve サー
バーにアクセスします。
表2.1 リポジトリにアクセスするURL
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はこの要求には難しい部分があります。
• 誰かが新しいバージョンのクライアントをインストールしてリポジトリのフォーマットをアップグ
レードすると、全員が新しいバージョンのクライアントにアップグレードするまで、リポジトリに
アクセスできなくなります。
2.3.3. リビジョン
svn commit (コミット)の操作は、ファイルやディレクトリの変更を、単一の不可分トランザク
ションで公開します。作業コピーで、ファイル内容の変更、ファイルやディレクトリの作成、削除、
名前の変更、コピーなど行い、それ全体を単位とした完全な変更セットをコミットできます。
リポジトリでは、コミットを不可分トランザクションとして扱い、変更をすべて配置するか、何も配
置しないかのどちらかになります。 Subversion はプログラムの異常終了や、システムの異常終了、
ネットワーク障害、他のユーザーの操作に直面しても、この最小単位を保持しようとします。
13
バージョン管理の基本概念
リポジトリがコミットを受け付けるごとに、ファイルシステムツリーの状態が新しく作成されます。
これを リビジョン と呼びます。リビジョンごとに一意の自然数が割り当てられ、直前のリビジョン
よりも1だけ大きくなります。リポジトリを新規作成した直後のリビジョンは 0 で、ルートディレク
トリ以外はなにも含まれていません。
リポジトリを視覚化するよい方法は、ツリーの連続で表すというものです。 0 から始まるリビジョ
ン番号の配列が、左から右に追加されていく状況を想像してください。それぞれのリビジョン番号に
は対応したファイルシステムツリーがあり、それぞれのツリーはコミット後のリポジトリの状態を示
す「スナップショット」です。
図2.7 リポジトリ
グローバルリビジョン番号
多くのバージョン管理システムとは異なり、
Subversion
のリビジョン番号は
ツリー全
体 に対して付与されるもので、個々のファイルに付与されるものではありません。それぞれの
リビジョン番号はツリー全体を特定し、ある変更をコミットした後のリポジトリの特定の状態
を表します。言い換えると、リビジョン N は N 番目のコミット後のリポジトリファイルシステ
ムの状態を表すと言えます。 Subversion のユーザーが、「リビジョン 5 の foo.c」と言うと
き、それが実際に意味するものは、「リビジョン 5 に現れる foo.c」です。一般に、あるファ
イルのリビジョン N と M は異なっているとは 限りません 。
作業コピーが、リポジトリの特定のリビジョンに常に対応しているとは限らないということに充分注
意してください。複数の異なるリビジョンが混在している可能性があります。たとえば、最新のリビ
ジョンが 4 であるリポジトリから、作業コピーをチェックアウトしたとします。
calc/Makefile:4
integer.c:4
button.c:4
この時点では作業ディレクトリは、リポジトリのリビジョン 4 と完全に一致します。しかし、ここ
で button.c に変更を加え、変更をコミットしたとします。他にコミットした人がいなければ、この
コミットではリポジトリにリビジョン 5 を作成し、作業コピーの内容は以下のようになります。
calc/Makefile:4
integer.c:4
button.c:5
14
バージョン管理の基本概念
この時点で、サリーが 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 にして、最新であることを表現します。そのため作業コピーのトップでまっさらな更新を行うと、
一般的に、作業コピーはリポジトリの特定のリビジョンに完全に一致します。
2.3.4. 作業コピーのリポジトリ追跡方法
作業ディレクトリ内のファイルに対して、Subversion は2つの本質的な情報を .svn/ 管理領域に記
録します。
• 作業しているファイルが基づいているリビジョン(これは
び、
作業リビジョン
と呼ばれる)、およ
• ローカルコピーをリポジトリから更新したときに記録したタイムスタンプ、です。
この情報とリポジトリとのやりとりによって、 Subversion は、作業ファイルが以下の4つの状態の
どれかを確認できます。
変更しておらず、最新版である
作業ディレクトリのファイルが変更されておらず、作業リビジョン以降に行われたリポジトリへ
のコミットでもそのファイルが変更されていない状態です。そのファイルに対するコミット
(commit)は何も行われないし、更新(update)も何も行われません。
ローカルで変更しており、最新版である
作業ディレクトリのファイルは変更されているが、作業リビジョン以降に行われたリポジトリへ
のコミットではそのファイルが変更されていない状態です。ローカルにはコミットしていない変
更があるので、そのファイルに対するコミット(commit)は成功し、ローカルの変更が公開され
ます。また、更新(update)では何も行われません。
変更しておらず、最新版ではない
作業ディレクトリのファイルは変更されていないが、リポジトリ上のファイルは変更されている
状態です。このファイルを最新の公開リビジョンにするため、どこかで更新しなければなりませ
ん。このファイルへのコミット(commit)は何も行われませんが、更新(update)では作業コ
ピーに最新の変更が反映されます。
ローカルで変更しておらず、かつ最新版ではない
ファイルは作業ディレクトリでも、リポジトリ上でも変更された状態です。このファイルへのコ
ミット(commit)は 作業コピーは最新ではありません というエラーになります。まず、その
ファイルを更新しなければなりません。ファイルに対して更新(update)を行うと、公開されて
いる変更点が、ローカルで変更を行った作業コピーにマージされます。これが自動的にできない
ような状況の場合、ユーザーが競合の解決を行うため、そのままになります。
2.4. まとめ
この章では Subversion の基本的な考え方の数々を一覧しました。
• リポジトリによる集中管理、クライアントの作業コピー、リポジトリのリビジョンツリーの配列、
といった概念を紹介しました。
15
バージョン管理の基本概念
• 2人の共同作業者が Subversion 上で、「コピー・変更・マージ」モデルを使用して、どのように
お互いの変更を公開・取得するかを簡単な例で見てきました。
• Subversion が作業コピーの情報を追跡・管理する方法について少し触れました。
16
第3章 リポジトリ
リポジトリにアクセスするためにどのプロトコルを使用する場合でも、少なくとも1つはリポジトリ
を作成する必要があります。リポジトリは
Subversion
のコマンドラインクライアントでも、
TortoiseSVN でも作成できます。
まだ Subversion のリポジトリを作成していないのなら、さっそく作成しましょう。
3.1. リポジトリの作成
3.1.1. コマンドラインクライアントを使用したリポジトリの作成
1. リポジトリのルートフォルダーとして SVN という空のフォルダー(ここでは D:\SVN\ とします)
を作成してください。
2. D:\SVN\ の中に MyNewRepository というフォルダーを作成してください。
3. コマンドプロンプト(またはDOS-Box)を開いて D:\SVN\に移動し、以下のコマンドを実行してくだ
さい。
svnadmin create --fs-type fsfs MyNewRepository
これで、 D:\SVN\MyNewRepository に新しいリポジトリを作成できました。
3.1.2. TortoiseSVNを使用したリポジトリの作成
図3.1 バージョン管理外フォルダーの TortoiseSVN メニュー
1. Windows エクスプローラーを開いてください。
2. 新しいフォルダーを作成し、名前をつけてください(例えば SVNRepository)。
3. 新しく作成したフォルダーで右クリックし、 TortoiseSVN → ここにリポジトリを作成... を選択
してください。
リポジトリは新しいフォルダーの内部に作成されます。 そのファイルを自分で編集しないでくだ
さい!!! エラーが発生したら、フォルダーが空であるか、または書き込み禁止されていないかを確
認してください。
リポジトリ内にディレクトリ構造を作成したいと思うかもしれません。その場合は、 「リポジト
リのレイアウト」に示したレイアウトオプション参照してください。
17
リポジトリ
ローカルのリポジトリを識別しやすくするために、 TortoiseSVN ではリポジトリを作成する際に
カスタムフォルダーアイコンが設定されます。公式のコマンドラインクライアントを使用してリ
ポジトリを作成した場合は、このフォルダーアイコンは設定されません。
ヒント
ローカルのテスト用途でない限り、 file:// アクセスは使用しないこともお勧めしま
す。サーバーを使用した方が、一人で開発する場合を除いて、全てにおいてより安全で
より信頼性が高くなります。
3.1.3. リポジトリへのローカルアクセス
ローカルリポジトリにアクセスするには、そのフォルダーへのパスが必要です。 Subversion では
すべてリポジトリのパスを file:///C:/SVNRepository/ という形で表すことを覚えておいてくださ
い。すべてスラッシュ(「/」)を使用することに注意してください。
ネットワークフォルダー上のリポジトリにアクセスするには、ドライブ文字の割り当てと UNC パス
の両方が使えます。 UNC パスは file://ServerName/path/to/repos/ といった形です。先頭にスラッ
シュ(「/」)が2つあることに注意してください。
SVN 1.2 以前では、UNC パスは file:///\\ServerName/path/to/repos というもっと曖昧な形でし
た。この形もまだサポートしていますが、お勧めしません。
3.1.4. ネットワークフォルダー上のリポジトリへのアクセス
原理上、FSFSリポジトリはネットワークフォルダー上に配置でき、file://プロトコルを用いて複数
のユーザーからアクセスできますが、これは絶対にお勧め しません 。実際のところ、このような使
い方を私たちは思いとどまってほしいと強く思いますし、様々な理由からサポートもしません。
• 第一に、すべてのユーザーにリポジトリへ直接書き込みアクセスする権限を与えることになるの
で、誰かが誤ってリポジトリ全体を削除したり、何らかの方法で使用できなくしたりすることがで
きてしまいます。
• 第二に、すべてのネットワークファイル共有プロトコルが、 Subversion が要求するロック機能を
サポートしているわけではなく、リポジトリが壊れた状態に見えてしまう可能性があります。すぐ
には起こらないかも知れませんが、ある日2人のユーザーが、同時にリポジトリにアクセスしよう
とすることもあるでしょう。
• 第三に、ファイルのアクセス権をきちんと設定しなければなりません。ネイティブの Windows 共
有ではうまくいくかも知れませんが、 Samba では特に困難です。
• 誰かが新しいバージョンのクライアントをインストールしてリポジトリのフォーマットをアップグ
レードすると、全員が新しいバージョンのクライアントにアップグレードするまで、リポジトリに
アクセスできなくなります。
file:// アクセスは、ローカルでの1ユーザーのみのアクセスを想定しており、そのようにテストと
デバッグを行っています。リポジトリを共有したい場合は、 まさに 適切なサーバーをセットアップ
する必要がある場面であり、それは見かけほど難しくはありません。サーバーの選択・設定のガイド
ラインは、 「リポジトリへのアクセス」 をお読みください。
3.1.5. リポジトリのレイアウト
データをリポジトリにインポートする前に、データをどのような構成にするかをはじめに考える必要
があります。おすすめのレイアウトを採用すれば、あとがより楽になるでしょう。
リポジトリの構成には標準的な、おすすめの方法があります。多くの人は開発の「メインライン」を
保持するためのトランク(trunk)ディレクトリ、ブランチコピーを入れるブランチ(branches)
18
リポジトリ
ディレクトリ、そしてタグコピーを入れるタグ(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 はお好みにあわせて移動したり名前を変更した
りできます。
あるレイアウトから別のレイアウトへ切り替えるのは、ただ単にサーバー側で移動するだけです。リ
ポジトリの構成が気に入らなければ、ディレクトリを移動させてください。
19
リポジトリ
そのため、まだ基本的なフォルダー構造を、リポジトリに作成していないのであれば、今のうちに
やっておくべきです。これを行うには、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
3.2. リポジトリのバックアップ
どのタイプのリポジトリを使用する場合でも、定期バックアップの保守作業を行い、バックアップを
検査することは非常に重要です。サーバーを破損すると、最新のバージョンのファイルにはアクセス
できるかもしれませんが、リポジトリがなければ履歴が永遠に失われてしまいます。
一番単純な(ただしおすすめできない)方法は、単純にリポジトリのフォルダーをバックアップ領域に
コピーすることです。しかし、データにアクセス中の別のプログラムが一切ないことを確認しておく
必要があります。ここでいうアクセスとはすべてのアクセスを意味します。もしコピー中にリポジト
リにアクセス(Webブラウザーが開かれている、WebSVNなど)があると、バックアップしたデータは不
正になります。
おすすめは
svnadmin hotcopy path/to/repository path/to/backup
を実行して安全にリポジトリーのコピーを作成する方法です。その後、コピーしたものをバックアッ
プします。
Subversion のコマンドラインクライアントをインストールすると、svnadminツールが自動的にイン
ストールされます。このツールを入手するには、TortoiseSVNのインストール時にコマンドライン
ツールを含めるようチェックを入れるのが一番簡単でしょう。しかし、コマンドラインツールの最新
バージョンを入手したいのであれば、Subversion
[http://subversion.apache.org/
packages.html]のウェブサイトから直接ダウンロードすることもできます。
3.3. サーバー側フックスクリプト
フックスクリプトは、リポジトリのイベント(新しいリビジョンの作成やバージョン管理外のプロパ
ティの変更など)を引き金に動作するプログラムです。いずれのフックも、イベントが何か、操作の
20
リポジトリ
対象は何か、イベントを発生させた人物のユーザー名、といった情報を受け取ります。フックの出力
や終了ステータスによって、フックプログラムは動作の続行、停止、中断を切り替えることになりま
す。実装されているフックについての詳細は、 Subversion Book の Hook Scripts [http://
svnbook.red-bean.com/en/1.8/svn.reposadmin.create.html#svn.reposadmin.create.hooks] の章を
参照してください。
フックスクリプトは、リポジトリのあるサーバーで実行されます。 TortoiseSVN では、イベントが
発生した時にローカルで実行される、クライアント側フックスクリプトも設定できます。詳細は
「クライアント側フックスクリプト」をご覧ください。
フックスクリプトのサンプルは、リポジトリの hooks ディレクトリにあります。これらのサンプル
スクリプトは Unix/Linux サーバー用であり、Windows ベースのサーバーの場合は修正が必要となり
ます。フックはバッチファイルもしくは実行形式です。以下のサンプルは pre-revprop-change フッ
クを実装したバッチファイルの例です。
rem ログメッセージのみを変更可能にする。
if "%4" == "svn:log" exit 0
echo 「%4」プロパティは変更できません >&2
exit 1
標準出力へ出力されたものは、すべて破棄されてしまうことに注意してください。コミットを拒否す
るダイアログにメッセージを表示したい場合は、標準エラー出力に出力しなければなりません。この
バッチファイルでは >&2 を使用しています。
フックを上書きする方法
フックスクリプトがコミットを拒否した場合、それが最終決定となります。しかし、ス
クリプトの中に 合言葉 を埋め込むことで、その操作を上書きすることができます。スク
リプトが処理を拒否しようとした場合に、特殊なパスフレーズ、特殊なパスフレーズ、
固定長のフレーズ、プリフィックス付きのファイル名などをログメッセージからスキャ
ンさせ、合言葉を見つけた場合にはコミットを実行することができるようにします。も
し合言葉が見つからない場合は、「合言葉が合いません」と表示してブロックするよう
にします。 :-)
3.4. チェックアウトリンク
Subversion リポジトリを他の人に使用できるようにする場合は、ウェブサイトからリンクを張るか
もしれません。他の TortoiseSVN のユーザーに チェックアウトリンク を提供すると、アクセスし
やすくなります。
TortoiseSVN をインストールするときに、新しく tsvn: プロトコルを登録します。 TortoiseSVN の
ユーザーがこのリンクをクリックすると、リポジトリの URL が入力された状態でチェックアウトダ
イアログが開くようになります。
このようなリンクを自分のHTMLページに含めるには、次のようなコードを追加してください。
<a href="tsvn:http://project.domain.org/svn/trunk">
</a>
もちろん、適切な画像を含めれば、もっと見栄えが良くなるでしょう。
TortoiseSVNのロゴ
[http://tortoisesvn.net/images/TortoiseCheckout.png] を使用したり、好きな画像を使用したり
すればよいでしょう。
<a href="tsvn:http://project.domain.org/svn/trunk">
<img src=TortoiseCheckout.png></a>
21
リポジトリ
また、特定のリビジョンを指定したリンクにすることもできます。次のようにしてください。
<a href="tsvn:http://project.domain.org/svn/trunk?100">
</a>
3.5. リポジトリへのアクセス
TortoiseSVN (または、その他の Subversion クライアント)を使用する場合、リポジトリを配置
する場所が必要です。リポジトリをローカルに配置して、 file:// プロトコルでアクセスしたり、
サーバー上に配置して http:// や svn:// プロトコルでアクセスしたりすることもできます。2つと
も暗号化したものを使用することができます。 https:// や svn+ssh:// を使うか、SASL とともに
svn:// を使用することもできます。
Google Code [http://code.google.com/hosting/] のような公開ホスティングサービスを使用してい
る場合や、誰かがすでにサーバーをセットアップしている場合、何もする必要はありません。 4章日
常の使用ガイド に進んでください。
サーバーを持っておらず、一人で作業している場合や、 Subversion
や
TortoiseSVN
を
試験環境で評価中の場合、ローカルリポジトリを作成するのが最適かもしれません。
3章リポジト
リ の始めで説明しているように、自分のPCにリポジトリを作成してください。使い始めるための方
法を探すのであれば、この章の残りを読み飛ばして 4章日常の使用ガイド へ直接進んでもかまいま
せん。
複数のユーザーが使用するリポジトリを、ネットワークフォルダー上に構築しようと考えているな
ら、考え直してください。なぜこの方法が良くないのか、詳細は 「ネットワークフォルダー上のリ
ポジトリへのアクセス」 をお読みください。サーバーの構築は見かけほど難しくありませんし、信
頼性や、恐らく速度も向上します。
Subversion サーバーのオプションの詳細や、状況に応じた最適な構成については、 Subversion book
の Server Configuration [http://svnbook.red-bean.com/en/1.8/svn.serverconfig.html] を参照
してください。
初期のころの Subversion では、サーバーを設定するために、サーバー設定について充分に理解して
いなければならなかったため、このマニュアルの以前のバージョンでは、サーバーをセットアップす
る方法を詳細に説明していました。最近は、セットアップや設定プロセスをガイドしてくれる、パッ
ケージ化されたサーバーインストーラーがいくつか配布されているので簡単になりました。私たちが
把握しているインストーラーとしては、
• VisualSVN [http://www.visualsvn.com/server/]
• CollabNet [http://www.open.collab.net/products/subversion/whatsnew.html]
• UberSVN [http://www.ubersvn.com/]
があります。最新版は Subversion [http://subversion.apache.org/packages.html] のウェブサイト
から、いつでも入手することができます。
それ以外の手順については、 TortoiseSVN [http://tortoisesvn.net/usefultips.html] のウェブサ
イトで説明されています。
22
第4章 日常の使用ガイド
このドキュメントでは、 TortoiseSVN クライアントの日々の使い方を説明しています。バージョン
管理システムの解説 ではなく 、 Subversion (SVN) の解説 でもありません 。やりたいことがおよ
そ分かっているが、どうやって操作するか思い出せない場合に、調べる場所として便利です。
Subversion でのバージョン管理の入門書が必要なら、 Subversion によるバージョン管理 [http://
svnbook.red-bean.com/] というすばらしい本をお薦めします。
このドキュメントは、 TortoiseSVN や Subversion と同様、現在も作成途中です。間違いがあったら
私たちが修正できるよう、メーリングリストに投稿してください。日常操作ガイドのスクリーン
ショットの中には、現在のソフトウェアの状態を反映していないものがあるかもしれません。ご容赦
ください。 TortoiseSVN の作業は空き時間でしているのです。
日常操作ガイドを最大限に活用するには、
• すでに TortoiseSVN をインストールしてあること
• バージョン管理システムになじみがあること
• Subversion の基本を知っていること
• サーバーのセットアップが済んでいるなど、
なっていること
Subversion
のリポジトリにアクセスできるように
を前提とします。
4.1. 機能概要
この章では、このマニュアルのほぼすべてに適用される TortoiseSVN の機能の一部をを説明しま
す。多くの機能は、 Subversion の作業コピーの中でしか機能しないことに注意してください。
4.1.1. アイコンオーバーレイ
図4.1 エクスプローラーのアイコンオーバーレイ表示
TortoiseSVN
のもっとも目に見える機能のひとつが、作業コピーのファイルに現れるアイコンオー
バーレイです。これにより、ファイルが変更されているかどうかが一目瞭然となります。オーバーレ
イが表す内容については、 「アイコンオーバーレイ」 をご覧ください。
4.1.2. コンテキストメニュー
23
日常の使用ガイド
図4.2 バージョン管理下のフォルダーのコンテキストメニュー
TortoiseSVN のコマンドは、すべて Windows エクスプローラーのコンテキストメニューから呼び出し
ます。ファイルやフォルダーを右クリックすると、多くは直接見えています。コマンドは、ファイル
やフォルダーであるかどうか、その親フォルダーがバージョン管理下にあるかどうかで変わります。
TortoiseSVN のメニューは、エクスプローラーのファイルメニューにも現れます。
ヒント
めったに使用されない幾つかのコマンドは、拡張コンテキストメニューでのみ使用でき
ます。拡張コンテキストメニューを表示するためには、 Shift キーを押しながら右ク
リックしてください。
場合によっては、TortoiseSVN のエントリを、複数目にするかもしれません。これはバグではありま
せん。
24
日常の使用ガイド
図4.3 バージョン管理されたフォルダー内のショートカットに対するエクスプロー
ラーのファイルメニュー
この例では、バージョン管理下のフォルダー内にバージョン管理外のショートカットがある場合、エ
クスプローラーのファイルメニューに
TortoiseSVN
のエントリが
3
つ 現れます。ひとつはフォルダー用、ひとつはショートカット用、最後にショートカットが指すオ
ブジェクト用です。見分けるためにアイコンの右下に、ファイル、フォルダー、ショートカットのメ
ニューエントリか、複数選択した項目かを示すマークがつきます。
4.1.3. ドラッグ&ドロップ
図4.4 バージョン管理下のディレクトリに対する右ドラッグメニュー
作業コピーの中にファイルやフォルダーを右ドラッグしたり、バージョン管理下のディレクトリに
バージョン管理外のファイルやフォルダーを右ドラッグしたりすると、そのドラッグハンドラによっ
て他のコマンドが有効になります。
25
日常の使用ガイド
4.1.4. 共通のショートカット
共通の操作は Windows のショートカットでよく知られていますが、ボタンに表示されるわけではあ
りませんし、メニューもありません。「表示を更新する」のように、したいことが明確なのに方法が
分からない場合は、ここをチェックしてみてください。
F1
もちろんヘルプです。
F5
現在の表示を最新の情報に更新します。もしかしたら、最も便利なワンキーコマンドかもしれま
せん。例えば……エクスプローラーでは、作業コピーのアイコンオーバーレイを更新します。コ
ミットダイアログでは作業コピーを再走査し、コミットが必要なファイルを探します。リビジョ
ンログダイアログではリポジトリに再接続し、最新の変更をチェックします。
Ctrl+A
すべて選択します。エラーメッセージが出て電子メールにコピー&ペーストしたいときに使用で
きます。 Ctrl+A でエラーメッセージを選択して...
Ctrl+C
選択中の文字列をコピーします。文字列が選択されていない時も、たとえばリストの項目やメッ
セージボックスの場合は、リスト項目の中身やメッセージボックスがクリップボードにコピーさ
れます。
4.1.5. 認証
アクセスしようとしているリポジトリがパスワードで保護されている場合、認証ダイアログが表示さ
れます。
図4.5 認証ダイアログ
ユーザー名とパスワードを入力してください。チェックボックスをチェックすると、証明書が保存さ
れます。証明書は Subversion のデフォルトディレクトリ(%APPDATA%\Subversion\auth)にある、
次の3つのサブディレクトリに格納されます。
• svn.simple
には基本認証(ユーザー名/パスワード)の証明書が格納されます。パスワードは
WinCrypt を使用して保存され、プレーンテキスト形式では保存されません。
• svn.ssl.server には SSL サーバー証明書が格納されます。
• svn.username
す。
には、(パスワードがいらない)ユーザー名のみで認証用する証明書が格納されま
26
日常の使用ガイド
認証情報のキャッシュをクリアするには、TortoiseSVNの設定ダイアログの 保存されたデータページ
から行えます。すべて消去ボタンで、すべてのリポジトリのキャッシュされた認証データを消去しま
す。消去...ボタンではキャッシュされた認証データのうちどれを消去するかを選択するダイアログ
が表示されます。「保存データの設定」 を参照してください。
Windows
のログオフ時やシャットダウン時に認証データを削除したい場合は、
%APPDATA%
\Subversion\auth ディレクトリを削除するシャットダウンスクリプトを使用すれば実現できます。
例えば、
@echo off
rmdir /s /q "%APPDATA%\Subversion\auth"
このようなスクリプトをインストールする方法は、http://www.windows-help-central.com/windowsshutdown-script.html に説明があります。
認証とアクセスコントロールに関して、サーバーをどのようにセットアップするかに関する情報は、
「リポジトリへのアクセス」を参照ください。
4.1.6. ウィンドウの最大化
TortoiseSVN のダイアログの多くは、大量の情報を表示します。しかし、これを画面全体に最大化す
るよりは、縦方向・横方向のみ最大化した方が便利な場合があります。
最大化
ボタンに便利な
ショートカットを用意しています。マウスで中クリックすると縦に最大化され、右クリックすると横
方向に最大化されます。
4.2. リポジトリへのデータのインポート
4.2.1. インポート
すでにいくつかのプロジェクトが登録されているリポジトリにインポートする場合、リポジトリ構造
はすでに決まっていることでしょう。新しいリポジトリにデータをインポートする場合には、どのよ
うにリポジトリを構成するかを考えるのに、時間を費やす価値はあります。もっとアドバイスが必要
であれば、 「リポジトリのレイアウト」をお読みください。
この章では、 Subversion のインポート(import)コマンドについて解説しています。このコマンド
は、ディレクトリ階層を一度にリポジトリにインポートするよう設計されています。この動作には、
いくつか欠点もあります。
• 「常に無視するファイル」で設定する以外に、インポートするファイルやフォルダーを選択する方
法がない。
• インポートしたフォルダーが作業コピーにならない。サーバーからファイルをコピーし反映するに
は、チェックアウトが必要である。
• 間違った階層のフォルダーを、リポジトリにインポートしてしまいがちである。
このような理由から、リポジトリに初期構造の /trunk /tags /branches を作成する場合を除い
て、import コマンドを使用せずに、 「その場でインポート」 で説明している2段階の手順で実行す
ることをお勧めします。ここでは、基本的なインポートのしかたを示します。
リポジトリにプロジェクトをインポートする前に、次の作業を行ってください。
1. プロジェクトの構築に必要ないファイル(一時ファイル、 *.obj のようなコンパイラーが生成し
たファイル、コンパイルされたバイナリ、……)は削除してください。
2. フォルダーやサブフォルダーにファイルを整理してください。あとでファイルを削除・移動する
こともできますが、インポートの前にプロジェクトの構造をしっかり決めておくことを強くお勧
めします。
27
日常の使用ガイド
そして Windows エクスプローラーで、プロジェクトのディレクトリ構造の最上位フォルダーを選択
し、右クリックでコンテキストメニューを出してください。 TortoiseSVN → インポート... コマンド
を選択すると、次のダイアログボックスが表示されます。
図4.6 インポートダイアログ
このダイアログで、プロジェクトのインポート先のリポジトリの場所を示すURLを入力する必要があ
ります。リポジトリには、インポートしようとするローカルフォルダーは現れず、その中身だけが現
れるということ注意してください。例えば次のような構造があるとします。
C:\Projects\Widget\source
C:\Projects\Widget\doc
C:\Projects\Widget\images
ここで、
C:\Projects\Widget
を
http://mydomain.com/svn/trunk
にインポートする
と、Widget
サブディレクトリではなく、その中のサブディレクトリが
trunk
の直下に現れ
るので、驚くかもしれません。サブディレクトリ名は、
http://mydomain.com/svn/trunk/WidgetX というようにURLの一部として指定する必要があります。インポートコマンドでは、リポジトリの
中にサブディレクトリがない場合、自動的に作成されることに注意してください。
インポートメッセージは、ログメッセージとして使われます。
デフォルトでは、常に無視するパターンにマッチしたファイル・フォルダーはインポートされませ
ん。 無視ファイルを含める チェックボックスを使用すると、この動作を上書きします。常に無視す
るパターンの設定の詳細は 「一般設定」をご覧ください。
OK を押すと、TortoiseSVN は全てのファイルが入った完全なディレクトリを、リポジトリにイン
ポートします。これでプロジェクトがバージョン管理下にあるリポジトリに格納されました。なお、
インポートしたフォルダーは、バージョン管理下に入りません。バージョン管理下の
作業コ
ピー を取得するには、インポートしたときのバージョンをチェックアウトする必要があります。も
しくは、フォルダーをその場でインポートする方法をご覧ください。
4.2.2. その場でインポート
28
日常の使用ガイド
既にリポジトリが存在していて、新しいフォルダー構造を追加する場合は、次のように操作してくだ
さい。
1. リポジトリブラウザーを使用して、リポジトリに新しいプロジェクトフォルダーを直接作成しま
す。標準的なレイアウトを使用している場合は、リポジトリのルート直下ではなく、 trunk のサ
ブフォルダーとして作成した方が良いでしょう。リポジトリブラウザーは、ちょうど Windows の
エクスプローラーのようにリポジトリ構造を表示しますので、どのように整理されているかを見
ることができます。
2. 新しいフォルダーを、インポートしたいフォルダーの上位層にチェックアウトします。ローカル
フォルダーが空でないという警告が表示されますが、無視してください。バージョン管理下の
フォルダーの中に、バージョン管理外の内容がある状態になります。
3. バージョン管理下のフォルダー上で TortoiseSVN → 追加... を使用して、内容の一部または全部
を追加してください。ファイルの追加や削除、フォルダーへの svn:ignore プロパティの設定な
ど、必要な変更を加えることができます。
4. 最上位のフォルダーをコミットしてください。これで新しいバージョン管理下のツリーと、既存
フォルダーから作成したローカルの作業コピーを得られます。
4.2.3. 特殊なファイル
バージョン管理下のファイルに、ユーザー別のデータを含める必要がある場合があります。つまり、
それぞれのユーザー・開発者別に、環境に合わせて変更しなければならないファイルがある場合で
す。そういったファイルは、ユーザーがそれぞれいつでもリポジトリにコミットしてしまうことがで
きるために、バージョン管理が難しくなります。
このような場合、テンプレートファイルを使用することをお勧めします。開発者が必要な全てのデー
タを含むファイルを作成し、そのファイルをバージョン管理下に置きます。開発者はそのファイルを
チェックアウトします。それから、それぞれの開発者がそのファイルのコピーを作成し、名前を変更
します。そうするとコピーを変更してもなんの問題もありません。
たとえば、TortoiseSVN
の構築スクリプトを参照してください。このファイルの名前は
default.build.user ですが、リポジトリにはありません。default.build.user.tmpl ファイルがあ
るだけです。default.build.user.tmpl はテンプレートファイルで、開発者ごとにコピーを作成し、
default.build.user と名前を変更するようになっています。このファイルの中には、ユーザーがど
の行を編集・変更すればいいか判るように、セットアップのしかたをコメントとして追加していま
す。
ユーザーが不安にならないように、default.build.userを親フォルダーの無視リストに追加してあり
ます。つまり、Subversionのsvn:ignoreプロパティをそのファイルに設定しています。これにより
(バージョン管理外のファイルのように)コミットごとに表示されることがなくなります。
4.3. 作業コピーのチェックアウト
リポジトリから作業コピーを取得するには、 チェックアウト する必要があります。
Windows
エクスプローラーで、作業コピーを作成したい場所のディレクトリを選択してください。
右クリック してコンテキストメニューを表示し、 TortoiseSVN → チェックアウト... コマンドを選
択してください。すると次のダイアログが表示されます。
29
日常の使用ガイド
図4.7 チェックアウトダイアログ
存在しないフォルダー名を指定すると、その名前のディレクトリが作成されます。
重要
初期設定では、チェックアウトのメニュー項目はTortoiseSVNのサブメニューではなく、
エクスプローラーのメニューの最上位にあります。サブメニューの外にあるTortoiseSVN
のコマンドは、先頭がSVNで始まっており、SVN チェックアウト...となっています。
4.3.1. チェックアウトの深さ
チェックアウトの際、 深さ を選択することで、子フォルダーを再帰処理する深さを選択できます。
大きなツリーの一部だけをチェックアウトしたい場合は、まずツリーの一番上のフォルダーのみを
チェックアウトし、それから選択されたフォルダーを再帰的に更新してください。
再帰的
子フォルダーやそのサブフォルダーを含む、ツリー全体をチェックアウトします。
直接の子階層(フォルダーを含む)
指定したディレクトリと、直下のすべてのファイルや子フォルダーをチェックアウトしますが、
子フォルダー内のファイルはチェックアウトしません。
子階層のファイルのみ
指定したディレクトリと、直下のすべてのファイルをチェックアウトしますが、子フォルダーは
チェックアウトしません。
この項目のみ
ディレクトリのみチェックアウトします。その中のファイルや子フォルダーはチェックアウトし
ません。
作業コピー
作業コピーに指定した深さを記憶します。このオプションは、チェックアウトダイアログでは使
用されませんが、その他の深さの設定を持つダイアログでは、デフォルト設定となっています。
30
日常の使用ガイド
除外
フォルダーをすでに取り込んでしまった後で、作業コピーの深さを小さくするために使用しま
す。このオプションは、 特定リビジョンへ更新 ダイアログでしか使用できません。
手っ取り早く必要な項目だけをチェックアウトし、その項目だけを保持しておくのであれば、 項目
を選択... ボタンをクリックしてください。新しいダイアログが開くので、作業コピーに入れたいす
べての項目をチェックして、それ以外の項目のチェックを外してください。作業コピーは部分的な
チェックアウトという状態になります。この作業コピーを更新した場合は、チェックアウトされた
ファイルだけが更新され、存在しないファイルは更新されません。
作業コピーを部分的にチェックアウトした場合(つまり、チェックアウトする深さに再帰的以外を指
定した場合)、次のような方法で後から簡単にサブフォルダーを追加したり除外したりすることがで
きます。
4.3.1.1. 「特定リビジョンへ更新」を使用して部分的に更新
チェックアウトされたフォルダーを右クリックして、TortoiseSVN → 特定リビジョンへ更新...を選
択し、項目を選択...を選択してください。最初にチェックアウトしたときと同様のダイアログが表
示されるので、チェックアウトに含めたい項目を選択したり解除したりします。この方法はとても柔
軟ですが、フォルダーの中の項目が個別に更新されているときは遅くなる可能性があります。
4.3.1.2. リポジトリブラウザーを使用して部分的に更新
チェックアウトされたフォルダーで右クリックして、TortoiseSVN → リポジトリブラウザーでリポジ
トリブラウザーを起動してください。作業コピーを追加しようとしているサブフォルダーを選択し、
コンテキストメニュー → 特定リビジョンへ更新... を実行してください。
4.3.1.3. 「変更をチェック」を使用して部分的に更新
「変更をチェック」ダイアログでは、まず、Shiftを押しながらリポジトリをチェックボタンをク
リックしてください。リポジトリに存在していてチェックアウトされていないファイルやフォルダー
がすべて、リモート操作による追加としてダイアログに表示されます。作業コピーに追加したいフォ
ルダーを右クリックし、 コンテキストメニュー → 更新 を実行してください。
この機能は、大きなツリーの一部をチェックアウトする時だけでなく、ひとつの作業コピーを更新す
る際にも非常に便利です。 Project01 から Project99 といったサブフォルダーがある大きなツリー
があり、 Project03、Project25、Project76/SubProj だけをチェックアウトしようとしているとし
ましょう。以下のような手順となります。
1. 親フォルダーを、深さを「この項目のみ」としてチェックアウトしてください。すると、空の最
上位フォルダーができます。
2. リポジトリの内容を表示するため、このフォルダーを選択し、 TortoiseSVN → リポジトリブラウ
ザー を実行してください。
3. Project03 を右クリックし、コンテキストメニュー → 項目を特定リビジョンへ更新... を選択し
てください。デフォルトの設定のまま、 OK をクリックしてください。これでそのフォルダーがす
べて取得されます。
Project25 に対して同じ手順を繰り返します。
4. Project76/SubProj に移動し、同様に行ってください。このとき Project76 フォルダーには、
SubProj 以外の項目が取得されていないことに注意してください。内容を取得せずに、中間フォル
ダーのみが作成されたのです。
31
日常の使用ガイド
作業コピーの深さの変更
作業コピーをある深さでチェックアウトしたあと、 コンテキストメニュー → 項目を特定
リビジョンへ更新... を使用することで、後から深さを変更できます。そのダイアログ
で、 深さを記憶する のチェックボックスにチェックしてください。
古いサーバーを使用する場合
1.5以前のサーバーでは、作業コピーの深さの指定機能がないため、常にリクエストを効
率的に処理できません。コマンドは正しく動作しますが、旧式のサーバーは、クライア
ントに必要でないデータまでフィルターせずに送ってしまうため、大量のネットワーク
通信が発生する可能性があります。可能であれば、サーバーを1.5以上にアップグレード
してください。
プロジェクトに外部参照プロジェクトへの参照が含まれていて、同時にチェックアウト
場合、 外部参照を除外する チェックボックスを使用してください。
したくない
重要
外部参照を除外する
にチェックを付けたり、深さを増やしたりしたい場合は、作業コ
ピーを更新するのに TortoiseSVN → 更新 ではなく、 TortoiseSVN → 特定リビジョンへ
更新... を実行してください。通常の更新では外部参照を全て取得し、現在の深さを保
持してしまいます。
ディレクトリツリーのトランク(trunk)部分か、それ以下をのみをチェックアウトすることをお勧
めします。URLでディレクトリツリーの親パスを指定すると、プロジェクトのあらゆるブランチとタ
グを取得してしまうので、ハードディスクを使い切ってしまうかもしれません。
エクスポート
.svn ディレクトリを除いてコピーしたい場合があるかもしれません。例えば、ソースを
圧縮したアーカイブファイルを作成するときなどです。どのように行うかは、
「Subversion 作業コピーをエクスポート」 をご覧ください。
4.4. 変更のリポジトリへのコミット
作業コピーへの変更を送信することを、変更を コミット するといいます。しかしコミットする前
に、作業コピーが最新になっているかどうか確認しなければなりません。 TortoiseSVN → 更新 を直
接行うか、はじめに TortoiseSVN → 変更をチェック を使用して、サーバーやローカルのファイルに
変更がないかどうか確認します。
4.4.1. コミットダイアログ
作業コピーが最新で競合がない場合、変更をコミットする準備ができています。コミットするファイ
ルやフォルダーを選択し、 TortoiseSVN → コミット... を実行してください。
32
日常の使用ガイド
図4.8 コミットダイアログ
コミットダイアログには変更されたファイルや、追加・削除・バージョン管理外のファイルが表示さ
れます。変更されたファイルをコミットしたくない場合は、ファイルのチェックをはずしてくださ
い。バージョン管理外のファイルを含める場合は、追加・コミットするファイルにチェックをつけて
ください。
バージョン管理中のファイルや変更されたファイルのすべてを手早くチェックしたり外したりしたい
場合は、項目が表示されている一覧の上部にある項目をクリックしてください。
項目の状態に応じた色やオーバーレイについての詳細は、「ローカルとリモートの状態」をご覧くだ
さい。
別のリポジトリパスに切り替えた項目には、(s)マークが付きます。何かを切り替えてブランチで作
業した後、トランクに戻すのを忘れている可能性もあります。これは警告マークです。
33
日常の使用ガイド
ファイルをコミットするかフォルダーをコミットするか
ファイルをコミットする際、コミットダイアログは選択したファイルのみ表示します。
フォルダーをコミットする際には、コミットダイアログはファイルを自動で選択しま
す。作成した新しいファイルを忘れていた場合でも、フォルダーをコミットすればその
ファイルを探します。フォルダーをコミットするというのは、全てのファイルが変更さ
れたとみなすという意味ではありません。単に楽ができるということです。
コミットダイアログにある大量のバージョン管理外ファイル
コミットダイアログにバージョン管理外のファイル(例えば、コンパイラーが生成した
ファイルやエディターのバックアップなど)を表示しすぎだと思う場合は、以下のよう
な方法で対処できます。
• 設定ページで除外リストにファイル(またはワイルドカード)を追加します。これは
すべての作業コピーに影響します。
• TortoiseSVN → 無視リストに追加
で
svn:ignore
にファイルを追加します。
svn:ignore プロパティを設定したディレクトリにのみ影響します。 Subversion のプ
ロパティダイアログで、そのディレクトリの svn:ignore プロパティを変更できます。
• TortoiseSVN → 無視リストに追加(再帰的) で svn:global-ignore にファイルを追加
します。 svn:global-ignore プロパティを設定したディレクトリに加え、すべてのサ
ブフォルダーに影響します。
詳細は 「ファイルやディレクトリの無視」をご覧ください。
コミットダイアログで変更のあるファイルをダブルクリックすると、変更を確認するよう外部差分
ツールが起動します。スクリーンショットにあるようにコンテキストメニューでもっとオプションを
指定できます。ここからファイルをドラッグして、テキストエディターやIDEといったアプリケー
ションに持っていくこともできます。
項目の左にあるチェックボックスをクリックして、選択状態を切り替えられます。ディレクトリに対
して、 Shift を押しながら選択すると、再帰的に動作します。
下の欄に表示される列はカスタマイズすることができます。列見出しの上で右クリックすると、表示
される列を選択するコンテキストメニューが表示されます。また、列の境界上にマウスを持っていく
とドラッグハンドルが表示され、列幅を変更できます。以上のカスタマイズは保存されるので、次回
も同じ列見出しで表示されます。
デフォルトでは変更をコミットすると、コミット完了後に保持していたファイルのロックが自動的に
解除されます。ロックを保持したままにしたい場合は、 ロックを保持 チェックボックスにチェック
しておきます。チェックボックスのデフォルト状態は、 Subversion 設定ファイルの no_unlock オ
プションから取得されます。 Subversion 設定ファイルの編集については、 「一般設定」 をご覧く
ださい。
タグへコミットする時に警告する
ふつう、コミットはトランクやブランチに対して行いますが、タグに対しては行いませ
ん。すなわち、タグは固定されているものだと考えられており、変更するべきではあり
ません。
コミットがタグURLに関連付けられている場合、TortoiseSVNは最初に実際に何が行われ
るのかを確認するダイアログを表示します。そのようなコミットは間違いで行われるこ
とが多いからです。
34
日常の使用ガイド
しかし、このチェックはリポジトリの配置が推奨パターンのどれかである場合にのみ機
能します。つまり3つのメインエリアを識別するためにtrunk、branches、tagsの名称を
使用している場合のみです。このようにセットアップされていない場合、どれがtag/
branch/trunkなのか(分類パターンとして知られています)は、設定ダイアログ「「リ
ビジョングラフの設定」」から設定できます。
ドラッグ&ドロップ
作業コピーが同じリポジトリからチェックアウトされているなら、別の場所からコミッ
トダイアログにファイルをドラッグできます。例えば、遠くの階層を見るのに、複数エ
クスプローラーのウィンドウを開かなければならないような、巨大な作業コピーも扱え
るかもしれません。長々フォルダーを変更チェックする、トップレベルフォルダーから
コミットするのを避けたければ、あるフォルダーのコミットダイアログを開き、他の
ウィンドウから同時に不可分コミットしたい項目をドラッグしてください。
作業コピーの中にあるバージョン管理外のファイルも、コミットダイアログにドラッグ
できます。その際は自動的に追加が実行されます。
コミットダイアログの下部のリストから、ログメッセージ欄にファイルをドラッグする
と、その欄に全ファイルのパスが文字列で挿入されます。コミット時のログメッセージ
に、コミットにより影響を受けるパスを記述したい場合に便利です。
外部での名前変更の修復
Subversion の外部でファイルの名前が変更された場合、ファイル一覧で紛失ファイルと
して表示されたり、バージョン管理外ファイルとして表示されたりします。履歴を失わ
ないように Subversion に関連を通知する必要があります。古い名前(紛失)と新しい
名前(バージョン管理外)を選択し、 コンテキストメニュー → 移動を修復 を実行すれ
ば、名前の変更が行われたことを示すことができます。
外部でのコピーの修復
ファイルのコピーをしたのに、 Subversion コマンドで行うのを忘れた場合、新しいファ
イルが履歴を失わないように、そのコピーを修復できます。古い名前(通常ないし変
更)と新しい名前(バージョン管理外)を選択し、 コンテキストメニュー → コピーの修
復 を実行するだけで、ファイルのコピーが行われたことを示すことができます。
4.4.2. 変更リスト
コミットダイアログは、関連するファイルのグループ化を助ける Subversion の変更リスト機能をサ
ポートしています。この機能については、 「変更リスト」 をご覧ください。
4.4.3. ファイルの一部だけをコミットする
時には、ファイルに対して行った変更の一部だけをコミットしたくなることがあるでしょう。例え
ば、何かを作業をしている途中で緊急の修正をコミットする必要に迫られ、しかも作業中のファイル
に変更を加えなければならなくなった場合などです。
ファイルを右クリックし、コンテキストメニュー → コミット後に復元を実行してください。これで
ファイルの現状のコピーが作成されます。それからファイルをテキストエディターなどを使用して編
集し、コミットしたくない変更点をすべて元に戻してください。変更を保存した後で、ファイルをコ
ミットします。
35
日常の使用ガイド
TortoiseMergeの使い方
TortoiseMergeを使用してファイルを編集する場合、変更点を今までのように編集する方
法のほか、含めたい変更をすべてマークする方法があります。変更されたブロック上で
右クリックし、コンテキストメニュー → この変更をマークを実行して変更を含めます。
最後に右クリックし、コンテキストメニュー → マークした変更のみを残すを実行する
と、マークした変更のみを含め、マークされていない変更を破棄するように右ビューを
更新します。
コミットが完了すると、ファイルのコピーが自動的に復元され、コミットされていなかった変更点が
元に戻ります。
4.4.4. コミット一覧からの項目の除外
バージョン管理下のファイルが頻繁に変更されても、コミットしたくないことがあります。これはビ
ルドプロセスの弱点を表しています。なぜそのファイルをバージョン管理下に置いたのでしょう?テ
ンプレートファイルを使用するべきではありませんか?しかし、時にこれはやむを得ないことがあり
ます。古典的な理由としては、使用しているIDEが、ビルドする際に必ずタイムスタンプを更新して
しまうということがあります。すべてのビルド設定を含んでいるため、プロジェクトファイルをバー
ジョン管理下に置かなければなりませんが、単にタイムスタンプが更新されただけではコミットする
必要はありません。
このような厄介なことを解決するのに、 ignore-on-commit という変更リストを用意されています。
この変更リストに追加されたファイルは、コミットダイアログで自動的にチェックが外されます。
チェックを入れれば、変更をコミットすることができます。
4.4.5. コミットログメッセージ
コミットする変更を説明するログメッセージを必ず入力してください。後日プロジェクトのログメッ
セージを閲覧するときに、いつ、何が起きたかを確認できます。メッセージは長くても簡潔でもお好
みでよいのですが、多くのプロジェクトで、使用する言語や、厳密なフォーマットといった記述する
内容のガイドラインがあります。
メールで使用するような規約を用いて、ログメッセージの簡単な整形を行うことができます。
にスタイルを適用する場合、 *text* で太字、 _text_ で下線、^text^ で斜体になります。
36
text
日常の使用ガイド
図4.9 コミットダイアログのスペルチェッカー
TortoiseSVN にはログメッセージを正しく書けるよう、スペルチェッカーが内蔵されています。これ
で間違った単語を強調表示できます。訂正候補にアクセスするには、コンテキストメニューを使用し
てください。もちろん、 すべて の技術用語が登録されているわけではないので、正しい綴りの単語
がエラーとして表示される可能性があります。こうした用語は、コンテキストメニューから個人辞書
に登録できます。
ログメッセージウィンドウは、ファイル名や関数の自動補完機能も持っています。コミットしようと
している(テキスト)ファイルから、クラス名や関数名を(ファイル名と同様に)抽出するのに正規
表現を使用します。3文字入力したり、 Ctrl+Space を押したりしたとき、このリストにある単語と
一致すると、名前全体を選択するドロップダウンを表示します。 TortoiseSVN が標準で持っている
正規表現は、 TortoiseSVN をインストールした bin フォルダーに格納されています。自分で正規
表現を定義し、 %APPDATA%\TortoiseSVN\autolist.txt に格納しておくこともできます。もちろん自
分の autolist は TortoiseSVN をアップデートしても上書きされません。正規表現になじみがな
いのであれば、 http://ja.wikipedia.org/wiki/正規表現 [http://ja.wikipedia.org/wiki/%E6%AD
%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE] にある説明や、 http://www.regular-expressions.info/ にある
オンラインドキュメントやチュートリアルをご覧ください。
完全に正しい正規表現を書くのは難しいので、式の組み合わせを整理しやすくするために、式を入力
し、ファイル名を入力すれば、それがマッチするかどうかをテストできるテストダイアログを用意し
ています。コマンドプロンプトから、 TortoiseProc.exe /command:autotexttest とコマンドを入力
すれば起動します。
ログメッセージウィンドウにはコミットメッセージのスニペット機能もついています。ショートカッ
トキーを押すとスニペットの一覧が表示され、一覧から入力するスニペットを選択するとテキストが
挿入されます。TortoiseSVN により提供されるスニペットは TortoiseSVN をインストールしたフォル
37
日常の使用ガイド
ダのbinの中にあります。%APPDATA%\TortoiseSVN\snippet.txt を編集することで自作のスニペット
を作成することもできます。# はコメントキャラクターです。\n や \r で改行を挿入できます。ま
た、バックスラッシュを挿入するには \\ のようにエスケープします。
以前入力したログメッセージを再利用できます。最近のログメッセージをクリックして、その作業コ
ピーで入力した最新のログメッセージ一覧を表示します。保存しているログメッセージの数は、
TortoiseSVN 設定ダイアログでカスタマイズできます。
TortoiseSVN の設定ダイアログの 保存データ ページで、保存されたコミットメッセージをすべて消
去することができます。 最近のログメッセージ ダイアログで Delete キーを押すと、特定の保存さ
れたログメッセージを消去することができます。
入力欄のコンテキストメニュー → ファイル名のリストを貼付を実行すると、チェックしたパスをロ
グメッセージに入れることができます。
ファイルリストにあるファイルをログメッセージの入力欄にドラッグするだけでも、ログメッセージ
にパスを入力することができます。
特殊なフォルダープロパティ
コミットログメッセージのフォーマットを制御したり、スペルチェッカーで使用する言
語を指定する、特殊なフォルダープロパティがいくつかあります。詳細な情報は 「プロ
ジェクト設定」をご覧ください。
バグ追跡ツールとの統合
バグ追跡ツールが有効なら、 バグID/課題番号():
4.4.6. コミットの進行状況
OKを押すと、コミットの進行状況を表示するダイアログが表示されます。
図4.10 コミットの状況を表示している進行ダイアログ
進行ダイアログでは、コミット状態に応じて色分けで表示されます。
青色
変更のコミット
38
日常の使用ガイド
紫色
新規追加のコミット
暗赤色
削除・置換のコミット
黒
その他すべての項目
これはデフォルトの色設定ですが、設定ダイアログで色をカスタマイズできます。詳細は
「TortoiseSVN の色の設定」をご覧ください。
4.5. 他人の変更に伴う作業コピーの更新
図4.11 更新が完了したときの進行ダイアログ
定期的に、他の人が行った変更を作業コピーに取り込まなければなりません。サーバーから作業コ
ピーに変更を取り込む作業を、更新と言います。更新は単一のファイルに対して行うことも、複数の
選択したファイルに対して行うことも、ディレクトリ構造に対して再帰的に行うこともできます。更
新するには、更新したいファイルやディレクトリを選択し、右クリックで表示されるエクスプロー
ラーのコンテキストメニューから、 TortoiseSVN → 更新 を実行してください。更新の進行を表す
ウィンドウがポップアップし、更新が始まります。他の人が行った変更が、作業コピーにマージされ
ますが、作業コピーで行った変更はすべて保持されます。更新では、リポジトリに影響を与えませ
ん。
進行ダイアログは更新の内容を色分けして、目立つようになっています。
紫色
作業コピーに新しい項目が追加された。
暗赤色
作業コピーから余分な項目が削除された、作業コピーの紛失項目が置き換えられた。
緑色
リポジトリからの変更がローカルの変更に正常にマージできた。
明赤色
リポジトリからの変更をローカルの変更にマージした結果、競合が発生して解決が必要になっ
た。
39
日常の使用ガイド
黒
作業コピー内の変更のない項目をリポジトリの新しいバージョンに更新した。
これはデフォルトの色設定ですが、設定ダイアログで色をカスタマイズできます。詳細は
「TortoiseSVN の色の設定」をご覧ください。
更新中に競合(同じファイルの同じ行を同時に変更して、それが一致しなかった場合に発生する)が
発生したら、ダイアログでは競合を赤で表します。その行をダブルクリックして、外部マージツール
を起動し競合を解決できます。
更新が完了すると、項目の更新・追加・削除・競合などの概略を進行ダイアログに表示します。概略
情報は Ctrl+C でクリップボードにコピーできます。
標準の更新コマンドは、ただ作業ディレクトリをリポジトリの最新の HEAD リビジョンに更新しま
す。指定するオプションは何もなく、ほとんどの場面ではこれで充分です。更新作業でこれ以上の制
御をしたい場合は、代わりに TortoiseSVN → 特定リビジョンへ更新... を使用してください。このコ
マンドでは、最新のものだけでなく、特定のリビジョンに作業コピーを更新することができます。作
業コピーがリビジョン100になっていて、それをリビジョン50の状態に戻したいのであれば、リビ
ジョン50に更新するだけです。
同じダイアログで、現在のフォルダーを更新するときの
深さ
を選択することもできます。選
択肢の意味については、
「チェックアウトの深さ」をご覧ください。デフォルトでは
作業コ
ピー が選択されており、これは現在の深さを維持します。また、深さを記憶するを選択することも
できます。これを選択すると、以降の更新ではそれが新しい深さの初期値として使用されます。
項目を選択... ボタンをクリックすると、チェックアウト時に特定の項目を簡単に含めたり除外した
りすることができます。新しいダイアログが開かれるので、作業コピーに入れたいすべての項目を
チェックして、それ以外の項目のチェックを外してください。
更新の時には、特定の外部プロジェクトを無視するかどうかを選択できます(つまり、プロジェクト
は svn:externals を使用して参照されます)。
注意
リビジョンを指定してファイルやフォルダーを更新した場合、そのファイルを変更する
べきではありません。これをコミットしようとすると、「作業コピーは最新ではありま
せん」のエラーが発生します。ファイルへの変更を取り消し、直前のリビジョンから新
しくはじめたい場合、リビジョンログダイアログから以前のリビジョンに戻してしてく
ださい。詳しい方法や代替案については、
「リポジトリのリビジョンのロールバック
(取り消し)」をご覧ください。
特定リビジョンへ更新 は、履歴中の以前の時点ではどうだったかを見るのに時々は便利です。です
が一般的に、単独のファイルを以前のリビジョンに更新するのは、作業コピーを矛盾した状態にしか
ねないので、よい方法とは言えません。もし名前が変更されたことがあるファイルを更新すると、古
いリビジョンではその名前では存在していなかったため、作業コピーから消えてしまい、探さなけれ
ばならなくなるかもしれません。また、こうしたファイルには通常の緑のオーバーレイが表示される
ので、最新のファイルと区別がつかないことにも注意してください。
単にそのファイルの古いリビジョンのローカルコピーが欲しければ、ログダイアログで選んだファイ
ルに対して、 コンテキストメニュー → リビジョンを保存... コマンドを使用する方がよいでしょ
う。
複数のファイルやフォルダー
エクスプローラーで複数のファイルやフォルダーを選択し、 更新 を選択した場合、その
ファイルやフォルダーをひとつずつ更新していきます。 TortoiseSVN は同じリポジトリ
40
日常の使用ガイド
から取得したファイルやフォルダーは、全く同じリビジョンに確実に更新します。この
更新中に他の人からのコミットが発生してもです。
4.6. 競合の解決
リポジトリから自分のファイルを更新・マージしたり、別の URL に作業コピーを切り替えたりする
と、時には 競合 することもあります。競合には以下の二種類があります。
ファイルの競合
複数の開発者が、同じファイルの同じ行を変更すると、ファイルの競合が発生します。
ツリーの競合
開発者がファイルやフォルダーの移動・名前変更・削除を行い、別の開発者も移動・名前変更・
削除を行ったり、単に変更すると、ツリーの競合が発生します。
4.6.1. ファイルの競合
ファイルの競合は、複数の開発者があるファイルの同じ行を変更した際に発生します。 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.mineやfilename.ext.r*ファイルを削除するだけです。
バイナリファイルが競合した場合、 Subversion はそのファイルをマージしようとしません。ローカ
ルファイルには変更が加えられず(自分が変更したままで)、filename.ext.r*ファイルを作られま
す。自分の変更を取り消し、リポジトリのバージョンにしたい場合は、「変更の取り消し」コマンド
を使ってください。リポジトリのバージョンを自分の変更したファイルで置き換えるのなら、「競合
の解決」コマンドを実行してからコミットしてください。
41
日常の使用ガイド
親フォルダーを右クリックし、
4.6.2. プロパティの競合
複数の開発者が同じプロパティを変更した場合、プロパティの競合が発生します。ファイルの内容と
同様に、競合は開発者のみが解決できます。
一方の変更を取り消してもう一方で上書きする場合は、ローカルのプロパティを用いて解決するかリ
モートのプロパティを用いて解決するを選択してください。変更をマージする必要がある場合は、手
作業でプロパティを編集を選択し、どのプロパティをどうするか決めてから、解決してください。
4.6.3. ツリーの競合
開発者がファイルやフォルダーを移動・名前変更・削除したときに、別の開発者が移動・名前変更・
削除を行っていたり、変更をしていたりすると、ツリーの競合が発生します。ツリーの競合はさまざ
まな状況で起こり得ますし、その競合を解決するにはそれぞれ異なった手順が必要です。
また、ファイルが Subversion によりローカルで削除されると、ローカルファイルシステムからも削
除されるため、ツリーの競合があったとしても競合のオーバーレイを表示できず、競合を解決しよう
にも右クリックもできません。 競合の編集 オプションを用いる代わりに、 変更をチェック ダイア
ログを使用してください。
TortoiseSVN は変更をマージするための正しい場所を見つけるのを支援することができますが、競合
を整理するにはさらに作業が必要かもしれません。作業ベースを更新すると、常に更新時のリポジト
リにある各項目のリビジョンが含まれます。更新後に変更を取り消した場合、そのリポジトリの状態
へと戻り、変更開始時の状態には戻りません。
4.6.3.1. ローカルで削除、更新により編集を受信
1. 開発者Aが Foo.c を変更し、リポジトリにコミットする。
2. 開発者Bは同時に、作業コピーで Foo.c を Bar.c に移動したか、単に Foo.c またはその親フォ
ルダ―を削除した。
開発者Bの作業コピーを更新した結果、次のようにツリーの競合が発生します。
• Foo.c が作業コピーからすでに削除されていますが、ツリーの競合としてマークされます。
• 削除ではなく名前変更の結果が競合した場合、Bar.cは追加としてマークされますが、開発者Aの
変更点は含まれていません。
開発者Bは、現在、開発者Aの変更を保持するかどうかを選ばなければなりません。ファイルの名前
変更の場合では、名前変更されたファイル Bar.c に対して、 Foo.c に行った変更をマージできま
す。単なるファイルやディレクトリの削除の場合には、開発者Aの変更を保持し、削除を取り消すと
いう選択もできます。もしくは、何もせずに競合を解決したとみなし、事実上開発者Aの変更を破棄
することもできます。
名前が変更された Bar.c のオリジナルファイルが見つかれば、競合の編集ダイアログは変更をマー
ジするか訊いてきます。更新を実行した場所によっては、ソースファイルが見つからない可能性もあ
ります。
4.6.3.2. ローカルで編集、更新により削除を受信
1. 開発者Aが Foo.c を Bar.c に移動し、リポジトリにコミットします。
2. 開発者Bは Foo.c を、自分の作業コピーで変更します。
またはフォルダーの移動の場合...
1. 開発者Aは、親フォルダー FooFolder を BarFolder に移動し、リポジトリへコミットします。
42
日常の使用ガイド
2. 開発者Bは Foo.c を、自分の作業コピーで変更します。
開発者Bの作業コピーを更新した結果、ツリーが競合しました。単純なファイルの競合では次のよう
になります。
• Bar.c は作業コピーに通常ファイルとして追加されます。
• Foo.c は(履歴と共に)追加されたとマークされ、ツリーが競合状態になります。
フォルダーの競合では次のようになります。
• BarFolder は作業コピーに、通常のフォルダーとして追加されます。
• FooFolder は(履歴と共に)追加されたとマークされ、ツリーが競合状態になります。
Foo.c は変更されたとマークされます。
開発者Bは今回、開発者Aの再配置を受け入れ、変更を移動先のファイルにマージするか、開発者A
の変更を取り消し、ローカルのファイルを保持するかを決めねばなりません。
再配置された結果にローカルの変更をマージするためには、開発者Bはまず、競合したファイル
Foo.c がリポジトリ中でどのようなファイル名に名前変更・移動されたのかを探さなければなりませ
ん。ログダイアログを使用すると調べることができます。その後、その変更を手でマージしなければ
なりません。現在のところ、この手順を自動化したり、単純化したりする方法がないからです。いっ
たん変更を移植してしまえば、競合したパスは余分なものとなり、削除できます。競合の編集ダイア
ログの 削除 ボタンを押せば、不要なファイルを削除して競合を解決済みにできます。
開発者Aの変更は誤りだと開発者Bが判断した場合は、競合の編集ダイアログの 保持 ボタンを選択
します。これは競合したファイルやフォルダーを、解決済みとしてマークしますが、開発者Aの変更
は手作業で削除する必要があります。何が移動されたかを見つけ出すには、またログダイアログが役
に立ちます。
4.6.3.3. ローカルで削除、更新により削除を受信
1. 開発者Aが Foo.c を Bar.c に移動し、リポジトリにコミットします。
2. 開発者Bが Foo.c を Bix.c に移動します。
開発者Bの作業コピーを更新した結果、次のようにツリーの競合が発生します。
• Bix.c は、履歴と共に、追加されたとマークされます。
• Bar.c は、作業コピーへ「通常」の状態で追加されます。
• Foo.c は、削除されたとマークされ、ツリーが競合状態になります。
競合を解決するには、 Foo.c がリポジトリで名前変更・移動されたことに対する競合したファイル
の名前を、開発者Bが調べなければなりません。これはログダイアログで行えます。
開発者Bが、 Foo.c の新しい名前の方を残すと決めた場合、開発者Aにしてもらうか、自分で名前
変更できます。
開発者Bが、手作業で競合を解決した後で、競合の編集ダイアログのボタンで、ツリーの競合を解決
済みにする必要があります。
4.6.3.4. ローカルで紛失、マージにより編集を受信
1. トランクで作業している開発者Aが、 Foo.c を変更しリポジトリにコミットします。
2. ブランチで作業している開発者Bが、 Foo.c を Bar.c に移動し、リポジトリにコミットします。
43
日常の使用ガイド
開発者Aのトランクへの変更を、開発者Bのブランチにマージすると、作業コピーは以下のようにツ
リーの競合状態になります。
• Bar.c は、状態が「通常」で、すでに作業コピーにあります。
• Foo.c は、紛失マークがつき、ツリーの競合状態になります。
この競合を解決するには、開発者Bが競合の解決ダイアログでファイルに解決済みにし、競合リスト
から取り除く必要があります。さらに、紛失ファイル Foo.c を、リポジトリから作業コピーへコ
ピーするか、 Foo.c へ行った開発者Aの変更を、名前変更した Bar.c にマージするか、競合に解決
マークを付ける他は何もしないかを決めなければなりません。
紛失したファイルをリポジトリから取得し、それから解決済みとすると、自分のコピーが再度削除さ
れます。まず競合を解決しなければなりません。
4.6.3.5. ローカルで編集、マージにより削除を受信
1. トランクで作業している開発者Aが、Foo.c を Bar.c に移動し、リポジトリにコミットします。
2. ブランチで作業している開発者Bが、 Foo.c を変更しリポジトリにコミットします。
1. トランクで作業している開発者Aが、親フォルダー FooFolder を BarFolder に移動し、リポジト
リにコミットします。
2. ブランチで作業している開発者Bが、自分の作業コピーにある Foo.c を変更します。
開発者Aのトランクへの変更を、開発者Bのブランチにマージすると、作業コピーは以下のようにツ
リーの競合状態になります。
• Bar.c には追加マークが付きます。
• Foo.c はツリーの競合として、変更マークが付きます。
開発者Bは今回、開発者Aの再配置を受け入れ、変更を移動先のファイルにマージするか、開発者A
の変更を取り消し、ローカルのファイルを保持するかを決めねばなりません。
再配置された結果にローカルの変更をマージするためには、開発者Bはまず、競合したファイル
Foo.c がリポジトリ中でどのようなファイル名に名前変更・移動されたのかを探さなければなりませ
ん。マージ元のログダイアログを使用すると調べることができます。競合エディターは、どのパスが
マージで使用されたのかを知らず、作業コピーのログを表示するだけですので、自分で探さなければ
なりません。現在のところ、この手順を自動化したり、単純化したりする方法がないからです。いっ
たん変更を移植してしまえば、競合したパスは余分なものとなり、削除できます。競合の編集ダイア
ログの 削除 ボタンを押せば、不要なファイルを削除して競合を解決済みにできます。
開発者Bが、開発者Aの変更は誤りだと判断した場合、競合の編集ダイアログの 保持 ボタンを選
択しなければなりません。これは 競合したファイルやフォルダーを、解決済みとしてマークします
が、開発者Aの変更は手で削除する必要があります。何が移動されたかを見つけ出すには、またマー
ジソースのログダイアログが役に立ちます。
4.6.3.6. ローカルで削除、マージにより削除を受信
1. トランクで作業している開発者Aが、Foo.c を Bar.c に移動し、リポジトリにコミットします。
2. ブランチで作業している開発者Bが、Foo.c を Bix.c に移動し、リポジトリにコミットします。
開発者Aのトランクへの変更を、開発者Bのブランチにマージすると、作業コピーは以下のようにツ
リーの競合状態になります。
• Bix.c は通常(未変更)状態としてマークされます。
44
日常の使用ガイド
• Bar.c は履歴と共に追加マークが付きます。
• Foo.c には紛失マークが付き、ツリーの競合状態となります。
競合を解決するために、開発者Bは競合ファイル Foo.c がリポジトリ中で名前変更・削除された
ファイル名を探さなければなりません。マージソースのログダイアログを使用するとわかります。競
合の解決ダイアログは、マージで使用されるパスを知らず、作業コピーのログを表示するだけですの
で、自分で探さなければなりません。
開発者Bが、 Foo.c の新しい名前の方を残すと決めた場合、開発者Aにしてもらうか、自分で名前
変更できます。
開発者Bが、手作業で競合を解決した後で、競合の編集ダイアログのボタンで、ツリーの競合を解決
済みにする必要があります。
4.6.3.7. 他ツリーの競合
他にも、競合にファイルではなくフォルダーが含まれるために、単純にツリーの競合としてマークさ
れている場合があります。例えば、トランクとブランチの両方に同じ名前のフォルダーを追加してか
らマージしようとした場合には、ツリーの競合と表示されます。マージ対象のフォルダーを維持した
い場合は、単に解決済みとしてください。マージ元のどちらか一方を使用する場合は、最初のター
ゲットの1つに対してSVN 削除を実行し、再びマージを実行する必要があります。もっと複雑な場合
は、手作業で解決する必要があります。
4.7. ステータス情報の取得
作業コピーで作業をしていると、ファイルに対して変更・追加・削除や名前の変更を行ったのかどう
か、また他の人が変更してコミットしたファイルがあるかどうか知る必要があるでしょう。
4.7.1. アイコンオーバーレイ
図4.12 エクスプローラーのアイコンオーバーレイ表示
Subversion のリポジトリから作業コピーにチェックアウトすると、 Windows エクスプローラー上で
ファイルのアイコンが変化しているのが分かります。これこそ TortoiseSVN を有名にした理由のひ
とつです。 TortoiseSVN はオーバーレイアイコンと呼ばれるアイコンを、元のファイルアイコンの
上に重ねて表示します。ファイルの Subversion における状態によってオーバーレイアイコンが変わ
ります。
作業コピーにチェックアウトしたばかりのファイルには緑のチェックマークをオーバーレイしま
す。Subversion の状態は 通常 です。
45
日常の使用ガイド
ファイルの編集をはじめるとすぐに状態が 変更 に変わり、アイコンオーバレイも赤いエクスクラ
メーションマークに変わります。これで最後に作業コピーを更新してからどのファイルに変更を加
え、コミットする必要があるかどうか分かります。
更新中に 競合 が発生したら、黄色いエクスクラメーションマークのアイコンに変わります。
ファイルに svn:needs-lock プロパティを設定していると、 Subversion はそのファイルにロックを
かけるまで読み取り専用にします。そのようなファイルには、編集前にロックするまで、このオー
バーレイが表示されます。
ファイルをロックしており、かつ Subversion の状態が 通常 であれば、もう他人にファイルの変更
を許可しても良いのにロックを解除し忘れないように、このアイコンが表示されます。
バージョン管理から 削除 されるカレントフォルダー内のファイルやフォルダー、またバージョン管
理が紛失したフォルダー内にあるファイルにこのアイコンがつけられます。
バージョン管理に 追加 されるファイルやフォルダーには+印がつきます。
横棒印は、ファイルやフォルダーが、バージョン管理的に
オーバーレイはオプションです。
無視
されていることを示します。この
バージョン管理下にないファイルやフォルダーで、無視されていない場合には、このアイコンが表示
されます。このオーバーレイはオプションです。
実際のところ、上記のアイコンのすべてがシステムで使用されている訳ではないことが分かると思い
ます。
Windows
で使用できるオーバーレイの数はかなり制限されていますし、また
TortoiseCVS の古いバージョンを一緒に使用していると、使用できるオーバーレイスロットが不足し
ます。TortoiseSVN は 「Good Citizen ™」 (良い市民)になれるように、他のアプリケーションに
も使用する機会を与えるように、オーバーレイの使用を制限しています。
Tortoise クライアントが今より増えた場合(TortoiseCVS、TortoiseHg、...)、アイコンの限界は
現実的な問題になります。この問題を回避するために、 TortoiseSVN プロジェクトではすべての
Tortoise クライアントで共通に使用できる、 DLL で読み込むアイコンセットを導入しました。すで
に統合されているかどうかを確認するには、クライアントの供給元に確認してください。 :-)
Subversion の状態に対応するアイコンオーバーレイの付き方や、その他の技術詳細は、 「アイコン
オーバーレイ」 をご覧ください。
4.7.2. 詳細なステータス
46
日常の使用ガイド
図4.13 エクスプローラーのプロパティページの Subversion タブ
オーバーレイアイコンより詳しい、ファイルやディレクトリに関する詳細情報を確認したい場合、エ
クスプローラーのプロパティダイアログから、 Subversion が提供するすべての情報を確認すること
ができます。ファイルやディレクトリを選択し、コンテキストメニューの Windows メニュー → プ
ロパティ を選択するだけです(TortoiseSVN のサブメニュー内のものではなく、エクスプローラー
のプロパティであることに注意してください)。 Subversion の管理下のファイルやフォルダーでプ
ロパティを表示すると、 TortoiseSVN 独自のプロパティページが表示されます。ここで、選択した
ファイルやフォルダーに関するすべての情報を見ることができます。
4.7.3. ローカルとリモートの状態
47
日常の使用ガイド
図4.14 変更をチェック
自分でどのファイルを変更したか、また他の人がどのファイルを変更しコミットしたかを知ることは
非常に有用です。これには TortoiseSVN → 変更をチェック... コマンドが役に立ちます。このダイア
ログは作業コピー内にある何らかの変更をしたファイルや、バージョン管理外のファイルをすべて表
示します。
リポジトリをチェック をクリックすると、リポジトリで行われた変更を参照できます。競合が起こ
りそうな場合、更新前にこれで変更点を確認できます。リポジトリの全てのフォルダーを更新しない
で、選択したファイルのみ更新することもできます。デフォルトでは、
リポジトリをチェッ
ク ボタンは、リモートの状態を作業コピーにチェックアウトした深さまで検索します。リポジトリ
内のチェックアウトしていないファイルやフォルダーまで確認したい場合は、 Shift キーを押しな
がら リポジトリをチェック ボタンをクリックしてください。
このダイアログでは、状態が色分けして表示されます。
青色
ローカルで変更された項目です。
紫色
追加された項目です。履歴から追加された項目には テキストの状態 列に + 印がつきます。ま
た、項目のコピー元がツールチップに表示されます。
暗赤色
削除された・紛失した項目です。
緑色
ローカル及びリポジトリ内で変更された項目。更新時にマージされます。更新時に競合する
も しれません。
か
明赤色
ローカルで変更されリポジトリでは削除された、ないしリポジトリで変更されローカルで削除さ
れた項目。更新時に競合が 発生します 。
黒
変更がなくバージョン管理外の項目です。
これはデフォルトの色設定ですが、設定ダイアログで色をカスタマイズできます。詳細は
「TortoiseSVN の色の設定」をご覧ください。
48
日常の使用ガイド
オーバーレイアイコンは他の状態を表示するためにも使われます。次のスクリーンショットは、必要
な時に表示される可能性のあるすべてのオーバーレイを示しています。
オーバーレイは次の状態を示しています。
• チェックアウトの深さがこの項目のみ、つまりこの項目のみであることを示します。
• チェックアウトの深さが子階層のファイルのみ、つまりこの項目と、子フォルダーを除いたすべて
の子階層のファイルのみであることを示します。
• チェックアウトの深さが直接の子階層、つまりこの項目と、すべての子階層のファイルとフォル
ダーを含め、子フォルダーの子フォルダーは除外されていることを示します。
• ネストされた項目、つまり、作業コピーの中にある作業コピー。
• 外部項目、つまり、svn:externalsプロパティで追加されたすべての項目。
• コミット後に復元された項目。詳しくは「ファイルの一部だけをコミットする」をご覧ください。
• svn:mergeinfoプロパティが変更された項目。それ以外のプロパティが変更されても、このオー
バーレイは使われません。
異なるリポジトリのパスに切り替えた項目には、(s)印が示されます。ブランチで何かの作業を行っ
た後で、トランクに切り替え忘れることがあるかもしれません。これが警告のサインです。コンテキ
ストメニューを使用すれば、通常のパスに切り替えることができます。
このダイアログのコンテキストメニューから、変更点の差分を表示することができます。 自分 が
行ったローカルの変更をチェックするには、 コンテキストメニュー → 作業ベースと比較 を使用して
ください。他人が行ったリポジトリへの変更は、 コンテキストメニュー → Unified形式で差分を表
示 を使用してください。
個々のファイルの変更を取り消すこともできます。誤ってファイルを消してしまった場合には、
失 と表示されますし、 変更の取り消し を実行すればファイルを回復することができます。
紛
バージョン管理外のファイルや無視されたファイルは、 コンテキストメニュー → 削除 でごみ箱に送
ることができます。完全に(ごみ箱を経由させずに)ファイルを削除するには、 Shift キーを押し
たまま 削除 をクリックしてください。
ファイルの中を確認したければ、テキストエディターや IDE のような別のアプリケーションにファ
イルをドラッグするか、エクスプローラーのフォルダーにドラッグするかすれば、コピーを保存する
ことができます。
リストの列はカスタマイズできます。列見出しの上で右クリックすると、表示する列を選択するコン
テキストメニューが表示されます。また、列の境界上にマウスを持っていくとドラッグハンドルが表
示され、列幅を変更できます。カスタマイズ結果は保存されるので、次回以降も同じ列見出しになり
ます。
関連のない複数の仕事を一度に行った場合、変更リストにファイルをグループ化することもできま
す。詳しくは 「変更リスト」 をご覧ください。
ダイアログの下部に、作業コピーで使われている、リポジトリリビジョンの範囲の概要を表示してい
ます。これは 更新 リビジョンではなく コミット リビジョンであり、ファイルが更新されたリビ
49
日常の使用ガイド
ジョンではなく、ファイルが最後にコミットされた時のリビジョン範囲を表しています。作業コピー
全体ではなく、表示されている項目のみのリビジョン範囲であることに注意してください。作業コ
ピー全体に対してこの情報を表示する場合は、 表示する項目 の 未変更 チェックボックスにチェッ
クを入れてください。
ヒント
作業コピーに含まれるすべてのファイルやフォルダーを一度に表示したいような場合
は、 変更をチェック ダイアログが一番簡単です。 表示する項目 の 未変更 チェック
ボックスにチェックをつけると、作業コピー内のすべてのファイルが表示されます。
外部での名前変更の修復
Subversion の外部でファイルの名前が変更された場合、ファイル一覧で紛失ファイルと
して表示されたり、バージョン管理外ファイルとして表示されたりします。履歴を失わ
ないように Subversion に関連を通知する必要があります。古い名前(紛失)と新しい
名前(バージョン管理外)を選択し、 コンテキストメニュー → 移動を修復 を実行すれ
ば、名前の変更が行われたことを示すことができます。
外部でのコピーの修復
ファイルのコピーをしたのに、 Subversion コマンドで行うのを忘れた場合、新しいファ
イルが履歴を失わないように、そのコピーを修復できます。古い名前(通常ないし変
更)と新しい名前(バージョン管理外)を選択し、 コンテキストメニュー → コピーの修
復 を実行するだけで、ファイルのコピーが行われたことを示すことができます。
4.7.4. 差分の表示
ファイルの中でどのような変更をしたのか確認する場合は、変更のあるファイルを選択し
て、TortoiseSVN のコンテキストメニューから 差分を表示 を選択してください。外部差分ビュー
アーが起動し、現在のファイルとチェックアウト・更新を行った直後のコピー(作業ベース、 BASE
リビジョン)とを比較できます。
ヒント
作業コピー内にない場合や、複数のバージョンがある場合でも、差分を表示できます。
エクスプローラーで比較したい2つのファイルを選択(例えば
Ctrl
を押しな
がらクリック)し、
TortoiseSVN
のコンテキストメニューから
差分を表
示 を選択してください。最後にクリックしたファイル(フォーカスのある、つまり点線
の四角で囲まれているもの)を最新として扱います。
4.8. 変更リスト
常に一度にひとつの作業しか行わず、作業コピーには論理的にひとかたまりの変更しか存在しなけれ
ば理想的でしょう。しかし現実では、関連のない複数の作業を同時に行わなければならない場合がよ
くあります。そしてその場合、コミットダイアログには、変更したファイルがすべて混ざった状態で
表示されてしまいます。 変更リスト 機能は、ファイルをグループにまとめ、どうするべきかを判り
やすくしてくれます。もちろん、変更したファイルが重複していない場合に限ります。異なる仕事で
同じファイルを変更した場合、変更を分割する方法はありません。
変更リストは様々な場所で目にすることができますが、最も重要なのは、コミットダイアログと変更
のチェックダイアログです。いくつかの機能とたくさんのファイルに対して作業を行い、その後で変
更のチェックダイアログを開きましょう。初めて変更のチェックダイアログを開くと、変更のある
50
日常の使用ガイド
ファイルがすべて表示されます。機能単位に変更リストを作成し、ファイルをグループ化するとして
おくとよいでしょう。
変更リストに項目を追加するには、ファイルを選択して コンテキストメニュー → 変更リストへ移
動 を使用してください。初期状態では変更リストがありませんので、最初に新しい変更リストを作
成します。変更リストに何のために使用するのか分かる名前を付けて、 OK をクリックしてくださ
い。ダイアログが項目のグループを表示するように変化します。
いったん変更リストを作成すると、別の変更リストや Windows エクスプローラーからも、項目をド
ラッグ&ドロップできます。エクスプローラーからドラッグすれば、ファイルを変更する前に変更リ
ストに追加できるので便利です。変更のチェックダイアログからも同じことができますが、未変更
ファイルすべてを表示しなければなりません。
図4.15 変更リストがあるコミットダイアログ
コミットダイアログでは、同じファイルが変更リストでグループ化されて表示されます。グループを
視覚的に表示する機能とは別に、グループの見出しをコミットするファイルを選択するために使用す
ることもできます。
51
日常の使用ガイド
ignore-on-commitという変更リスト名は、TortoiseSVNが自身で使用するために予約しています。こ
れは、ローカルで変更があってもコミットしたくない、バージョン管理下のファイルをマークするの
に使用します。この機能は、「コミット一覧からの項目の除外」で説明します。
通常、変更リストに属するファイルをコミットすれば、変更リストに所属させておく必要はなくなる
と考えられます。そのためデフォルトでは、コミットしたファイルは、変更リストから除外されま
す。変更リストに入れたままにしておきたい場合は、コミットダイアログの下部にある 変更リスト
を保持する をチェックしてください。
ヒント
変更リストは純粋にローカルクライアントの機能です。変更リストを作成・削除して
も、リポジトリや他人の作業コピーには影響しません。単に自分でファイルを管理す
る、便利な方法でしかありません。
警告
なお、変更リストを使用する場合、外部参照はグループとして表示されなくなりまし
た。変更リストがあるときは、ファイルやフォルダーが外部参照ではなく変更リストで
グループ化されます。
4.9. リビジョンログダイアログ
変更してコミットするたびに、変更点ついてのログメッセージを残しておきましょう。これを見れ
ば、後からどんな変更をなぜ行ったのかがわかりますし、開発プロセスの詳細なログにもなります。
リビジョンログダイアログでは、すべてのログメッセージが取得され表示されます。画面は3つの部
分に分かれています。
• 上部のリストには、ファイルやフォルダーの変更がコミットされたリビジョンの一覧が表示されま
す。この欄にはコミット日時、そのリビジョンをコミットした人、ログメッセージの冒頭などが表
示されます。
青く表示されている行は、何かがこの開発ラインに(おそらくブランチから)コピーされてきたこ
とを示しています。
• 中央の欄には、選択したリビジョンのログメッセージ全体が表示されます。
• 下部のリストには、選択したリビジョンで変更したファイルやフォルダーの一覧が表示されます。
他にも、コンテキストメニューのコマンドを使用すれば、プロジェクトの履歴についての追加情報を
取得できます。
52
日常の使用ガイド
4.9.1. リビジョンログダイアログの起動
図4.16 リビジョンログダイアログ
ログダイアログは、様々な場所から表示することができます。
• TortoiseSVN のコンテキストサブメニューから
• プロパティページから
• 更新が終わった進行ダイアログから。前回の更新から変更のあったリビジョンのみ、ログダイアロ
グに表示されます。
• リポジトリブラウザーから
リポジトリが使用できない場合、 オフラインにしますか? というダイアログが表示されます。詳し
くは、 「オフラインモード」で説明します。
4.9.2. リビジョンログのアクション
上のリストの アクション 列には、そのリビジョンで何が行われたのかを示すアイコンが表示されま
す。4種類のアイコンが、それぞれ1列ずつ表示されます。
そのリビジョンでファイルやディレクトリが変更された場合、変更
す。
アイコンが1列目に表示されま
そのリビジョンでファイルやディレクトリが追加された場合、追加
す。
アイコンが2列目に表示されま
53
日常の使用ガイド
そのリビジョンでファイルやフォルダーが削除された場合、削除 アイコンが3列目に表示されます。
そのリビジョンでファイルやフォルダーが置換された場合、置換 アイコンが4列目に表示されます。
そのリビジョンでファイルやディレクトリが移動されたり名前が変更されたりした場合、移動
コンが4列目に表示されます。
アイ
そのリビジョンでファイルやフォルダーが移動または名前変更によって置換された場合、移動置換
アイコンが4列目に表示されます。
そのリビジョンでファイルやフォルダーがマージされた場合、マージ アイコンが4列目に表示されま
す。
そのリビジョンでファイルやフォルダーが逆マージされた場合、逆マージ アイコンが4列目に表示さ
れます。
4.9.3. 追加情報の取得
図4.17 リビジョンログダイアログの上部のリストのコンテキストメニュー
ログダイアログの上部のリストには、より詳細な情報にアクセスできるコンテキストメニューがあり
ます。このメニューにはファイルのログでしか現れないものや、フォルダーのログでしか現れないも
のがあります。
54
日常の使用ガイド
作業コピーと比較
作業コピーと選択したリビジョンを比較します。デフォルトの差分ツールは、 TortoiseSVN と共
に提供されている TortoiseMerge です。フォルダーに対するログダイアログの場合、変更のあっ
たファイルが一覧表示され、個々のファイルに対して変更を確認することができます。
作業ベースと比較/注釈履歴
選択したリビジョンと作業ベースのファイルの注釈履歴を取得し、差分ツールを使用して比較し
ます。詳しくは 「注釈履歴の差分」を参照してください。(ファイルのみ)
Unified形式で変更を表示
選択したリビジョンで行われた変更点を、Unified差分ファイル(GNUパッチ形式)で表示しま
す。差分のみが数行で表示されます。視覚的なファイル比較よりも分かりにくいのですが、すべ
ての変更をまとめてコンパクトな形式で確認できます。
Shift キーを押しながらメニュー項目をクリックすると、最初にUnified差分ファイルのための
オプションを設定するためのダイアログが開きます。これらのオプションの中に、行末文字や空
白文字の変更を無視するものが含まれています。
直前のリビジョンと比較
選択したリビジョンを直前のリビジョンと比較します。作業コピーとの比較と同じように動作し
ます。フォルダーに対してこの操作を実行すると、まず比較するファイルを選択する「変更され
たファイル」ダイアログが表示されます。
直前のリビジョンと比較/注釈履歴
ファイルを選択する「変更されたファイル」ダイアログが表示されます。選択したリビジョンと
直前のリビジョンの注釈履歴を取得し、差分ツールを使用して結果を比較します。(フォルダー
のみ)
リビジョンを保存...
選択したリビジョンをファイルに保存し、そのファイルの古いバージョンを入手します。(ファ
イルのみ)
開く/プログラムを指定して開く...
ファイル形式に対応する既定のビューアー、もしくは選択したプログラムのどちらかを用いて、
選択したファイルを開きます。(ファイルのみ)
注釈履歴...
選択したリビジョンまでのファイルの注釈履歴を表示します。(ファイルのみ)
リポジトリの閲覧
選択したファイルやフォルダーを閲覧するため、リポジトリブラウザーを選択したリビジョンで
開きます。
リビジョンからブランチ/タグを作成
選択したリビジョンからブランチやタグを作成します。タグを作成し忘れて、リリースに入れる
ことを前提としていない変更をすでにコミットしてしまったような場合に便利です。
項目を特定リビジョンへ更新
作業コピーを選択したリビジョンに更新します。時間をさかのぼり、作業コピーを過去の状態に
したい場合や、リポジトリに他のコミットが行われた後で、作業コピーを一度に更新したい場合
に便利です。単体のファイルではなく、作業コピー全体のディレクトリを更新するとよいでしょ
う。そうでなければ作業コピーに矛盾が発生してしまいます。
以前の変更点を永久に取り消したい場合は、代わりに このリビジョンに戻す を使用してくださ
い。
このリビジョンに戻す
以前のリビジョンに戻します。既にいくつか変更を行った後で、リビジョン N へ戻したい場合に
使用するコマンドです。変更の取り消しは作業コピーで行われますので、変更をコミットするま
ではリポジトリに影響を 与えません 。選択したリビジョン以降の変更が すべて 取り消され、
ファイルやフォルダーが以前のリビジョンに置き換えられてしまうので注意してください。
55
日常の使用ガイド
作業コピーが未変更の状態の場合、この操作を実行すると、作業コピーが変更の状態になりま
す。すでに変更されている場合、このコマンドは作業コピーの変更を 取り消す 方向にマージし
ます。
内部的には、 Subversion は選択されたリビジョンの後に行われたすべての変更の逆マージを実
行し、以前のコミットの効果を元に戻すという動作をします。
この操作の後で、 元に戻したものを元に戻し 、作業コピーを以前の変更されていない状態に戻
す場合、Windows エクスプローラーから TortoiseSVN → 変更の取り消し を実行し、逆マージ操
作で行われたローカルの変更を取り消してください。
以前のリビジョンで、どんなファイルやフォルダーがあったのかを見たいだけであれば、代わり
に 特定リビジョンへ更新 や リビジョンを保存... を使用してください。
このリビジョンにおける変更を取り消す
選択したリビジョンの変更を取り消します。作業コピーの変更が取り消されるので、この操作は
リポジトリにまったく影響を 及ぼしません 。 そのリビジョンで行われた変更のみが元に戻され
ることに注意してください。作業コピーのファイル全体が以前のリビジョンに置き換えられるわ
けではありません。関係ない変更を行った後で、以前の変更を元に戻すのに便利です。
作業コピーが未変更の状態の場合、この操作を実行すると、作業コピーが変更の状態になりま
す。すでに変更されている場合、このコマンドは作業コピーの変更を 取り消す 方向にマージし
ます。
内部的には、 Subversion は選択したリビジョンで行われた変更の逆マージを実行し、以前のコ
ミットの効果を元に戻すという動作をします。
このリビジョンに戻す で説明しているように、 元に戻したものを元に戻す こともできます。
このリビジョンをマージ...
選択したリビジョンを異なる作業コピーにマージします。フォルダー選択ダイアログでマージ結
果を格納する作業コピーを選択できますが、確認ダイアログはなく、またマージのテストもでき
ません。変更されていない作業コピーを用い、選択したリビジョンをマージするのに失敗したら
変更を取り消すとよいでしょう。これはあるブランチから別のブランチへ、選択したリビジョン
をマージするのに便利な機能です。
チェックアウト...
選択したリビジョンの選択したフォルダーを新たにチェックアウトします。 URL とリビジョンを
確認するダイアログが現れるので、チェックアウトする場所を選択してください。
エクスポート...
選択したリビジョンの選択したファイルやフォルダーをエクスポートします。 URL とリビジョン
を確認するダイアログが現れるので、エクスポートする場所を選択してください。
作者・ログメッセージを編集
以前に行ったコミットのログメッセージや作者を編集します。どのように行うかは、
メッセージや作者の変更」をご覧ください。
「ログ
リビジョンプロパティを表示
ログメッセージと作者に限らず、任意のリビジョンプロパティを表示・編集します。
メッセージや作者の変更」をご覧ください。
「ログ
クリップボードにコピー
選択したリビジョンのログ詳細をクリップボードにコピーします。これにはリビジョン番号、著
者、日時、ログメッセージ、変更した項目の一覧がコピーされます。
ログメッセージを検索...
入力したテキストでログメッセージを検索します。ログメッセージの入力された部分と、
Subversion が作成した動作の概要(下の欄に表示)も検索対象になります。大文字小文字は区
別されません。
56
日常の使用ガイド
Code Collaboratorのレビューを作成...
このメニューは、 SmartBear Code Collaborator がインストールされている場合にのみ表示され
ます。最初に実行すると、 Code Collaborator と Subversion の両方のユーザー認証を求めるダ
イアログが表示されます。いったん設定が格納されると、 Ctrl を押したままメニュー項目を実
行しない限り、設定ダイアログは表示されなくなります。設定や選択されたリビジョンが Code
Collaborator の GUI クライアントの起動に使用され、選択されたリビジョンに対して新しいレ
ビューが作成されます。
図4.18 Code Collaborator 設定ダイアログ
図4.19 2つのリビジョンを選択した時の上部のリストのコンテキストメニュー
同時に2つのリビジョンを(Ctrl
の機能に変わります。
を押しながら)選択すると、コンテキストメニューの内容が以下
リビジョンを比較
選択した2つのリビジョンを差分ツールで比較します。デフォルトの差分ツールは、
TortoiseSVN に同梱されている TortoiseMerge です。
フォルダーに対して実行した場合、変更のあったファイルを一覧表示するダイアログが表示さ
れ、差分を表示するオプションを指定できます。リビジョン比較ダイアログについては、
「フォルダーの比較」をご覧ください。
リビジョンの注釈履歴
2つのリビジョンの注釈履歴をとり、差分ツールで比較できます。詳細は、
分」をご覧ください。
57
「注釈履歴の差
日常の使用ガイド
Unified形式で差分を表示
選択した2つのファイルの差分を、Unified差分ファイルで表示します。ファイルとフォルダー
で動作します。
クリップボードにコピー
前述したように、ログメッセージをクリップボードにコピーします。
ログメッセージを検索...
前述したように、ログメッセージを検索します。
2つ以上のリビジョンを選択(通常 Ctrl や Shift を押しながら選択)すると、コンテキストメ
ニューには「これらのリビジョンにおける変更を取り消す」項目が現れます。これがリビジョンのグ
ループを変更を一度に取り消す、最も簡単な方法です。
また、前述のとおり、選択したリビジョンを別の作業コピーにマージできます。
選択したすべてのリビジョンが、同じ作者のものであれば、すべてのリビジョンの作者を一気に編集
できます。
図4.20 ログダイアログ下部の一覧でコンテキストメニューを表示したところ
ログダイアログの下の欄にも、
変更を表示
選択されたファイルの選択されたリビジョンにおける変更を表示する。
変更の注釈履歴
選択したファイルの、選択したリビジョンと直前のリビジョンの注釈をとり、視覚差分ツールで
比較できます。詳細は、 「注釈履歴の差分」 をご覧ください。
Unified形式で変更を表示
ファイルの変更点をUnified差分ファイルで表示します。このコンテキストメニューは、ファイ
ルに 変更 がある時のみ有効です。
開く/プログラムを指定して開く...
選択したファイルを、ファイル形式に応じた既定のビューアーか選択したプログラムで開きま
す。
注釈履歴...
注釈履歴ダイアログを開き、選択したリビジョンの担当情報を参照できます。
このリビジョンにおける変更を取り消す
選択したファイルのこのリビジョンでの変更を取り消します。
58
日常の使用ガイド
プロパティを表示
選択した項目の Subversion のプロパティを表示します。
ログを表示
単体のファイルを選択しているとき、ファイルのリビジョンログを表示します。
マージのログを取得する
単体のファイルを選択しているとき、ファイルのマージされた変更を含めリビジョンログを表示
します。詳細は 「マージ追跡機能」 をご確認ください。
リビジョンを保存...
選択したリビジョンをファイルに保存し、そのファイルの古いバージョンを入手します。
エクスポート...
このリビジョンの選択された項目を、ファイルの階層を保持したままエクスポートします。
のためのコンテキストメニューがあります。ログダイアログの下の欄で複数のファイルが選択されて
いた場合、コンテキストメニューは次のように変化します。
図4.21 ログダイアログ下部の一覧で複数ファイル選択時にコンテキストメニューを
表示したところ
リビジョンを保存...
選択したリビジョンをファイルに保存し、そのファイルの古いバージョンを入手します。
複数の更新を表示...
選択されたファイルの選択されたリビジョンで行われた変更を表示します。なお、変更の表示機
能が複数回呼び出されるので、選択されている差分ツールによっては複数が起動したり、タブに
表示されたりします。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とリビ
ジョンを確認するダイアログが表示されますので、エクスポートする場所を選択してください。
59
日常の使用ガイド
ヒント
「変更」と「差分」という用語が使い分けられていることにお気づきと思います。では
差分とはなんでしょうか?
Subversion では、リビジョン番号を2つの異なる意味で使用しています。一般的にリビ
ジョンといえば、その時点でのリポジトリの状態を表しますが、一方ではリビジョンを
作成した際の一連の変更を表す場合に使用することもあります。例えば、「r1234での変
更」といえば、r1234の変更のコミットで実装された機能 X のことを表します。どちらの
意味で使用されているかを明確にするために、2つの用語を使い分けます。
リビジョン N とリビジョン M を選択すると、その2つのリビジョンの 差分 をコンテキ
ストメニューで表示できるようになります。 Subversion のコマンドでは、これは diff
-r M:N に相当します。
リビジョン N を選択した場合、そのリビジョンで行った 変更 をコンテキストメニュー
で表示できるようになります。 Subversion のコマンドでは、これは diff -r N-1:N や
diff -c N に相当します。
下のリストには、選択したリビジョンで変更されたすべてのファイルが表示されます。
そのため、コンテキストメニューには常に 変更を表示 となるのです。
4.9.4. ログメッセージの追加取得
ログダイアログは以下のような場合、変更履歴を最後まで表示しないことがあります。
• 大きなリポジトリでは何百何千もの変更があり、すべて取得するには時間がかかるため。しかし通
常参照する変更は最近のものだけでしょう。デフォルトでは取得するログメッセージは100件に制
限されていますが、 TortoiseSVN → 設定 「TortoiseSVN ダイアログ設定1」)で変更できます。
• コピー/名前の変更が発生したら停止 がチェックされていると、ログの表示は選択されたファイル
やフォルダーが他の場所からコピーされてきた時点で停止します。これはブランチ(やタグ)を参
照するときに、ブランチの作成時点で停止するので、ブランチ内部の変更をすばやく表示できるの
で便利です。
通常、このオプションをチェックしないままにしておきたいのではないでしょうか。 TortoiseSVN
はチェックボックスの状態を記憶していますので、その設定が尊重されます。
マージダイアログからログダイアログを表示すると、このチェックボックスは、デフォルトで常に
チェックされます。これは通常のマージ作業ではブランチ内部の変更を調べるものであり、ブラン
チの作成時点を超えて遡るようなことはないからです。
Subversion は現在、名前の変更をコピー・削除で行います。そのため、このオプションにチェッ
クがついていると、ファイルやフォルダーの名前を変更した時点でログの表示が停止することに注
意してください。
ログメッセージをもっと見たい場合は、次の100件
得してください。必要なだけ繰り返せます。
をクリックして次の100件のログメッセージを取
このボタンの隣に多機能ボタンがあります。前回使用したオプションが記憶されていますが、三角形
をクリックすると、他のオプションを指定できます。
表示する範囲を指定... を使用すると、表示するリビジョンの範囲を指定することができます。ダイ
アログが表示されるので、開始リビジョンと終了リビジョンを指定してください。
すべて表示 を使用すると、 HEAD からリビジョン 1 までさかのぼって すべての ログメッセージを
表示することができます。
ログダイアログを開いている間に他のコミットが実行された場合など、最新のリビジョンに更新した
い場合は、 F5 キーを押してください。
60
日常の使用ガイド
ログキャッシュを読み込みなおすには、 Ctrl+F5 キーを押してください。
4.9.5. 現在の作業コピーのリビジョン
ログダイアログは、現在の作業コピーのリビジョンではなく、 HEAD リビジョンからログを表示する
ため、まだ作業コピーに取得されていない部分のログメッセージが表示されることがよくあります。
これを明確にするために、作業コピーのリビジョンに一致するコミットメッセージは太字で表示され
ます。
フォルダーのログが表示される際、太字で表示されるリビジョンは、フォルダー内のファイルの最新
のリビジョンになります。これには作業コピーのクロールが必要です。クロールは別スレッドで実行
するため、ログ表示に遅延は起こりませんが、フォルダーによってはすぐに太字で表示されないこと
があります。
4.9.6. マージ追跡機能
Subversion 1.5 以降では、プロパティでマージ情報を保持しています。これにより、マージでの変
更点の詳細な履歴を得られます。例えば、ブランチで新機能を開発し、それをトランクにマージした
場合、たとえブランチでの開発で1000回コミットしたとしても、トランクではマージした1回分のロ
グしか存在しなくなります。
図4.22 マージ追跡リビジョンを表示したログダイアログ
マージを含んだコミットのリビジョンの詳細を見る場合、
マージされたリビジョンを含め
る チェックボックスを使用してください。これによりログメッセージを再取得しますが、マージさ
れたリビジョンに由来するのログメッセージが挿入されます。マージされたリビジョンは、別ツリー
で変更されているので、灰色で表示されます。
もちろん、マージは決して単純ではありません。ブランチでの機能開発中、メインラインコードと同
期を取り続けるために、トランクからたびたび行わなければならないでしょう。そのため、ブランチ
61
日常の使用ガイド
のマージ履歴には、別レイヤのマージ履歴が含まれていることでしょう。ログダイアログでは、異な
るレイヤをインデントレベルで表します。
4.9.7. ログメッセージや作者の変更
リビジョンプロパティは、項目の Subversion プロパティとは異なるものです。リビジョンプロパ
ティは、ログメッセージやコミット日時、コミットした人(作者)といった、リポジトリの特定のリ
ビジョン番号に関連する説明的な項目です。
時には、一度入力したログメッセージを変更したいこともあるでしょう。綴り間違いがあったり、ま
たメッセージを改善したり、その他の理由で変更したくなるかもしれません。また、コミットした作
者を変更したくなるかもしれません。認証を設定し忘れてしまったとか……
Subversion では、必要に応じてリビジョンプロパティをいつでも変更できます。しかし、その変更
を元に戻せない(この変更はバージョン管理外になります)ので、デフォルトではこの機能は無効に
なっています。有効にするには、 pre-revprop-change フックを設定する必要があります。この手順
の詳細については、 Subversion Book の Hook Scripts [http://svnbook.red-bean.com/en/1.8/
svn.reposadmin.create.html#svn.reposadmin.create.hooks] をご覧ください。 Windows マシンでの
フックの実装については、 「サーバー側フックスクリプト」 をご覧ください。
いったん必要なフックをサーバーに設定してしまえば、任意のリビジョンに対して、作者やログメッ
セージ(またはその他のリビジョンプロパティ)を変更できます。ログダイアログの上部のリストの
コンテキストメニューを使用してください。中央の欄のコンテキストメニューを使用して、ログメッ
セージを編集することもできます。
警告
Subversion のリビジョンプロパティはバージョン管理されないため、リビジョンプロパ
ティ(例えば svn:log コミットメッセージプロパティ)を変更すると、直前の値を 完全
に 上書きしてしまいます。
重要
TortoiseSVN はすべてのログ情報のキャッシュを保持しているため、変更を行った作者
やログメッセージはローカル環境でのみ表示されます。ログキャッシュが更新されるま
での間、他のユーザーには、キャッシュされた(古い)作者やログメッセージが表示さ
れます。「表示の更新」を参照してください
4.9.8. ログメッセージの絞り込み
興味あるログメッセージを限定して表示させたい場合は、何百もあるリストをスクロールするより
も、ログダイアログの上端にある絞り込みコントロールを使用したほうが便利です。日付の範囲を指
定すると、その範囲のメッセージだけに絞り込むことができます。検索ボックスに文字列を入力する
と、その文字列が含まれるメッセージだけに絞って表示できます。
検索アイコンクリックすると、検索対象となる情報の種類や、 正規表現 を使用するかどうかを選択
できます。普段は単純な文字列検索で充分でしょうが、より複雑な検索条件を指定したい場合は、正
規表現を使用することができます。検索ボックスの上にマウスを置くと、正規表現の記号や特殊文字
の使い方がツールチップで表示されます。絞り込み文字列がログ項目と一致するかどうかがチェック
され、絞り込み文字列と 一致 した項目のみが表示されます。
単純な文字列での検索の仕方は、検索エンジンと似ています。複数の文字列を空白で区切って入力す
ると、すべての文字列を含む項目が検索されます。文字列の前に
を付けると、そ
の文字列が含まれないものが検索されます(語句の否定検索)。そして、最初に
!
を
付けると、検索文字列全体が否定になります。前に
+
を付けた文字列は、以前に
- を付けて除外した文字列であっても、含まれるものが検索されます。なお、含まれる・除外される
指示の順番が重要であることに気を付けてください。空白を含む文字列を検索する場合は、文字列を
引用符で囲んでください。引用符の文字を含む文字列を検索する場合は、引用符を2つ並べてエス
62
日常の使用ガイド
ケープしてください。なお、バックスラッシュ文字はエスケープ文字 ではなく 、単純な文字列検索
では特別な意味を持たないことに注意してください。次のサンプルを見たほうが簡単でしょう。
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://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE] にある説明や、 http://
www.regular-expressions.info/
にあるオンラインのドキュメントやチュートリアルをご覧くださ
い。
絞り込みは、すでに取得したメッセージのみが対象になることに注意してください。リポジトリから
メッセージをダウンロードすることはありません。
また、 影響を受けるパスのみ表示 を使用すると、下の欄のパス名を絞り込みすることもできます。
影響を受けるパスとは、ログを表示するために使われたパスを含むパスです。フォルダーのログを取
得する場合は、そのフォルダー以下すべてが対象になります。ファイルの場合は、そのファイルのみ
が対象になります。通常、パスのリストには影響を受けるパス以外にも、同時にコミットされたパス
が灰色で表示されます。ボックスをチェックすると、それらのパスは非表示になります。
運用上、ログメッセージを特定の書式に統一したい場合があります。変更点の説明文が、上部のリス
トに表示される冒頭の部分に表示されない場合などです。 tsvn:logsummary プロパティを使用する
と、上部のリストに表示されているログメッセージの一部を抽出できます。このプロパティの使い方
は、 「TortoiseSVN のプロジェクトプロパティ」 をご覧ください。
63
日常の使用ガイド
リポジトリブラウザーからログのフォーマット変更はできませ
ん
ログのフォーマット変更は、 Subversion のプロパティとして保持されているため、
チェックアウトした作業コピーを使用するときのみ表示されます。リモートからプロパ
ティを取得するのには時間がかかるため、リポジトリブラウザーから起動した場合はこ
の機能が表示されません。
4.9.9. 統計情報
ログダイアログの 統計 ボタンは、リビジョンについての興味深い情報を表示します。作業者が何人
いるのか、コミットは何回行われているのか、週ごとの進行状況、等といった情報です。これで、誰
ががんばり屋で誰がなまけ者か一目で分かります。;-)
4.9.9.1. 統計ページ
このページでは、期間やリビジョン数、最小・最大・平均などの集計値のような参考になる数値を提
供します。
4.9.9.2. 「作者別コミット数」ページ
図4.23 「作者別コミット数」ヒストグラム
このグラフは、プロジェクト内のどのユーザーがアクティブかを、ヒストグラム、積み重ね棒グラ
フ、円グラフで表します。
64
日常の使用ガイド
図4.24 「作者別コミット数」円グラフ
少数の主要な作者と、多数の細かい協力者がいる環境では、細分化されてグラフが読みにくくなりま
す。グラフの下にあるスライダーを使用して閾値(全コミットにおけるパーセンテージ)を設定する
と、活動状況が閾値以下の人が その他 カテゴリにグループ化されます。
65
日常の使用ガイド
4.9.9.3. 「時期別コミット数」ページ
図4.25 「時期別コミット数」グラフ
このページでは、プロジェクトの活動状況を、一定期間のコミット回数 および 作者別で表示しま
す。これによりプロジェクトがいつ活動していたか、そのとき誰が作業したかといった判断材料にな
るでしょう。
多数の作者がいる場合、グラフにたくさんの線が表示されます。この画面ではさらに2つの表示方法
が使用できます。
折れ線グラフ
は、作者の活動状況ごとに表示し、
積み重ね面グラ
フ は、作者の活動状況を積み重ねて表示します。後者では線が交差しなくなるためため、グラフは
読みやすくなりますが、個別の作者の状況は読みにくくなります。
デフォルトでは、分析する際、ユーザー名の大文字と小文字が区別されます。そのため、 PeterEgan
と PeteRegan というユーザーは別人として扱われます。しかし多くの場合、ユーザー名の大文字と
小文字を区別しておらず、時には混同して入力されます。つまり、 DavidMorgan と davidmorgan を
同一として扱うということです。 作者名の大文字/小文字を区別しない チェックボックスを使用し
て、どのように扱うかを決めてください。
この統計はログダイアログと同じ期間が対象になることに注意してください。1リビジョンしか表示
していないときには、統計には大した情報は現れません。
66
日常の使用ガイド
4.9.10. オフラインモード
図4.26 オフライン移行ダイアログ
ログキャッシュを有効にしている場合、サーバーに接続できなくても、ログダイアログやリビジョン
グラフはオフラインモードで使用できます。これはキャッシュからのデータを使用し、作業を継続で
きますが、おそらく最新でも完全でもありません。
ここでは以下の3つの選択肢があります。
オフラインにする
現在の操作を完全にオフラインモードにしますが、ログデータが次回要求されたときに、リポジ
トリへの接続を再試行します。
常にオフライン
リポジトリのチェックを明確に要求されるまで、オフラインモードのままにします。
更新」をご覧ください。
「表示の
キャンセル
おそらく陳腐化したであろうデータで操作を継続したくない場合は、単にキャンセルとしてくだ
さい。
デフォルトに設定する チェックボックスは、このダイアログを再度表示しないようにし、選択を常
に使用します。ここで設定したとしても、 TortoiseSVN → 設定 で、デフォルト値の変更(削除)が
行えます。
4.9.11. 表示の更新
新しいログメッセージを取得するためにサーバーを再チェックする場合、単純に F5 で表示を更新で
きます。ログキャッシュを使用している場合(デフォルトで有効)、新しいログメッセージがあるか
リポジトリをチェックし、新しいもののみを取得します。ログキャッシュがオフラインモードになっ
ている場合、オンラインモードに切り替えを試みます。
ログキャッシュを使用しており、メッセージの内容や作者を更新したい場合、Shift+F5
や
Ctrl
+F5 で表示しているメッセージをサーバーから再取得し、ログキャッシュを更新できます。これは現
在表示されているメッセージにしか効果はなく、そのリポジトリのキャッシュ全体が無効になるわけ
ではないことに注意してください。
4.10. 差分の表示
67
日常の使用ガイド
プロジェクト開発を進める上でもっとも共通の需要のひとつが、何を変更したかを確認するというこ
とです。同じファイルの2つのリビジョン間や、2つの異なるファイルの違いを確認したくなること
があるでしょう。 TortoiseSVN には、 TortoiseMerge というテキストファイルの差分を表示する内
蔵ツールがあり、 TortoiseIDiff という画像ファイルの差分を見るためのツールもあります。もち
ろん、任意の差分プログラムを使うこともできます。
4.10.1. ファイルの差分
ローカルの変更
自分 が作業コピー内でどんな変更を行ったか確認する場合は、エクスプローラーのコンテキス
トメニューで TortoiseSVN → 差分を表示 を選択してください。
別のブランチ/タグとの差分
(ブランチで作業していて)トランクの変更点を見る場合や、(トランクで作業していて)特定
のブランチの変更点を見る場合、エクスプローラーのコンテキストメニューを使用できます。
Shift キーを押したままファイルを右クリックし、 TortoiseSVN → URL を指定して差分を表
示 を選択してください。その後で表示されるダイアログでは、ローカルのファイルと比較する
リポジトリの URL を指定してください。
2つのツリー、たとえば2つのタグや、ブランチ/タグとトランクを選択して差分を取るとき
は、リポジトリブラウザーを使用することもできます。そこでコンテキストメニューの
リビ
ジョンを比較 を使用することで比較ができます。 「フォルダーの比較」をご覧ください。
以前のリビジョンとの差分
特定のリビジョンと作業コピーの差分を取る場合は、リビジョンログダイアログを使用します。
比較したいリビジョンを選択し、コンテキストメニューから 作業コピーと比較 を選択してくだ
さい。
最後にコミットしたリビジョンと、変更されていないと思われる自分の作業コピーとの差分を見
る場合は、単にファイルを右クリックし、TortoiseSVN
→
直前のバージョンとの差分を表
示 を選択してください。ここでは、(作業コピーに記録されている)最終コミット日時以前の
リビジョンと、作業ベースとの差分を表示します。これにより、現在の作業コピーの元となる直
前の変更点を参照できます。作業コピーよりも新しい変更点は表示されません。
2つのリビジョン間の差分
すでにコミットした2つのリビジョン間の差分を取るのなら、リビジョンログダイアログを使用
し、(通常 Ctrl を使用して)比較したい2つのリビジョンを選択してください。それから、コ
ンテキストメニューで リビジョンを比較 を選択してください。
フォルダーのリビジョンログから行った場合、リビジョン比較ダイアログが現れ、フォルダーに
ある変更されたファイルの一覧を表示します。 「フォルダーの比較」をご覧ください。
コミットしたすべての変更
特定のリビジョンで行ったすべてのファイルの変更点を一目で確認したいなら、Unified差分
ファイル(GNUパッチ形式)を使用できます。ここでは差分が本文内の数行のみで表示されま
す。視覚的なファイル比較よりは読みにくくなりますが、すべての変更を一度に確認できます。
リビジョンログダイアログから確認したいリビジョンを選択し、コンテキストメニューから
Unified形式で差分を表示 を選択してください。
ファイル間の差分
2つの異なるファイルの差分を確認したい場合、エクスプローラーで直接両方(Ctrl を押しな
がら)選択してください。その後、エクスプローラーのコンテキストメニューからTortoiseSVN
→ 差分 を選択します。
差分を表示するファイルが同じフォルダーにない場合、TortoiseSVN → 差分元として選択コマン
ドで比較する1つ目のファイルを選択し、それから2つ目のファイルを表示してTortoiseSVN → "
68
日常の使用ガイド
<パス名>"との差分を表示</パス名>
作業コピーのファイル・フォルダーと URL 間の差分
作業コピーのファイルと、 Subversion リポジトリのファイルとの差分を確認する場合は、エク
スプローラーで直接そのファイルを選択し、 Shift キーを押しながら右クリックしてコンテキス
トメニューを表示させ、TortoiseSVN → URL を指定して差分を表示 を選択してください。作業コ
ピーのフォルダーの場合も同様です。 TortoiseMerge ではパッチファイルの場合の同様、変更の
あったファイルの一覧が表示され、それぞれの差分を個別に確認できます。
注釈履歴の差分
リビジョンログダイアログから差分と注釈履歴を組み合わせて表示させ、ファイルの差分ばかり
でなく、作者、リビジョン、更新日時を確認することができます。詳しくは、 「注釈履歴の差
分」 をご覧ください。
フォルダー間の差分
TortoiseSVN の内蔵ツールは、ディレクトリ階層の比較をサポートしていません。しかし、その
機能をサポートしている外部ツールを使えばディレクトリを比較できます。 「外部差分・マー
ジツール」 で使用できるツールをご紹介します。
サードパーティの差分ツールを設定している場合、差分コマンドを選択する際にShift を押すと代替
ツールを使用できます。その他の差分ツールの設定については、 「外部プログラムの設定」 をご覧
ください。
4.10.2. 改行コードと空白のオプション
プロジェクトを続けていくと、時には改行コードを CRLF から LF に変更したり、セクションのイン
デントを変更したりすることがあります。不幸なことに、かなりの行を変更しなければならないにも
かかわらず、コードの意味に変化はありません。以下のオプションでは、比較や差分を適用する際の
変更点の把握方法を管理します。これらの設定は、 TortoiseMerge の設定のほか、 マージ や 注釈
履歴 ダイアログから行うことができます。
改行コードを無視する は、改行コードのみの変更を無視します。
空白を比較する は、インデントや行内の空白の追加・削除を変更点に含めます。
空白の変更を無視する は、空白の数や種類(インデントや、タブとスペースの変更など)のみの変
更を無視します。空白がないところに追加されたり、存在する空白が完全に削除されたりした場合
は、変更として表示されます。
すべて空白を無視する は、空白のみの変更をすべて無視します。
当然、内容の変更のある行は、常に差分に含まれます。
4.10.3. フォルダーの比較
69
日常の使用ガイド
図4.27 リビジョンの比較ダイアログ
リポジトリブラウザーで2つのツリーを選択したり、ログダイアログでフォルダーのの2つのリビ
ジョンを選択したりすると、 コンテキストメニュー → リビジョンを比較 が実行できるようになりま
す。
このダイアログでは、変更されたすべてのファイルが表示され、コンテキストメニューから個々に比
較や注釈履歴の取得を行えます。
変更ツリー をエクスポートすることができます。これは、プロジェクトのツリー構造の中で、変更
されたファイルのみを他人に渡したい場合に便利です。この操作は選択したファイルにのみ作用しま
すので、あらかじめエクスポートするファイル(通常はすべて)を選択してから、 コンテキストメ
ニュー → 選択をエクスポート... を実行してください。そして、変更ツリーを保存する場所を指定
してください。
また、 コンテキストメニュー → 選択ファイルのリストを保存... を使用すると、変更されたファイ
ルの 一覧 をエクスポートすることができます。
ファイルの一覧 と 行われた操作(変更・追加・削除)をエクスポートする場合、 コンテキストメ
ニュー → 選択範囲をクリップボードにコピー を使用してください。
最上部のボタンは、比較の方向を変更します。AからBへの変更を表示しているとき、必要に応じ
て、BからAへの変更も表示できます。
リビジョン番号が表示されているボタンで、リビジョン範囲を変更することができます。範囲を変更
すると、2つのリビジョン間の差分が自動的に更新されます。
ファイル名の一覧が非常に長い場合、検索ボックスを使用して、特定のテキストを含むファイル名の
みを抽出できます。単純文字列検索を行いますので、Cのソースファイルを指定したい場合は、 *.c
ではなく .c と指定してください。
70
日常の使用ガイド
4.10.4. TortoiseIDiff を使用した画像の差分
テキストファイルの差分を取るツールは、 TortoiseMerge を含めてたくさんありますが、私たちは
よく画像ファイルに、どんな変更が加えられたかを知りたくなることもありました。そのために
TortoiseIDiff を作成しました。
図4.28 画像差分ビューアー
一般的な画像ファイル形式のファイルを選択して TortoiseSVN → 差分を表示 を実行すると、画像の
差分を表示するために TortoiseIDiff が起動します。デフォルトでは画像が横に並んで表示されま
すが、表示メニューやツールバーで上下に表示するように切り替えることができます。また、ライト
ボックスを使用した時のように、画像を重ねて表示することもできます。
画像をズームイン・アウトしたり、移動したりすることもできます。画像を左ドラッグすることで、
移動することができます。 画像位置を同期 オプションを選択しておくと、スクロールバーやマウス
ホイールで画像を移動する時、両方の画像が同期して移動するようになります。
画像情報ボックスには、ピクセル単位のサイズや、解像度、色深度など、画像ファイルの詳細を表示
されます。このボックスが邪魔になるなら、 表示 → 画像情報 で隠すことができます。これと同じ情
報は、画像のタイトルバーの上にマウスを移動すると表示されます。
画像を重ねて表示している場合、画面左端のスライダーを使用して、画像の相対的な輝度(アルファ
ブレンド)を制御できます。スライダー上をクリックすると、透明度を直接設定できますし、スライ
ダをドラッグすると、確認しながら透明度を変更できます。 Ctrl+Shift+ホイール でも透明度を変
更できます。
スライダの上にあるボタンを押すと、透明度を 0% と 100% で切り替えられます。また、ボタンをダ
ブルクリックすると、もう一度ボタンをクリックするまで、1秒ごとに透明度を自動で交互に切り替
わります。複数の小さな変更を探すのに便利でしょう。
重ね合せでは分からない差分を確認したい場合もあります。プリント基板の画像イメージに2つのリ
ビジョンがあり、どの配線が変更されたかを調べたい場合などです。アルファブレンドを無効にする
71
日常の使用ガイド
と、各ピクセルの色が XOR されて差分が表示されます。変更のない部分は真っ白になり、変更点だ
け色が表示されます。
4.10.5. Office ドキュメントの差分
テキストファイル以外の文書の差分を表示するには、ファイルフォーマットを理解できるソフトウェ
アを使用する必要があります。通常は、その文書を作成するために使用したソフトウェアを使用しま
す。よく使用される Microsoft Office や OpenOffice.org には差分を表示するための機能があり、
TortoiseSVN には有名な拡張子のファイルの差分を表示する際に、これらのソフトウェアをしかるべ
き設定で呼び出すことができるスクリプトが添付されています。どのような拡張子がサポートされて
いるかを確認したり、新しく追加したりするためには、 TortoiseSVN → 設定を実行し、 外部プログ
ラム セクションの 高度な設定 をクリックしてください。
Office 2010 使用時の問題
Office 2010 の クイック実行 版をお使いの場合、文書の差分を表示しようとすると、
Windows Script Host から、 「ActiveX コンポーネントはオブジェクトを作成できませ
ん: word.Application」 というようなエラーが表示されることがあります。差分機能を
使用するには、 MSI 版の Office を使用する必要があるようです。
4.10.6. 外部差分・マージツール
私たちが提供するツールで必要なことが実現できない場合は、オープンソース・商用のツールがたく
さんあるので、その中から使用できるものを試してみてください。それぞれに特徴がありますし、こ
の一覧は完全なものではありませんが、検討に値するものをいくつか以下に紹介します。
WinMerge
WinMerge [http://winmerge.sourceforge.net/] は、ディレクトリの差分も扱える画期的なオー
プンソースの差分ツールです。
Perforce Merge
Perforce は商用の RCS ですが、差分・マージツールは無料でダウンロードできます。詳細な情
報は Perforce [http://www.perforce.com/perforce/products/merge.html] をご覧ください。
KDiff3
KDiff3 は、ディレクトリも扱えるフリーの差分ツールです。 こちら [http://kdiff3.sf.net/]
からダウンロードできます。
SourceGear DiffMerge
SourceGear Vault は商用の RCS ですが、差分・マージツールは無料でダウンロードできます。
詳細な情報は SourceGear [http://www.sourcegear.com/diffmerge/] をご覧ください。
ExamDiff
ExamDiff Standard はフリーウェアです。ファイルを扱えますが、ディレクトリは扱えません。
ExamDiff Pro はシェアウェアで、ディレクトリに対する差分や編集機能などたくさん追加され
ています。どちらもバージョン 3.2 以降なら unicode を扱えます。 PrestoSoft [http://
www.prestosoft.com/] からダウンロードできます。
Beyond Compare
ExamDiff Pro に似て、ディレクトリの差分と unicode を扱えるすばらしいシェアウェアです。
Scooter Software [http://www.scootersoftware.com/] からダウンロードしてください。
Araxis Merge
Araxis Merge はファイルやフォルダーの両方に対応した、差分やマージに便利な商用ツールで
す。マージ時に3方向の比較を行うことができ、また関数の順番の変更に対応できる同期リンク
機能を持っています。 Araxis [http://www.araxis.com/merge/index.html] からダウンロードし
てください。
72
日常の使用ガイド
TortoiseSVN でこれらのツールを使用するよう設定する方法は 「外部プログラムの設定」 をご覧く
ださい。
4.11. 新しいファイルやディレクトリの追加
図4.29 バージョン管理外のファイルでのエクスプローラーコンテキストメニュー
開発工程の中で新しいファイルやディレクトリを作成したら、ソース管理に追加する必要がありま
す。追加するファイルやディレクトリを選び、TortoiseSVN → 追加 を実行してください。
ファイルやディレクトリをソース管理に追加すると、 追加 アイコンオーバレイが表示され、他の開
発者もそのファイルやディレクトリを使用できるよう、早く作業コピーをコミットすることを促しま
す。ファイルやディレクトリの追加だけではリポジトリに影響 しません 。
複数の追加
すでにバージョン管理下にあるフォルダーでも追加コマンドを実行できます。この場
合、追加ダイアログにはバージョン管理下のフォルダー内にある、バージョン管理外の
全ファイルが表示されます。新しいファイルが複数あり、そのファイルを一度に追加す
る必要があるときに便利です。
作業コピーの外部にあるファイルを追加するには、ドラッグ&ドロップを使用して次のように操作し
ます。
1. 追加するファイルを選択する
2. 作業コピー内の新しい位置にそれらを右ドラッグする
3. マウスの右ボタンを離す
4. コンテキストメニュー → SVN この作業コピーにファイルを追加 を選択する。そのファイルが作業
コピーにコピーされ、バージョン管理に追加される。
作業コピーにあるファイルを、コミットダイアログへ左ドラッグ&ドロップするだけでも追加できま
す。
ファイルやフォルダーを間違って追加した場合は、コミットする前に TortoiseSVN → 追加を元に戻
す... を使用して、追加を取り消しすことができます。
4.12. ファイルやフォルダーのコピー・移動・名前の変更
リポジトリ内の別なプロジェクトにある既存のファイルを流用したくなり、プロジェクトをまたがっ
てコピーしたくなる場合があります。上記のようにファイルを単純にコピーして追加しても良いので
すが、そうするとそれまでの履歴が見えなくなってしまいます。また、後で元のファイルにバグ修正
73
日常の使用ガイド
が行われた場合、新しいコピーが Subversion 内の元のファイルに関連づけられていないと、修正を
自動的にマージすることができません。
作業コピーの中にあるファイルやフォルダーをコピーするには、右ドラッグメニューを使うのがもっ
とも簡単です。ファイルやフォルダーを右ドラッグで、作業コピーから他のフォルダー、または同じ
フォルダー内に向けてドラッグすると、マウスのボタンを離すと同時にコンテキストメニューが現れ
ます。
図4.30 バージョン管理下のディレクトリに対する右ドラッグメニュー
これで既存のバージョン管理下の内容を、新しい場所にコピーできます。必要なら同時に名前を変更
することもできます。
作業コピーにあるバージョン管理下のファイルや、2つの作業コピーの間でコピーや移動を行う場合
は、おなじみのカット&ペースト操作を使用することもできます。バージョン管理下のファイルをク
リップボードにコピーするには、 Windows 標準の コピー や 切り取り を実行してください。クリッ
プボードにバージョン管理下のファイルがある状態で、 TortoiseSVN → 貼り付け (注意: Windows
標準の 貼り付け ではありません)を使用すると、新しい作業コピーの場所にファイルをコピーや移
動することができます。
TortoiseSVN → ブランチ/タグの作成 を使用して、ファイルやフォルダーを作業コピーからリポジト
リの別の場所にコピーできます。詳細は、 「ブランチ/タグの作成」 をご覧ください。
コンテキストメニュー → リビジョンからブランチ/タグを作成 を使用して、ログダイアログにある
ファイルやフォルダーの旧バージョンをリポジトリの新しい場所へ、ログダイアログから直接、コ
ピーできます。詳細は、 「追加情報の取得」 をご覧ください。
また、リポジトリブラウザーを使用して、ファイルを任意の場所に配置したり、リポジトリから作業
コピーに直接コピーしたりすることができます。さらにリポジトリ内の2つの場所の間でコピーでき
ます。詳細は 「リポジトリブラウザー」 をご覧ください。
リポジトリ間のコピーはできません
TortoiseSVN では、リポジトリの 内部 でファイルやフォルダーはコピーや移動を行うと
履歴が保持されますが、リポジトリ間をまたがってファイルやフォルダーをコピーや移
動を行うと、履歴が保持されません。リポジトリが同じサーバー上にあったとしても同
様です。現状のファイルの内容をコピーし、別なリポジトリに新しい内容として追加す
ることはできます。
同じサーバーの2つの URL が、同じリポジトリを指しているか違うリポジトリを指して
いるかはっきりしない場合、リポジトリブラウザーを使用して一方の URL を開き、リポ
ジトリルートがどこにあるかを探してください。同じリポジトリブラウザーウィンドウ
に両方の場所があれば、それらは同じリポジトリにあります。
74
日常の使用ガイド
4.13. ファイルやディレクトリの無視
図4.31 バージョン管理外のファイルでのエクスプローラーコンテキストメニュー
ほとんどのプロジェクトでは、バージョン管理するべきでないファイルやフォルダーがあります。
*.obj, *.lst のようなコンパイラーが生成するファイルや、もしかしたら実行ファイルを格納する
出力フォルダーも該当するかもしれません。変更をコミットする際、 TortoiseSVN ではコミットダ
イアログにバージョン管理外のファイルが表示されます。もちろんこの表示をオフにすることもでき
ますが、そうすると、新しいソースファイルを追加し忘れるおそれがあります。
こういった問題を避けるには、生成されたファイルをプロジェクトの無視リストに追加しておくとい
いでしょう。こうすると、生成されたファイルはコミットダイアログに現れなくなりますが、本当に
バージョン管理する前のソースファイルは現れたままになります。
バージョン管理外のファイルの上で右クリックし、コンテキストメニューで TortoiseSVN → 無視リ
ストに追加 コマンドを選択すると、選択したファイルのみを追加するか、または同じ拡張子を持つ
ファイルすべてを追加するかを選択するサブメニューが表示されます。どちらのサブメニューに
も(再帰的)がついたものもあります。複数のファイルを選択した場合はサブメニューが表示されず
に、指定されたファイルやフォルダーが追加されます。
コンテキストメニューで(再帰的)バージョンを選択すると、項目は選択されたフォルダーにとどま
らず、すべてのサブフォルダーのものも同様に無視されます。但し、これにはSVNクライアントの
バージョン1.8以上が必要です。
無視リストから項目を削除したい場合は、その項目で右クリックし、TortoiseSVN → 無視リストから
削除 を選択してください。フォルダーの svn:ignore プロパティを直接変更することもできます。こ
の場合、次項で説明するファイル名展開を使用して、より汎用的なパターンで指定することができま
す。プロパティを直接指定する方法については、 「プロジェクト設定」 をご覧ください。複数の無
視パターンは改行で区切ってください。空白で区切っても動作しません。
常に無視するパターンのリスト
他にファイルを無視する方法として、 常に無視するパターンのリスト に追加する方法が
あります。大きな違いは、常に無視するパターンのリストがクライアントのプロパティ
であるという点です。これは
全ての
Subversion
プロジェクトに適用
されますが、クライアント
PC
でしか適用されません。ふつうは、できれば
svn:ignore プロパティを使用した方がいいでしょう。指定されたプロジェクトエリアで
適用され、プロジェクトをチェックアウトした人すべてに働くからです。詳細は 「一般
設定」 をご覧ください。
バージョン管理下の項目を無視する
バージョン管理下のファイルやフォルダーを無視させることはできません。これは
Subversion の仕様です。間違えてバージョン管理下に入れてしまった場合は、 「バー
75
日常の使用ガイド
ジョン管理外のファイルの無視」 にある、「バージョン管理外」にする方法をご覧くだ
さい。
4.13.1. 無視リストでのパターンマッチ
Subversion
の無視パターンは、ワイルドカードとしてメタ文字を使用してファイルを特定する、
UNIX で使用されてきたファイル名展開を使用します。特別な意味を持つのは次の文字です。
*
空文字列(文字なし)を含む任意の文字列にマッチします。
?
任意の1文字にマッチします。
[...]
角かっこで囲まれた文字のうちの1文字にマッチします。かっこ内では、 「-」 を挟んだ2つの
文字は、辞書的にその2文字間にある何れかの文字にマッチします。例えば、 [AGm-p] は A 、
G 、 m 、 n 、 o 、 p のいずれかにマッチします。
パターン比較では大文字と小文字を区別しますが、これは Windows で問題の原因になるかもしれま
せん。両方指定すれば、強制的に大文字小文字を区別しないようにできます。例えば、 *.tmp を大
文字小文字にかかわらず無視するには、 *.[Tt][Mm][Pp] のようなパターンで指定してください。
展開方法の公式な定義が必要であれば、シェルコマンド言語の
IEEE
仕様書
Pattern
Matching
Notation
[http://www.opengroup.org/onlinepubs/009695399/utilities/
xcu_chap02.html#tag_02_13] を参照してください。
常に無視するパターンのリストにはパスを含めない
パターンにパス情報を含めないでください。パターンの比較は、ファイル名やフォル
ダー名ごとに行われます。 CVS フォルダーをすべて無視したい場合、無視リストには、
単に CVS と追加してください。以前のバージョンのように、CVS */CVS と指定する必
要はありません。 prog フォルダーにある tmp フォルダーをすべて無視したいけれど
も、 doc フォルダーにあるものは無視したくない場合は、常に無視するパターンのリス
トではなく svn:ignore プロパティを使用してください。常に無視するパターンを使用し
て、これを確実に実現する方法はありません。
4.14. 削除、移動、名前変更
Subversion では、ファイルやフォルダーの名前の変更や移動が可能です。そのため TortoiseSVN の
サブメニューには、「削除」や「名前を変更」コマンドがあります。
76
日常の使用ガイド
図4.32
ニュー
バージョン管理下のファイルに対するエクスプローラーのコンテキストメ
4.14.1. ファイルやフォルダーの削除
Subversionからファイルやフォルダーを削除するには、 TortoiseSVN → 削除 を実行してください。
TortoiseSVN → 削除 を実行すると、ファイルやフォルダーは作業コピーからすぐに削除され、次の
コミットでリポジトリから削除するようにマークされます。項目の親フォルダーには「削除」 オー
バーレイアイコンを表示します。変更をコミットする前ならば、親フォルダーに対して TortoiseSVN
→ 変更の取り消し を実行すると、ファイルを取り戻すことができます。
項目をリポジトリから削除しても、バージョン管理外のファイルやフォルダーとして残しておきたい
場合は、 拡張コンテキストメニュー → 削除(作業コピーは保持) を使用してください。エクスプ
ローラーのリストウインドウ(右画面)で Shift キーを押したまま項目を右クリックすると、拡張
コンテキストメニューが表示されます。
TortoiseSVN
のコンテキストメニューを使用せずに、項目をエクスプローラーで削除した場合、コ
ミットの際に、コミットダイアログにはそのファイルが紛失と表示され、バージョン管理からも削除
するかどうか確認してきます。しかし、作業コピーに対して更新を実行すれば、 Subversion は紛失
したファイルを特定し、リポジトリから最新のファイルを取得して置き換えます。バージョン管理下
のファイルを削除する場合は、必ず TortoiseSVN → 削除 を使用するようにしてください。そうする
と Subversion は項目を本当に削除するべきかどうか推測する必要がなくなります。
削除したファイルやフォルダーを取り戻す
ファイルやフォルダーを削除してリポジトリにコミットした後では、 TortoiseSVN → 変
更の取り消し コマンドだけでは取り戻せなくなります。しかし、ファイルやフォルダー
77
日常の使用ガイド
が全く失われてしまった訳ではありません。もしファイルやフォルダーを削除したリビ
ジョンが分かるのであれば(分からない場合はログダイアログから探し出して)、リポ
ジトリブラウザーを開いてそのリビジョンに切り替えます。そして、削除されたファイ
ルやフォルダーを選択して、右クリックして コンテキストメニュー → コピー... を実
行し、コピー先として作業コピーのパスを指定してください。
4.14.2. ファイルやフォルダーの移動
ファイルやフォルダーの名前をその場で変更するならば、 コンテキストメニュー → 名前を変更...
を使用してください。新しい名前を入力すれば完了です。
作業コピー内でファイルを(例えば異なるサブフォルダーへ)移動する場合は、マウスの右ドラッグ
&ドロップ操作を使用して次のように操作してください。
1. 移動したいファイルやディレクトリを選択する
2. 作業コピー内の新しい位置にそれらを右ドラッグする
3. マウスの右ボタンを離す
4. ポップアップメニューの コンテキストメニュー → SVN バージョン管理ファイルをここに移動する
を選択する
親フォルダーでのコミット
名前の変更や移動は、削除した後に追加という形で行われるため、コミットは名前変更
または移動したファイルの親フォルダーに対して行わなければなりません。そうでない
と、名前変更または移動したファイルがコミットダイアログに表示されません。名前変
更または移動した際の削除の部分をコミットしないと、リポジトリ上にそれが残ってし
まい、共同作業者が更新した際に、古いファイルが削除されません。つまり、新旧の 両
方 のファイルがある状態になってしまいます。
フォルダー内のいずれかのファイルに変更を加える前に、 必ず フォルダーの名前の変更
をコミットしてください。そうしないと、作業コピーが混乱してしまいます。
ファイルの移動やコピーは、他にも Windows のコピー/切り取りコマンドを使って行うこともできま
す。コピーしたいファイルを選択し、右クリックしてエクスプローラーの コンテキストメニュー →
コピー を実行します。それからコピー先のフォルダーを開いて右クリックし、 TortoiseSVN → 貼り
付け を選択します。ファイルを移動する場合は、 コンテキストメニュー → コピー の代わりに コン
テキストメニュー → 切り取り を使用します。
また、リポジトリブラウザーを用いて、項目を移動することもできます。詳細は
ウザー」 をご覧ください。
「リポジトリブラ
外部参照の SVN 移動は行わない
svn:externals
で作成したフォルダーに対して、TortoiseSVN
の
移
動
や
名前を変更
コマンドを実行しては
いけませ
ん 。この操作は外部参照の項目を親リポジトリから削除してしまうことになり、おそら
く他の人たちを驚かせてしまいます。外部参照フォルダーを移動する必要があるときに
は、通常の(シェルでの)移動を行い、移動元と移動先の各親フォルダーに対して
svn:externals プロパティを設定しなおしてください。
4.14.3. ファイル名の大文字・小文字が競合した場合の対処
リポジトリ内に、大文字か小文字かのみが異なる名前のファイル(例えば TEST.TXT と test.txt)が
ある場合、 Windows のクライアントでは、親ディレクトリの更新やチェックアウトができなくなり
ます。 Subversion は文字の大小を区別していますが、Windows はそうではないからです。
78
日常の使用ガイド
これは2人が別々の作業コピーから、大文字か小文字かのみが異なる名前のファイルをコミットした
場合に発生します。また Linux のような、大文字と小文字を区別するファイルシステムを使用する
システムからコミットした場合も、発生します。
この場合は、どちらかを一方のみを残し、もう一方をリポジトリから削除(または名前変更)しなり
ません。
2つのファイルが同じ名前にならないようにする方法
大文字・小文字が競合するようなチェックインを拒否するサーバースクリプト
が、http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ にあります。
4.14.4. ファイル名の変更の修復
時に、親切な IDE がリファクタリングの一環でファイルの名前変更を行います。そしてもちろん
Subversion に通知しません。変更をコミットすると、 Subversion には古いファイル名が紛失ファイ
ル、新しいファイル名がバージョン管理外のファイルとして見えることになります。新しいファイル
を追加することもできますが、 Subversion にはそのファイルの関連が分からないので、履歴が追跡
できなくなってしまいます。
改善策は、実際には名前変更であったと Subversion に通知することで、これは コミット ダイア
ログや 変更をチェック ダイアログから行うことができます。古い名前(紛失)と新しい名前(バー
ジョン管理外)の両方を選択し、 コンテキストメニュー → 移動を修復 を使用すれば、2つのファイ
ルを名前変更の関係にすることができます。
4.14.5. バージョン管理外のファイルの削除
通常は、生成される全てのファイルが Subversion に無視されるように、無視リストを設定するで
しょう。しかし、クリーンビルドを行うために、これらの無視される項目を削除したい場合はどうし
ますか?通常は、 makefile でこれを行うよう設定しますが、 makefile がデバッグ中だったり、他
のビルドシステムに変更しているときには、これらを丸ごとクリアする手段があると便利です。
TortoiseSVN
では、そのような場合に
拡張コンテキストメニュー → バージョン管理外の
項目を削除...
という機能を提供しています。エクスプローラーのリストウインドウ(右画面)で
Shift
キーを押したままフォルダーを右クリックすると、拡張コンテキストメニューが表示されま
す。これにより、作業コピーにあるバージョン管理外のファイルの一覧ダイアログが現れます。削除
する項目を選択または選択解除してください。
ここで項目が削除される際、ごみ箱が使用されますので、ここで誤ってバージョン管理下に置くはず
のファイルを削除してしまっても元に戻せます。
4.15. 変更の取り消し
最後に更新を実行したときから、ファイルに行った変更をすべて取り消す場合は、ファイルを選択し
て右クリックしてポップアップメニューを表示させてから、
TortoiseSVN → 変更の取り消
し コマンドを選択してください。ダイアログがポップアップ表示され、変更されて取り消すことが
できるファイルの一覧が表示されます。変更を取り消すファイルを選択し、 OK をクリックしてくだ
さい。
79
日常の使用ガイド
図4.33 変更の取り消しダイアログ
設定されている変更リストもすべてクリアする場合は、ダイアログ下部にあるチェックボックスに
チェックを入れてください。
削除や名前変更の操作を元に戻す場合は、すでに削除した項目が存在しておらず右クリックできない
ので、親フォルダー上で変更の取り消し操作を行ってください。
追加した項目を元に戻す場合、コンテキストメニューに TortoiseSVN → 追加を取り消す... が現れま
す。実際には変更の取り消しなのですが、わかりやすく名前が変わります。
ダイアログの中の列は、 変更をチェック ダイアログの中の列と同じ方法でカスタマイズできます。
詳細は 「ローカルとリモートの状態」 をご覧ください。
変更の取り消しが作業コピーをクリーンアップするために使用されることがあるので、バージョン管
理外の項目を削除するためのボタンもあります。このボタンをクリックすると、バージョン管理外の
項目がすべて一覧表示されるダイアログが表示され、削除する項目を選択することができます。
コミットした変更を元に戻す
変更の取り消し はローカルの変更しか取り消しできません。すでにコミットしてしまっ
た変更は 取り消せない のです。あるリビジョンでコミットされた方法については、詳し
くは 「リビジョンログダイアログ」 をご覧ください。
変更の取り消しが遅い
変更を取り消す際、予想よりも時間がかかると感じられるかも知れません。これは、間
違えて変更の取り消しを実行したとき、変更したファイルを取り戻せるように、変更し
たファイルをごみ箱に送っているからです。しかし、ごみ箱がいっぱいになると、
80
日常の使用ガイド
Windows はファイルを置く場所を探すのに長い時間がかかります。解決法は簡単です。
ごみ箱を空にするか、 TortoiseSVN の設定で 変更を取り消す際にごみ箱を使用する の
チェックを外してください。
4.16. クリーンアップ
サーバーの問題等で、 Subversion コマンドが正常に終了しなかった場合、作業コピーが矛盾した状
態のままになってしまうことがあります。この場合、 TortoiseSVN → クリーンアップ をフォルダー
に対して実行する必要があります。作業コピーの最上層で行うのがいいでしょう。
図4.34 クリーンアップダイアログ
クリーンアップダイアログではそれ以外にも、作業コピーを クリーン 状態にするために便利なオプ
ションが用意されています。
作業コピーの状態のクリーンアップ
前述のように、このオプションは、矛盾した作業コピーを使用可能な状態にしようとします。こ
れは、作業コピーのデータベースの内部状態にのみ影響し、それ以外のデータには影響しませ
ん。これは、以前の TortoiseSVN クライアントや他の SVN クライアントでクリーンアップコマ
ンドを実行した時と同じ動作です。
シェルのオーバーレイを更新
ときどき、特にエクスプローラーの左側のツリービューでは、シェルのオーバーレイでは状態の
キャッシュが変更を認識するのに失敗して、現在の状態が表示されなくなってしまうことがあり
ます。このような場合、このコマンドで強制的に更新させることができます。
外部参照を含める
チェックすると、 svn:externals プロパティに含まれているすべてのファイルやフォルダーに
も、すべての処理が実行されます。
バージョン管理外のファイルやフォルダーを削除、無視するファイルやフォルダーを削除
作業コピーに生成されたファイルをすべて削除するのに、手っ取り早く簡単な方法です。バー
ジョン管理されていないファイルやフォルダーは、すべてごみ箱に移動されます。
【注意】TortoiseSVN → 変更の取り消し... のダイアログを使用しても同じことができます。こ
ちらはバージョン管理されていないファイルやフォルダーを一覧表示し、削除するファイルを選
択することができます。
すべての変更を再帰的に取り消す
このコマンドは、まだコミットされていないローカルの変更をすべて取り消します。
81
日常の使用ガイド
【注意】TortoiseSVN → 変更の取り消し... コマンドを使用したほうが、事前に元に戻すファイ
ルを確認して選択することができるので便利です。
4.17. プロジェクト設定
4.17.1. Subversion のプロパティ
図4.35 Subversion のプロパティページ
Subversion のプロパティは、 Windows のプロパティダイアログから確認したり設定したりできます
が、他に TortoiseSVN → プロパティ や コンテキストメニュー → プロパティ の TortoiseSVN の状
態リストでも確認できます。
自分でプロパティを定義できるほか、 Subversion で特別な意味をもつプロパティを追加することも
できます。これは svn: で始まります。 svn:externals もその一種です。外部参照の扱い方は 「外
部項目」 をご覧ください。
4.17.1.1. svn:keywords
Subversion は、ファイル自身にファイル名やリビジョン情報を埋め込む CVS 風のキーワード展開を
サポートしています。現在、キーワードは次のものをサポートしています。
$Date$
最後にコミットされた日時です。作業コピーに対して更新を実行した時点の情報に基づいていま
す。それより新しい情報をリポジトリに確認することは ありません 。
$Revision$
最後にコミットを行ったリビジョンです。
$Author$
最後にコミットを行ったユーザーです。
$HeadURL$
このファイルのリポジトリ上のフル URL です。
$Id$
前述の4つのキーワードの短く組み合わせたものです。
以上のキーワードの使用法については、 Subversion book の svn:keywords section [http://
svnbook.red-bean.com/en/1.8/svn.advanced.props.special.keywords.html] で、これらのキーワー
ドの詳しい解説と、有効にする方法や使用する方法を説明をしています。
82
日常の使用ガイド
Subversion のプロパティに関する詳細情報は、Special Properties [http://svnbook.red-bean.com/
en/1.8/svn.advanced.props.html] をご覧ください。
4.17.1.2. プロパティの追加と編集
図4.36 プロパティの追加
新しいプロパティを追加するには、まず 新規... をクリックしてください。メニューから必要なプ
ロパティ名を選択し、プロパティダイアログに必要な情報を入力します。これらのプロパティダイア
ログの詳細は 「プロパティエディター」 をご覧ください。
独自のダイアログを持たないプロパティを追加するには、 新規... メニューの高度な設定を選択し
ます。そして、既存のプロパティをコンボボックスから選択するか、カスタムプロパティの名前を入
力するかします。
一度にたくさんの項目に対してプロパティを設定する場合は、エクスプローラーでファイルやフォル
ダーを複数選択し、コンテキストメニュー → プロパティ を選択してください。
現在のフォルダー以下にある すべての ファイルやフォルダーに対してプロパティを適用する場合、
プロパティを再帰的に適用する チェックボックスをチェックしてください。
既存のプロパティを編集する場合、プロパティの一覧から編集するプロパティを選択し、
をクリックしてください。
編集...
既存のプロパティを削除したい場合、プロパティの一覧から削除するプロパティを選択し、 削除 を
クリックしてください。
svn:externals プロパティは、同じリポジトリからでも完全に異なるリポジトリからでも、他のプロ
ジェクトを取得するのに使用できます。詳細は 「外部項目」 をご覧ください。
83
日常の使用ガイド
プロパティの編集は最新リビジョンに対して
プロパティはバージョン管理されているため、以前のリビジョンのプロパティを編集す
ることはできません。ログダイアログや、リポジトリブラウザー上で最新以外のリビ
ジョンを表示している場合は、プロパティと値の一覧は見られますが、編集はできませ
ん。
4.17.1.3. プロパティのエクスポートとインポート
しばしば、何度も同じプロパティのセット(例: bugtraq:logregex)を適用していることに気付くで
しょう。あるプロジェクトから別のプロジェクトへ、プロパティを簡単にコピーする場合は、エクス
ポート・インポート機能を使用できます。
すでにプロパティが設定されているファイルやフォルダーで、TortoiseSVN → プロパティ を使用
し、エクスポートしたいプロパティを選択して エクスポート... をクリックしてください。プロパ
ティの名前と値を保存するファイル名を入力するよう促されます。
プロパティを適用したいフォルダーで、
TortoiseSVN → プロパティ
を実行し、
インポー
ト... をクリックしてください。インポート元のファイル名を尋ねてきますので、先ほど保存したエ
クスポートファイルを指定してください。プロパティはそのフォルダーに、非再帰的に追加されま
す。
プロパティをディレクトリ構造に対して再帰的に追加する場合は、前述の手順の後、プロパティダイ
アログでプロパティを選び、編集...をクリックしてください。
プロパティを再帰的に適用する
チェックボックスをチェックした後、OK をクリックしてください。
インポートファイルはバイナリで TortoiseSVN 専用です。インポートやエクスポートでのプロパ
ティの受け渡し専用で、このファイルを編集する必要はありません。
4.17.1.4. バイナリプロパティ
TortoiseSVN は、ファイルを使用することでバイナリのプロパティ値を扱うことができます。バイナ
リプロパティ値を読むには、ファイルに 値を保存... してください。バイナリ値を設定するには、
バイナリエディター等の適切なツールを使用してファイルを作成し、そのファイルから 開く... と
してください。
バイナリプロパティはあまり使用されませんが、アプリケーションによっては便利です。例えば、巨
大な画像ファイルを格納している場合や、アプリケーションが読み込むファイルが巨大な場合、プレ
ビューを素早く得るのに、プロパティにサムネイルを格納した方が良いかもしれません。
4.17.1.5. プロパティの自動設定
ファイルやフォルダーをリポジトリに追加する際に、自動的にプロパティが設定されるように
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 プロパティが設定できるようになりまし
た。プロパティの値が自動的にすべての子項目に継承されます。
84
日常の使用ガイド
どちらの方法を選択しても、 auto-props はファイルが作業コピーに追加された時にのみ適用される
ことに注意してください。 auto-props は、すでにバージョン管理下にあるファイルのプロパティを
変更することはありません。
新しいファイルに正しいプロパティが確実に適用されるようにしたい場合は、リポジトリに
precommit を設定して、必要なプロパティが設定されていないとコミットを拒否するようにするべきで
す。
プロパティのコミット
Subversion のプロパティはバージョン管理されます。プロパティを変更したり追加した
りした後は、変更をコミットする必要があります。
プロパティの競合
他のユーザーが同じプロパティを変更したりして、コミット時に競合が発生した場
合、Subversion は .prej ファイルを生成します。競合を解決した後にこのファイルを削
除してください。
4.17.2. 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 は、インポート時に使用されます。
85
日常の使用ガイド
• tsvn:logtemplatedelete は、リポジトリブラウザーで直接項目を削除する際に使用されます。
• tsvn:logtemplatemove
ます。
は、リポジトリブラウザーで名前変更や項目の移動を行う際に使用され
• tsvn:logtemplatemkdir
す。
• tsvn:logtemplatepropset
す。
は、リポジトリブラウザーでディレクトリを作成する際に使用されま
は、リポジトリブラウザーでプロパティを変更する際に使用されま
• tsvn:logtemplatelock は、ロックを取得する際に使用されます。
• 新しくファイルの追加やインポートを行った際に、拡張子を元にプロパティを付加するように、
Subversion は 「autoprops」 を設定できます。これはクライアントごとに、 Subversion 設定
ファイルに適切に autoprops が設定されているかどうかに依存します。tsvn:autoprops をフォ
ルダーに設定しておくと、インポートやファイル追加の際に、ユーザーのローカルに
autoprops
をマージするようになります。この形式は
subversion
の
autoprops
と同じで、.sh
拡張子を持つファイルに2つのプロパティを
セットしたい場合は、*.sh
=
svn:eolstyle=native;svn:executable のようになります。
ローカルの autoprops と tsvn:autoprops が競合する場合は、プロジェクトごとに指定されてい
る、プロジェクト設定を優先します。
Subversion 1.8では、tsvn:autopropsではなくsvn:auto-propsをお使いください。これは二条に似
た動作をしますが、TortoiseSVNに限らずすべてのSubversionクライアントで機能します。
• コミットダイアログでは、変更したファイルをファイルごとに状態(追加、変更、など)込みで貼
りつけるオプションがあります。tsvn:logfilelistenglish は状態を英語で挿入するか、各国語で
挿入するかを定義できます。このプロパティがセットされていなければ、デフォルトでは true と
なります。
• TortoiseSVN は OpenOffice や Mozilla で使われるスペルチェッカーモジュールを使用できます。
スペルチェッカーをインストールしている場合、このプロパティでどのスペルチェッカーを使用す
るか決定します。つまり、どの言語でこのプロジェクトのログメッセージを書くかということでも
あります。tsvn:projectlanguage では、ログメッセージ入力時にスペルチェックエンジンがどの
言語でチェックを行うかを設定します。自分の言語の値は MSDN: Language Identifiers [http://
msdn.microsoft.com/en-us/library/dd318693.aspx] で確認できます。
この値を 10 進数や頭に 0xを頭に付けた
は0x0411 や 1041 を入力してください。
16
進数で入力できます。たとえば、日本の場合は
• tsvn:logsummary プロパティは、ログメッセージのサマリとしてログダイアログに表示する、ログ
メッセージの一部を抽出するのに使用します。
tsvn:logsummary プロパティの値は、正規表現グループを含む正規表現文字列を、1 行で表したも
のでなければなりません。そのグループにマッチするものであれば、なんでもサマリとして扱いま
す。
例: \[SUMMARY\]:\s+(.*) は、ログメッセージ中の 「[SUMMARY]」 以降をすべてサマリとして扱
います。
• tsvn:logrevregex プロパティには、ログメッセージにあるリビジョンの参照にマッチする正規表
現を定義します。これはログダイアログで、リビジョンの参照をリンクにするのに使用します。こ
のリンクをクリックすると、そのリビジョンまでスクロール(リビジョンがログダイアログにある
か、ログキャッシュにある場合)したり、そのリビジョンを表示する、新しいログダイアログを開
いたりします。
正規表現は、リビジョン番号だけでなく参照全体にマッチしなければなりません。リビジョン番号
はマッチした参照文字列から、自動的に抽出します。
86
日常の使用ガイド
このプロパティが設定されていない場合、リビジョン参照をリンクにする、デフォルト正規表現を
使用します。
• クライアント側フックスクリプトを設定するためのプロパティがいくつかあります。それぞれのプ
ロパティが、特定の1種類のフックスクリプトに対応しています。
使用可能なプロパティ/フックスクリプトは、
• tsvn:startcommithook
• tsvn:precommithook
• tsvn:postcommithook
• tsvn:startupdatehook
• tsvn:preupdatehook
• tsvn:postupdatehook
です。
引数は、フックスクリプトを設定ダイアログで設定する場合と同じです。詳細は
側フックスクリプト」 をご覧ください。
「クライアント
すべてのユーザーが、自分の作業コピーを同じ場所の同じ名前でチェックアウトしているとは限ら
ないので、作業コピーの中にあるスクリプトやツールを実行するように指定する場合、代わりにリ
ポジトリの
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.37 フックスクリプトのプロパティダイアログ
87
日常の使用ガイド
• 新しいプロパティを加える際に、コンボボックスから選択するか、任意のプロパティ名を入力でき
ます。プロジェクトでカスタムプロパティを使用し、そのプロパティをコンボボックスに表示する
(プロパティ名の入力ミスを防ぐ)場合、tsvn:userfileproperties や tsvn:userdirproperties
でカスタムプロパティを作成できます。このプロパティはフォルダーに適用してください。その
フォルダー以下でファイルを作成すると、定義したプロパティ名ごとにカスタムプロパティを表示
します。
ユーザー定義のプロパティを追加・編集するために使用されるカスタムダイアログを指定すること
ができます。 TortoiseSVN はプロパティ型に合わせた4種類のダイアログを提供しています。
bool
プロパティが true と false のように2つの値しか持たない場合、プロパティを bool 型に
するとよいでしょう。
図4.38 bool型のユーザープロパティダイアログ
プロパティはこのように定義します。
propertyname=bool;labeltext(YESVALUE;NOVALUE;Checkboxtext)
labeltext はダイアログ上でチェックボックスの上に表示される文字列で、このプロパティの
使用目的を説明します。他の引数は見ての通りです。
state
プロパティが、たとえば はい、いいえ、おそらく のように、いくつもの状態の中から1つを
表す場合、プロパティを state型にするとよいでしょう。
88
日常の使用ガイド
図4.39 state型のユーザープロパティダイアログ
プロパティは次のように定義します。
propertyname=state;labeltext(DEFVAL;VAL1;TEXT1;VAL2;TEXT2;VAL3;TEXT3;...)
引数はboolプロパティと同様ですが、DEFVALはプロパティが設定されていなかったり、値が設
定されていなかったりした場合の既定値です。
値の数が3つまでの場合、ダイアログでは3つまでのラジオボタンで表示されます。それ以上
の値がある場合、状態の値をユーザーが選択することができるコンボボックスが使用されま
す。
singleline
1行の文字列で成り立つプロパティには、 singleline プロパティ型を使用してください。
図4.40 1行型のユーザープロパティダイアログ
propertyname=singleline;labeltext(regex)
89
日常の使用ガイド
regex にはユーザーが入力した文字列を検証するために使用される正規表現を指定します。も
し文字列が regex にマッチしない場合、ユーザーにはエラーが表示され、プロパティは設定さ
れません。
multiline
複数行の文字列で成り立つプロパティには、 multiline プロパティタイプを使用してくださ
い。
図4.41 複数行型のユーザープロパティダイアログ
propertyname=multiline;labeltext(regex)
regex にはユーザーが入力した文字列を検証するために使用される正規表現を指定します。正
規表現には必ず改行(\n)を含めてください。
上記のスクリーンショットは、 tsvn:userdirproperties に次の値を設定すると作成することがで
きます。
my:boolprop=bool;これは bool 型のプロパティです。チェックを付けたり外したりできます。(true;false;my boo
my:stateprop1=state;これは state 型のプロパティです。2つの状態のうち1つを選択します。(true;true;true
my:stateprop2=state;これは state 型のプロパティです。3つの状態のうち1つを選択します。(maybe;true;正解
my:stateprop3=state;このプロパティに曜日を設定します。(1;1;月曜日;2;火曜日;3;水曜日;4;木曜日;5;金曜日;6
my:singlelineprop=singleline;短いコメントを入力してください。(.*)
my:multilineprop=multiline;章全体をここにコピー&ペーストしてください。(.*)
TortoiseSVN はいくつかのバグ追跡ツールと統合できます。このとき bugtraq: で始まるプロジェク
トプロパティを使用します。詳細情報は 「バグ追跡ツール/課題追跡システムとの統合」 をご覧く
ださい。
TortoiseSVN は、webviewer: で始まるプロジェクトプロパティを使用して、いくつかの Web ベー
スのリポジトリブラウザーとも統合できます。詳細は 「Web ベースのリポジトリビューアーとの統
合」 をご覧ください。
フォルダーへのプロジェクトプロパティの設定
これらのプロパティは、作業するシステムのフォルダーに設定しなければなりません。
これらのプロパティを使用する TortoiseSVN のコマンドを使用するときは、クリックし
たフォルダーからプロパティが読み取られます。フォルダーにプロパティが設定されて
いない場合、プロパティはフォルダー階層を上位に向かって、バージョン管理外フォル
ダーか、ツリーのルート(例:
C:\)に到達するまで検索されます。すべてのユーザー
が、例えば trunk/ からチェックアウトし、サブフォルダーからチェックアウトしないこ
とが確認できるのであれば、 trunk/ にそのプロパティを設定するだけで充分です。確認
90
日常の使用ガイド
できない場合、各サブフォルダーに対し再帰的にプロパティを設定するべきです。もし
プロジェクトの異なる階層に、同じプロパティで異なる値を設定した場合は、クリック
したフォルダの階層に依存して結果が変わります。
プロジェクトプロパティ(例:tsvn:、bugtraq:、webviewer:)に限っていえば、 プロ
パティを再帰的に適用する チェックボックスを使うと、そのフォルダ以下のすべてのサ
ブフォルダーにプロパティを設定しますが、ファイルには設定しません。
TortoiseSVN で新しいサブフォルダーを作業コピーに追加する際、親フォルダーに設定されているプ
ロジェクトプロパティは、新しいサブフォルダーにも自動的に追加されます。
リポジトリブラウザーを使用する際の制限
リモートからプロパティを取得するのは時間がかかります。そのため、上記の機能のう
ちいくつかは、作業コピーで使用しているリポジトリブラウザーでは動作しません。
• リポジトリブラウザーを使用してプロパティを追加する場合、標準的なliteral>svn:
• リポジトリブラウザーを使用して、プロパティを再帰的に設定もしくは削除すること
は出来ません。
• 子階層のフォルダーがリポジトリブラウザーで追加された際に、プロジェクトのプロ
パティは自動で広まることはありません。
• tsvn:autopropsは、リポジトリブラウザーで追加されたファイル上のプロパティを設
定しません。
注意
TortoiseSVN のプロジェクトプロパティは非常に便利ですが、TortoiseSVN でしか動
作せず、またいくつかは
TortoiseSVN
の新しいバージョンでしか動作しません。プ
ロジェクトのメンバが様々な Subversion のクライアントを使用している場合や、古
い TortoiseSVN しか持てない場合、プロジェクトポリシーを強制するのに、リポジトリ
フックを使用することになるでしょう。プロジェクトプロパティは、ポリシー実装の補
助にしかならず、強制することはできません。
4.17.3. プロパティエディター
一部のプロパティは、自動処理に使用されるため、特定の値や特定の書式にする必要があります。正
しい書式を設定やすくするため、 TortoiseSVN では幾つかの特定のプロパティについて、設定可能
な値を表示したり、独立コンポーネントに分配したりするための編集ダイアログを提供しています。
91
日常の使用ガイド
4.17.3.1. 外部参照項目
図4.42 svn:externals プロパティページ
svn:externals プロパティは、同じリポジトリもしくは完全に異なるリポジトリから、他のプロジェ
クトを取得するのに使用できます。詳細は 「外部項目」 をご覧ください。
チェックアウトした外部フォルダーや、外部項目の Subversion の URL のサブフォルダーの名前を設
定する必要があります。外部フォルダーの最新リビジョンをチェックアウトしておけば、外部項目が
リポジトリの中で変更されたときに、作業コピーを更新させることができます。しかし、特定の安定
した時点のものを外部で参照できるようにするには、使用する特定のリビジョンを指定することもで
きます。また、この場合、ペグリビジョンと同じリビジョンを指定したいかもしれません。外部項目
が将来何らかの時点で改名されると、Subversionは作業コピーでこの項目を更新できなくなります。
ペグリビジョンを指定することで、最新版ではなくペグリビジョンの時の名前をSubversionに検索さ
せることができます。
最新リビジョンを探すを押すと、外部項目の各URLを確認し、右端の列に最新リビジョン表示されま
す。最新リビジョンが分かったら、外部項目の上で右クリックすると、選択された外部項目を該当す
る最新リビジョンにペグ付けできます。最新リビジョンが不明な場合、右クリックのコマンドを実行
すると、まず最新リビジョンが取得されます。
4.17.3.2. SVN キーワード
図4.43 svn:keywords プロパティページ
ファイル内に展開したいキーワードを選択してください。
92
日常の使用ガイド
4.17.3.3. 改行コード
図4.44 svn:eol-style プロパティページ
使用したい行末のスタイルを選択します。それで、 TortoiseSVN は適切なプロパティ値を使用する
ことができます。
93
日常の使用ガイド
4.17.3.4. 課題追跡システムとの統合
図4.45 tsvn:bugtraq プロパティページ
94
日常の使用ガイド
4.17.3.5. ログメッセージの大きさ
図4.46 ログメッセージサイズのプロパティページ
これら3つのプロパティは、ログメッセージの書式を制御します。最初の2つを設定すると、コミッ
トダイアログやロックダイアログで、メッセージが最小文字列の長さに達するまでOKボタンが無効に
なります。境界の位置は、それらのログメッセージの幅制限が設定されているプロジェクトのための
ガイドとして指定されたカラム幅でマーカーを示しています。値をゼロに設定すると、プロパティが
削除されます。
4.17.3.6. プロジェクトの言語
図4.47 言語プロパティページ
コミットダイアログのログメッセージのスペルチェックに使用する言語を選択してください。右のロ
グメッセージのペインでクリックして選択すると、ファイルリストのチェックボックスが有効になり
ますので、 ファイル名のリストを貼付 を選択してください。デフォルトでは Subversion の状態
が、既定の言語で表示されます。このボックスがチェックされるとステータスが常に英語のみになり
ます。英語のログメッセージを必要とするプロジェクトで有効です。
95
日常の使用ガイド
4.17.3.7. MIMEタイプ
図4.48 svn:mime-type プロパティページ
4.17.3.8. svn:needs-lock
図4.49 svn:needs-lock プロパティページ
このプロパティは、作業コピーがロックされていない場合、ファイルを読み取り専用の状態でチェッ
クアウトするかどうかを制御します。
4.17.3.9. svn:executable
図4.50 svn:executable プロパティページ
このプロパティは、Unix / Linux システム上で、チェックアウト時にファイルに実行属性を付与する
かどうかを指定します。これは、 Windows でチェックアウトする場合には影響しません。
4.17.3.10. マージログメッセージのテンプレート
リビジョンが作業コピーにマージされるたびに、TortoiseSVNはマージされた全リビジョンからログ
メッセージを作成します。コミットダイアログの最近のログメッセージボタンを押すと現れます。
以下のプロパティを指定すると、作成されるメッセージをカスタマイズできます。
96
日常の使用ガイド
図4.51 プロパティダイアログのマージログメッセージのテンプレート設定
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
このプロパティはマージされた各リビジョンがどのように見えるかを定義します。次のキーワー
ドを使用することができます。
97
日常の使用ガイド
{msg}
マージされたリビジョンのログメッセージ(入力されたまま)。
{msgoneline}
{msg}と同様だが、改行文字が空白に置き換えられ、ログメッセージ全体が1行で表現された
もの。
{author}
マージされたリビジョンの作者。
{rev}
マージされたリビジョン番号。
{bugids}
マージされたリビジョンのバグID(もしあれば)。
tsvn:mergelogtemplatemsgtitlebottom
この文字列はtsvn:mergelogtemplatetitleまたはtsvn:mergelogtemplatereversetitleで指定さ
れたタイトル文字列の位置を指定します。このプロパティをyesまたはtrueに設定すると、タイ
トル文字列は冒頭ではなく末尾に追加されます。
重要
これはマージされたリビジョンがすでにログキャッシュにある場合のみ動作します。も
しログキャッシュを無効にしていたり、マージ前にログを表示していなかったりする
と、メッセージにはマージされたリビジョンの情報が入りません。
4.18. 外部項目
時には、たくさんの異なるチェックアウトから作業コピーを構成するのは、便利なことがあります。
たとえば、リポジトリ内の異なる場所もしくは異なるリポジトリにある、異なるサブディレクトリが
必要になるかもしれません。全てのユーザーが同じレイアウトを保持するには、svn:externals プロ
パティを設定し、必要なところから指定したリソースを取得します。
4.18.1. 外部フォルダー
さて、ここで/project1の作業コピーをD:\dev\project1にチェックアウトとするとしましょう。D:
\dev\project1フォルダーを選択して右クリックし、コンテキストメニューからWindows メニューの
→ プロパティを選択します。プロパティダイアログが表示されます。次に Subversion タブに移動す
ると、プロパティを設定することができます。プロパティ... をクリックして表示されるダイアログ
で、svn:externalsが既に存在すればそれをダブルクリックし、そうでなければ新規... ボタンを押
し、メニューからsvn:externalsを選択します。新たな外部項目を追加するには、新規... ボタンを
クリックしてから、表示されるダイアログで必要な情報を入力します。
注意
正しく動作させるためには、URLを適切にエスケープする必要があります。例えば、空白
文字は%20に置き換えなければなりません。
ローカルのパスに空白や特殊文字を使用したい場合、二重引用符で囲ったり、Unix シェル形式のエ
スケープ文字
\
(バックスラッシュ)
を特殊文字の前に置いてください。もちろんこれは、パ
ス区切り文字に
/(スラッシュ)を使わなければならない、ということでもあります。この挙動は
Subversion 1.6 の新機能で、それ以前のクライアントでは動作しないことに注意してください。
リビジョン番号を指定する
上に示したように、すべての外部参照の定義において、リビジョン番号を指定すること
を強くお勧めします。そうすれば、別なバージョンの外部の情報を取り出すとき、どれ
98
日常の使用ガイド
を取り出すか正しく特定できます。常識的にはコントロールが利かないサードパー
ティーのリポジトリに変更があっても驚かされなくなるという面もありますが、リビ
ジョン番号を指定するということは、作業コピーを以前のリビジョンに戻す場合、外部
参照の定義もそのリビジョンが参照していた時のものに戻るということで、つまりリポ
ジトリの古いリビジョンに切り替えれば、外部参照がその時点で作業コピーが参照して
いたリビジョンに更新されるということです。ソフトウェアのプロジェクトにおいて、
これは古い複雑なコードベースで過去のスナップショットの構築に成功するか失敗する
かの分かれ目になります。
svn:externalsプロパティの編集ダイアログでは外部参照を選択できますが、明示的に最
新リビジョンが選択されます。
外部プロジェクトが同じリポジトリにある場合、メインプロジェクトの変更をコミットすると、変更
がコミットリストに含まれます。
外部プロジェクトが別のリポジトリにある場合、メインプロジェクトのコミット時に、外部プロジェ
クトに対する変更は通知されますが、別々にコミットする必要があります。
svn:externals の定義に絶対 URL を使用し、作業コピーを再配置しなければならない(つまり、リポ
ジトリの URL を変更する)場合、外部参照は変化せず、もう動作しないかも知れません。
このような問題を避けるため、Subversion クライアントバージョン 1.5 以降では、相対外部参照
URL をサポートします。相対 URL を指定する4つの異なる方法をサポートしています。以下の例で
は、2つのリポジトリ(http://example.com/svn/repos-1 と http://example.com/svn/repos-2)が
あると仮定します。C:\Working に http://example.com/svn/repos-1/project/trunk のチェックアウ
トがあり、トランクに svn:externals プロパティをセットしています。
親ディレクトリへの相対パス
この URL は、以下の例のように、常に ../ という文字列で始まります。
../../widgets/foo
common/foo-widget
これは、C:\Working\common\foo-widget へ http://example.com/svn/repos-1/widgets/foo を抽
出します。
URL が、ディスクに書かれている外部参照のディレクトリではなく、svn:externals プロパティ
にあるディレクトリの URL への相対パスであることに注意してください。
リポジトリのルートへの相対パス
この URL は、以下の例のように、常に ^/ という文字列で始まります。
^/widgets/foo
common/foo-widget
これは、C:\Working\common\foo-widget へ http://example.com/svn/repos-1/widgets/foo を抽
出します。
同じ SVNParentPath (複数のリポジトリを保持する共通ディレクトリ) にある他のリポジトリ
に、容易に参照できます。例は以下のようになります。
^/../repos-2/hammers/claw
common/claw-hammer
これは、C:\Working\common\claw-hammer へ http://example.com/svn/repos-2/hammers/claw を
抽出します。
スキームへの相対パス
// で始まる URL は URL のスキーム部のみをコピーします。これは同じホスト名に対して、ネッ
トワークの場所によって異なるスキームでアクセスしなければならない場合に便利です。例え
ば、インターネットにあるクライアントは http:// を使用するのに、外部クライアントは svn
+ssh:// を使用するということです。以下に例を挙げます。
99
日常の使用ガイド
//example.com/svn/repos-1/widgets/foo
common/foo-widget
これは、C:\Working をチェックアウトするのに使用した方法により、http://example.com/svn/
repos-1/widgets/foo か svn+ssh://example.com/svn/repos-1/widgets/foo を抽出します。
サーバーのホスト名への相対パス
/ で始まる URL は URL のスキーム部とホスト名部をコピーします。以下に例を挙げます。
/svn/repos-1/widgets/foo
common/foo-widget
これは
C:\Working\common\foo-widget
に
http://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 [http://svnbook.red-bean.com/en/1.8/svn.advanced.pegrevs.html] をご覧ください。
重要
上記の例のように外部の対象フォルダをサブフォルダとして指定する場合、必ず両者の
全ての
フォルダがバージョン管理されていることを確認してください。上記の例の場
合、common フォルダがバージョン管理されている必要があります。
ほとんどの場合、両者がバージョン管理されていなくても動作しますが、一部の操作は
期待通りに動作しないことがあります。また、エクスプローラのステータスオーバーレ
イアイコンが正しいステータスを表示しなくなります。
TortoiseSVN がプロパティをどのように扱うかについての詳細な情報は、 「プロジェクト設定」 を
参照してください。
共通サブプロジェクトへの他のアクセス方法については、 「共通のサブプロジェクトを含める」 を
参照してください。
4.18.2. 外部ファイル
Subversion 1.6 では、フォルダーと同じ文法を用いて、単一ファイルの外部項目を作業コピーに追
加できます。しかし、いくつか制限事項があります。
• 外部参照ファイルへのパスは、svn:externalsプロパティで設定したフォルダーの直下の子でなけ
ればなりません。
• 外部ファイルの URL が、外部ファイルを挿入する URL と同じリポジトリになければなりません。
つまり、リポジトリ間の外部ファイルはサポートしていません。
外部ファイルの挙動は、あらゆる点でその他のバージョン管理下のファイルと同等ですが、通常のコ
マンドでは、移動・削除ができません。代わりに svn:externals プロパティを変更しなければなり
ません。
4.18.3. ドラッグ&ドロップで外部参照を作成
ファイルやフォルダーの作業コピーを作成済みで、他の作業コピーの外部参照として設定したい場合
は、Windowsエクスプローラーからドラッグ&ドロップするだけで追加することができます。
ファイルやフォルダーを、ある作業コピーから外部参照を設定したい場所に右ドラッグしてくださ
い。マウスボタンを離して現れるコンテキストメニューで、SVN ここに外部参照として追加というメ
ニュー項目をクリックすると、svn:externals
4.19. ブランチ/タグの作成
100
日常の使用ガイド
バージョン管理システムの特徴のひとつに、開発の別のラインに変更を隔離できることがあります。
このラインは ブランチ と呼ばれています。ブランチは、開発のメインラインにコンパイルエラーや
バグで混乱させることなく、新機能のを試験するために使用されます。新機能が充分に安定したら、
開発ブランチをメインブランチ(トランク)に マージ して書き戻します。
バージョン管理システムのもうひとつの特徴として、リリースしたリビジョンなど特定のリビジョン
をマークする機能があります。このため、いつでも確実にビルドや環境を再作成できます。このプロ
セスは タグ付け と呼ばれています。
Subversion には、ブランチやタグを作成するための特別なコマンドはありませんが、代わりに 「簡
易コピー」 と呼ばれるものを使用します。簡易コピーは、 Unix のハードリンクと似ています。つま
り、リポジトリの完全なコピーを作成する代わりに、指定したツリーやリビジョンを指す内部リンク
を作成します。そのため、ブランチやタグの作成は、非常に高速で、リポジトリに追加スペースをほ
とんど使用しません。
4.19.1. ブランチ/タグの作成
プロジェクトを標準的なディレクトリ構成でインポートしているなら、ブランチ/タグバージョンを
作成するのはとても簡単です。
図4.52 ブランチ/タグの作成ダイアログ
101
日常の使用ガイド
ブランチやタグにコピーしたい作業コピーのフォルダーを選択してから、 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というフォルダーが自動的に作成され、Tagsとtagsの両方のフォルダーがで
きてしまう結果になります。
そして、コピーの作成元を選択してください、ここでは3つの選択肢があります。
リポジトリ内の最新リビジョン
新しいブランチは、リポジトリの最新である最新リビジョンから直接コピーされます。データを
作業コピーから転送する必要がないため、ブランチは非常に高速に作成されます。
リポジトリ内の特定リビジョン
新しいブランチは直接リポジトリからコピーされますが、古いリビジョンを指定できます。先週
プロジェクトをリリースした際に、タグを作り忘れたときなどに便利です。リビジョン番号を思
い出せなければ、右のボタンを押すとリビジョンログが表示されるので、そこからリビジョン番
号を選択してください。こちらも作業コピーから転送されるデータはなく、ブランチは非常に高
速に作成されます。
作業コピー
新しいブランチは、ローカルの作業コピーと同一になります。作業コピーを以前のリビジョンへ
更新したり、ローカルで変更を行ったりすると、これがコピーに取り込まれます。当然、そのよ
うな複雑なタグを作成する場合、リポジトリにまだ反映されていないデータは、作業コピーから
リポジトリに転送されます。
作業コピーを新しく作成したブランチに自動的に切り替えたい場合、作業コピーを新しいブランチ/
タグへ切り替える
チェックボックスをチェックしてください。しかしそうするには、まず作業コ
ピーに変更が含まれていないことを確認してください。もし含まれていると、切り替えたときにブラ
ンチの作業コピーに変更点がマージされていまいます。
102
日常の使用ガイド
もし作業コピーが svn:externals プロパティで別のプロジェクトを含んでいると、外部項目がブラ
ンチ/タグダイアログの下部に一覧表示されます。各外部項目とそのターゲットパス、ソースURL、リ
ビジョンが表示されます。
新しいタグを常に一貫した状態にするためには、すべての外部項目の持つリビジョンが固定されてい
ることを確認する必要があります。外部項目を確認せず、また外部項目のリビジョンが将来変更され
る可能性のある HEAD を指定していた場合、新しいタグをチェックアウトする際に外部項目はその時
点での HEAD リビジョンが取得されてしまい、コンパイルに失敗する可能性があります。そのため、
タグを作成するときには、常に外部項目に明示的なリビジョン番号を設定することをお勧めします。
外部項目はブランチ/タグのソースに応じて自動的に現在の HEAD か作業コピーの BASE に固定され
ます。
コピー元
ピン留めされたリビジョン
リポジトリ内の最新リビジョン
外部リポジトリの最新リビジョン
リポジトリのリビジョンを指定
外部リポジトリの最新リビジョン
作業コピー
外部の作業コピーのBASEリビジョン
表4.1 ピン留めされたリビジョン
外部参照中の外部参照
プロジェクトが外部参照自信を含む外部参照を含む場合、タグ付けされません。直接の
子の外部参照だけがタグ付けされます。
リポジトリに新しいコピーをコミットするには OK を押してください。ログメッセージを書くのを忘
れないでください。コピーは リポジトリの内部 で行われることに注意してください。
作業コピーを新しく作成したブランチに切り替えなければ、ブランチやタグを作成しても、作業コ
ピーには影響を 与えない ことに注意してください。作業コピーからブランチを作成したとしても、
その変更はトランクではなく新しいブランチにコミットされます。そのため、作業コピーのマーク
は、変更されたままになっているかもしれません。
4.19.2. ブランチやタグを作成するその他の方法
作業コピーがなくてもブランチやタグを作成する方法があります。リポジトリブラウザーを開き、
フォルダーを新しい場所にドラッグします。 Ctrl キーを押しながらドラッグするとコピーになり、
そうでなければフォルダーはコピーされずに移動します。
マウスの右ボタンでフォルダーをドラッグする方法もあります。マウスのボタンを離すと、コンテキ
ストメニューでフォルダーを移動するかコピーするかを選択することができます。もちろん、ブラン
チやタグを作成するときは、フォルダーを移動ではなくコピーしてください。
ログダイアログから行う方法もあります。例えばトランクの、特定のリビジョン(HEAD リビジョン
でも古いリビジョンでも良い)のログダイアログを表示し、右クリックして リビジョンからブラン
チ/タグを作成 を選択します。
4.19.3. チェックアウトするか切り替えるか...
……それが(それほどではありませんが)問題です。チェックアウトは、リポジトリの指定したブラ
ンチから作業コピーへすべてダウンロードしますが、 TortoiseSVN → 切り替え... は変更のあった
データのみを作業コピーに転送します。ネットワーク負荷をとるか、忍耐力をとるかですね。:-)
新しく作成したブランチやタグで作業するには、いくつかの方法があります。次のように行ってくだ
さい。
103
日常の使用ガイド
• TortoiseSVN → チェックアウト は空のフォルダーに新鮮なチェックアウトを行います。ローカル
ディスクのどこにもチェックアウトでき、お好みにあわせ、いくつでもリポジトリから作業コピー
を作成できます。
• 現在の作業コピーを、リポジトリに新しく作成したコピーに切り替えます。再びプロジェクトの最
上位フォルダーを選択し、コンテキストメニューから TortoiseSVN → 切り替え... を使用してくだ
さい。
続くダイアログで、たった今作成したブランチの URL を入力してください。 HEAD リビジョン ラ
ジオボタンを選択し、 OK をクリックしてください。作業コピーが新しいブランチ/タグに切り替
えられます。
切り替えは、ローカルの変更を決して破棄しないので、ちょうど更新のように動作します。まだコ
ミットしていない作業コピーへの変更は、切り替えるとマージされます。こうして欲しくなけれ
ば、切り替える前にコミットをしておくか、作業コピーの変更を取り消し、既にコミットしてある
リビジョン(通常は HEAD リビジョン)まで戻さなければなりません。
• トランクやブランチで作業したくても、まっさらなチェックアウトに時間を費やしたくない場合、
トランクをチェックアウトした作業コピーを Windows エクスプローラーでコピーし、 TortoiseSVN
→ 切り替え... を使用して、新しいブランチに切り替える方法もあります。
図4.53 切り替えダイアログ
Subversion
す。
自身はタグとブランチを区別しませんが、通常は以下のように少し異なる使い方をしま
• タグは通常、プロジェクトの特定の場面の静的なスナップショットとして作られます。通常は開発
には使用しません(それはブランチの役割であり、最初に
/trunk
/branches
/tags
と
いうリポジトリ構造を推奨する理由です)。タグのリビジョンで作業することは
よくありませ
ん が、ローカルファイルが書き込み保護されていないので、間違った操作を止める方法はありま
せん。但し、リポジトリ内の /tags/ 以下のパスにコミットしようとした場合、 TortoiseSVN は警
告するようになっています。
• 既にタグ付けしたリリースに、変更を加える必要が発生することもあります。これを扱う正しい方
法は、タグから新しいブランチを作成し、そのブランチをコミットすることです。変更をこのブラ
ンチに行い、その後、新しいブランチから Version_1.0.1 といったように、新しいタグを作成し
てください。
104
日常の使用ガイド
• ブランチから作成した作業コピーを変更し、コミットする場合、すべての変更は新しいブランチに
行われ、トランクには 行われません 。変更点のみ格納されます。残りは簡易コピーのままになり
ます。
4.20. マージ
ブランチを開発の独立したラインでメンテナンスするのに使用する所では、何らかの段階で、ブラン
チに対して行われた変更をトランクにマージしたくなるでしょう。逆もまた然りです。
Subversion 内でどのようにブランチやマージを作成しているるかを、はじめる前に理解しておくの
は(かなり複雑になってしまいますが)重要です。Subversion book の Branching and Merging
[http://svnbook.red-bean.com/en/1.8/svn.branchmerge.html] の章を読むのを強くお勧めします。
ここには詳しい説明とたくさんの使用例があります。
注意する次のポイントは、マージは 常に 作業コピーで行われるということです。ブランチの中に、
変更をマージしたい場合、ブランチの作業コピーをチェックアウトして、その作業コピーで
TortoiseSVN → マージ... を行い、マージウィザードを起動しなければなりません。
一般的には、マージは変更されていない作業コピーに対して行うのが良いでしょう。作業コピーに何
か他に変更が加えられているなら、まずコミットしてください。思うようにマージできないのなら、
変更の取り消しを行う必要があるかもしれません。 変更の取り消し コマンドは、マージする前に
行った変更を すべて 取り消してしまいます。
マージを行うには、以下で説明するような、少し異なる方法で行う、3つのよくあるケースがありま
す。マージウィザードの最初のページで、どちらで行うか確認しますので、選択してください。
リビジョンの範囲をマージ
これは、1つ以上のリビジョンがブランチ(もしくはトランク)に存在し、それらの変更を別の
ブランチに反映したいような場合に使用します。
Subversion に以下のことを行うように指示を出しています。「ブランチAのリビジョン 1 [FROM]
から、ブランチAのリビジョン 7 [TO] までの必要な変更点を計算し、(トランクやブランチB
の)作業コピーに変更点を適用する」
リビジョン範囲を空欄のままにした場合、 Subversion はマージ追跡機能を使用して、マージに
使用する正しいリビジョン範囲を計算します。この機能は再統合や自動マージとして知られてい
ます。
異なる2つのツリーをマージ
これは、再統合する方法のもっと一般的なケースで、Subversion に対して、「トランクの HEAD
リビジョン(開始点)からブランチの HEAD リビジョン(終了点)までの必要な変更点を計算
し、(トランクの)作業コピーに変更点を適用しなさい」 と指示します。結果的に、トランク
がまさしくブランチと同様になっているということになります。
サーバー・リポジトリが、マージ追跡をサポートしていない場合、これはブランチをトランクに
マージする唯一の方法になります。別のケースとしては、ベンダブランチを使用していて、新し
くベンダから落としたコードの変更を、トランクにマージする必要がある場合もありえます。詳
細は、Subversion Book の vendor branches [http://svnbook.red-bean.com/en/1.8/
svn.advanced.vendorbr.html] をご覧ください。
4.20.1. リビジョン範囲のマージ
105
日常の使用ガイド
図4.54 マージウィザード - リビジョン範囲の選択
マージ元のURL 欄には、作業コピーに取り込みたい変更があるブランチやタグのフォルダーの URL を
すべて入力してください。... をクリックしてリポジトリを閲覧し望みのブランチを探すこともでき
ます。以前このブランチからマージしたことがあるのであれば、以前使用されたURLの履歴のドロッ
プダウンリストから選択するだけです。
名前が変更されたり削除されたりしたブランチからマージしようとする場合は、そのブランチが存在
したリビジョンに戻らなければなりません。このような場合、マージする範囲のリビジョン(下記)
をペグリビジョンで指定しないと、HEADリビジョンのパスが見つけられずにマージが失敗します。
マージするリビジョンの範囲 フィールドに、マージするリビジョンのリストを入力してください。
ここではリビジョン1つ、コンマで区切ったリビジョンの指定、ダッシュでつないだリビジョンの範
囲と以上の組み合わせが使用できます。
マージ時にペグリビジョンを特定する必要がある場合、ペグリビジョンをリビジョン番号の最後に、
5-7,10@3 のように追加してください。この例では、リビジョン5、6、7、10とペグリビジョンの3が
マージされます。
重要
TortoiseSVN とコマンドラインクライアントを比較すると、リビジョン範囲を指定する
方法に重要な違いがあります。これを思い浮かべる簡単な方法は、フェンスの柱と、
フェンスの板について考えることです。
コマンドラインクライアントでは、前 と 後 で指定した 2 本の 「フェンスの柱」 のリ
ビジョンを使用して、マージする変更を指定します。
106
日常の使用ガイド
TortoiseSVN では、「フェンスの板」 を使用して、マージする変更セットを指定しま
す。マージするためのリビジョンを指定するログダイアログを使用する場合、チェンジ
セットとしてどこに各リビジョンが現れるか、明白になるためです。
かたまりとしてリビジョンをマージしていると、subversion book にある方法では、今回
100-200 をマージし、次回に 200-300 をマージすることになります。TortoiseSVN で
は、今回 100-200 をマージし、次回に 201-300 をマージします。
この違いは、メーリングリストでたくさんの論争を巻き起こしてきました。私たちは、
コマンドラインクライアントと違うことを認めます。しかし、大多数の GUI ユーザーに
とって、私たちが実装した方法の方が理解しやすいと信じています。
必要なリビジョンの範囲を選択する最も簡単な方法は、ログを表示 をクリックして、最近の変更点
一覧をログメッセージと共に表示することです。単一リビジョンからマージしたい場合は、そのリビ
ジョンを選択するだけです。複数のリビジョンからマージしたい場合は、その範囲を(通常
Shift
キーを押しながら)選択してください。OK をクリックすると、マージするリビジョン番号のリスト
に入力されます。
すでにコミットしてしまった変更を取り消して、作業コピーを元に戻すようにマージする場合、戻し
たいリビジョンを選択して、逆マージチェックボックスを必ずチェックしてください。
このブランチからの変更をすでにマージしてある場合、うまくいけば変更をコミットしたときのメッ
セージに、マージした最後のリビジョンを記録してあるかもしれません。この場合、作業コピーのロ
グメッセージを追跡するのに ログを表示 を使用できます。リビジョンをチェンジセットとして考え
ているのを思い出し、前回のマージの終点を今回のマージの始点をしてください。たとえば、前回リ
ビジョン 37 から 39 までマージした場合、今回のマージの始点をリビジョン 40 にしてください。
Subversion のマージ追跡機能を使用する場合、どのリビジョンをすでにマージしたかを覚えておく
必要はありません。Subversion が記録しています。リビジョン範囲をからのままにしておくと、ま
だマージしていないリビジョンすべてが対象になります。詳細は 「マージ追跡」 をご覧ください。
マージ追跡機能を使用する場合は、ログダイアログには前回マージされたリビジョンや、共通の祖先
以前の時点(つまりブランチがコピーされる以前)のリビジョンが、グレーで表示されます。マージ
不可能なリビジョンを隠すチェックボックスを使用すると、こうしたリビジョンを隠し、マージする
ことができるリビジョンだけを表示することができます。
他の人が変更をコミットしている場合、 HEAD リビジョンを指定する場合は注意してください。最後
の更新のあとに誰かがコミットを行っており、想定しているリビジョンを指していないかもしれませ
ん。
リビジョンの範囲は空欄だったり、すべてのリビジョンのラジオボタンがチェックされていたりした
場合は、 Subversion はまだマージされていないすべてのリビジョンをマージします。これは再統合
または自動マージとして知られています。
再統合マージを適用するには、いくつか条件があります。まず、サーバーがマージ追跡をサポートし
ていなければなりません。作業コピーの深さに制限があってはなりません(部分的なチェックアウト
であってはならない)。ローカルの変更や切り替えられた項目、 HEAD 以外のリビジョンに更新され
た項目があってはなりません。ブランチでの開発中にトランクに行われた変更は、ブランチをまた
がってマージされます(もしくはマージ済みとマークされます)。マージ対象になるリビジョンの範
囲は自動的に計算されます。
次へ >をクリックすると、 「マージオプション」 に進みます。
4.20.2. 2つの異なるツリーをマージする
107
日常の使用ガイド
図4.55 マージウィザード - ツリーのマージ
機能ブランチをトランクにマージするために、この方法を使用する場合、トランクの作業コピーで
マージウィザードを起動する必要があります。
開始点: 欄には、トランク のフォルダーの URL を入力してください。間違っているように思われる
かもしれませんが、トランクが、ブランチの変更を追加する起点となることを思い出してくださ
い。... をクリックして、リポジトリを参照することもできます。
終了点: 欄に、機能ブランチのフォルダーの URL を入力してください。
開始点リビジョン 欄と 終了点リビジョン 欄の両方に、同期をとりたい2つのツリーの最新リビジョ
ン番号を入力してください。他の誰もコミットしていないという確認が取れているのなら、どちらも
HEAD リビジョンを指定できます。同期をとってから、誰かがコミットする機会があったのなら、最
近のコミットの内容を失わないように、リビジョン番号を指定してください。
リビジョンを選択するには ログを表示 も使用できます。
4.20.3. マージオプション
ウィザードのこのページでは、マージの実行前に、さらにオプションの指定ができます。ほとんどの
場合デフォルトの設定を使用するだけでしょう。
マージする深さを指定することもできます。これは、作業コピー内をどの程度深くたどってマージを
行うかということです。深さについては 「チェックアウトの深さ」 で説明しています。デフォルト
の深さは 作業コピー で、既存の深さをそのまま使用します。
大抵の場合、マージ時にはファイルの履歴を考慮した方が好ましいので、共通の祖先からの変更が
マージされます。時には、リポジトリに入っていなくても、関連している可能性が高いファイル同士
ををマージする必要もあるでしょう。例えば、第三者が作成したライブラリのバージョン1と2が、
108
日常の使用ガイド
別々なディレクトリに入れられていた場合です。理屈からみれば両者は関連しています
が、Subversionにはそれが別個にインポートされたファイルの集合としか認識できず、両者が関連し
ているとは分かりません。この2つのツリーの差分をマージしようとすると、全体を追加して全体を
削除する操作になってしまいます。Subversionが履歴の差分を無視して現状の差分のみを使用するよ
うにするには、
履歴を無視する
をチェックしてください。本件についての詳細な説明は、
Subversion book の Noticing or Ignoring Ancestry [http://svnbook.red-bean.com/en/1.8/
svn.branchmerge.advanced.html#svn.branchmerge.advanced.ancestry] を参照してください。
改行コードや空白の変更に対する扱い方を指定できます。このオプションについては 「改行コード
と空白のオプション」 で説明しています。デフォルトの振る舞いは、空白や改行コードの差異も実
際の変更としてマージします。
強制的にマージする をチェックすると、ローカルで変更されたファイルやバージョン管理されてい
ないファイルに対して削除を行うようなツリーの競合を無視します。こうしたファイルが削除される
と復元する方法がないので、このオプションはデフォルトではチェックされていません。
マージ追跡を使用していて、実際にはマージせずにマージしたという印をつけたい場合、 マージを
実施せず、マージしたことにする チェックボックスをチェックしてください。そうする理由として
2つ考えられます。1つは、マージそのものがマージアルゴリズムに対して複雑すぎ、手でコードを
変更した後、マージアルゴリズムが行うようにマージにより変更したという印をつけたい場合です。
もう1つは、特定のリビジョンがマージされるのを防ぐ場合です。すでにマージしたという印がつい
ていれば、マージ追跡を関知するクライアントでは、マージを防げます。
すべての設定が終われば、あとは
マージ
ボタンを押すだけです。このとき
マージ
のテスト
を押すと、作業コピーを
変更せずに
マージ結果をプレビューすることがで
きます。これでマージを実行した時に変更が入るファイルの一覧や、競合が発生する
可能性のあ
る
ファイルを見ることができます。マージ処理はマージを追跡することではるかに複雑になるた
め、あらかじめマージが競合なしで完了するかを確実に判断する方法がないので、実際には問題なく
マージできるようなファイルであっても、マージのテストでは競合すると表示される場合もありま
す。
マージ進行ダイアログには、マージの各状態を、リビジョン範囲とともに表示します。ここには想定
していたよりも一つ多くリビジョンを表示するかもしれません。例えば、リビジョン 123 をマー
ジするように指示した場合、進行ダイアログには、「リビジョン
122
〜
123
をマー
ジ」 と表示されます。マージは差分と密接に関連していることを思い出してください。マージ処理
は、リポジトリの二点間における差分の一覧を生成し、その差分を作業コピーに適用する形で動作し
ます。進行ダイアログは、単純にこの差分の始点と終点を表示しているに過ぎません。
4.20.4. マージ結果のレビュー
さて、マージが完了しました。マージ結果を見て期待通りになっているかを確認するのがいいでしょ
う。通常マージはかなり複雑です。ブランチがトランクからかなりずれてしまえば、しばしば競合を
引き起こします。
ヒント
リビジョンが作業コピーにマージされるたびに、TortoiseSVNはマージされた全リビジョ
ンからログメッセージを作成します。コミットダイアログの最近のログメッセージボタ
ンを押すと現れます。
作成されるメッセージをカスタマイズするには、作業コピーに該当するプロジェクトプ
ロパティを設定してください。詳しくは、「マージログメッセージのテンプレート」を
参照してください。
バージョン 1.5 未満の Subversion のクライアント・サーバーは、マージ情報を格納しておらず、
マージしたリビジョンは、手作業で追跡しなければなりません。ある変更点のテストを行い、そのリ
ビジョンをコミットする際に、マージで取り込んだリビジョン番号を 常に コミットログに記録する
べきです。あとで別のマージを適用しようとしたときに、再度変更を取り込むことがないよう、すで
109
日常の使用ガイド
にマージした内容を知る必要があります。これについては
Subversion
Book
の
Best
Practices
for
Merging
[http://svnbook.red-bean.com/en/1.4/
svn.branchmerge.copychanges.html#svn.branchmerge.copychanges.bestprac] をご覧ください。
サーバーとすべてのクライアントが Subversion 1.5 以上の場合、マージ追跡機構がマージしたリビ
ジョンを記録し、再度マージすることがないようにします。これにより、単純にリビジョン範囲全体
を指定し、実際に新しいリビジョンのみがマージされるといったことができるようになります。
ブランチ管理は重要です。このブランチをトランクに合わせて最新の状態を維持したければ、たびた
びマージを確実に行わないと、ブランチとトランクがだんだん離れていってしまうのです。もちろん
上で説明したように、変更点を再度マージしてしまうことは避けなければなりません。
ヒント
昨日ブランチからトランクへマージが完了すると、トランクには新機能のすべてのコー
ドが含まれ、ブランチは必要なくなります。必要ならリポジトリから削除してかまいま
せん。
重要
Subversion
ファイルをフォルダーとマージはできませんし、逆もまた同様です。ただ
フォルダーとフォルダー、ファイルとファイルで行えます。ファイルをクリックして
マージダイアログを開いたら、ファイルのパスを与えなければなりません。フォルダー
を選択してダイアログを開いたらマージするフォルダーの URL を指定しなければなりま
せん。
4.20.5. マージ追跡
Subversion 1.5 は、マージ追跡機構を導入しました。あるツリーから別のツリーへ変更をマージす
ると、マージしたリビジョン番号を格納し、この情報を様々な異なる用途に使用します。
• 再度同じリビジョンをマージする危険(再マージ問題)を避けられます。一度マージ済みとマーク
されたリビジョンは、将来のマージで、マージ範囲にそのリビジョンが含まれていてもスキップし
ます。
• トランクにブランチをマージする際、トランクのログの一部として、ブランチのコミットもログダ
イアログに表示し、変更のトレーサビリティが向上します。
• マージダイアログの中からログダイアログを表示すると、すでにマージしたリビジョンを灰色で表
示します。
• ファイルに対して注釈履歴を表示する際、マージした人ではなく、マージされたリビジョンのオリ
ジナル作者を表示するよう選択できます。
• マージされたリビジョンのリストにある、実際にはマージされていないリビジョンに対して、未
マージ としてマークできます。
マージを行う際、クライアントはマージ追跡情報を、svn:mergeinfo に格納します。マージをコミッ
トする際には、サーバーはその情報をデータベースに格納し、マージやログ、注釈情報などのリクエ
ストに適切に応答します。システムが適切に動作するには、サーバーとリポジトリ、全クライアント
を確実にアップグレードしなければなりません。以前のクライアントでは、svn:mergeinfo
プロパ
ティを格納しませんし、以前のサーバーでは、新しいクライアントが要求した情報を提供できませ
ん。
マージ追跡についてそれ以外のことについては、
Subversion
のMerge
Tracking
[http://
svn.apache.org/repos/asf/subversion/trunk/notes/merge-tracking/index.html] の説明をご覧く
ださい。
110
日常の使用ガイド
4.20.6. マージ中に発生した競合の扱い
マージが常にすんなり完了するとは限りません。時には競合を起こしますし、複数の範囲をマージし
ている場合は、一般的に、次の範囲のマージを行う前に、競合を解決しておきたいでしょ
う。TortoiseSVN は、競合の解決 ダイアログを表示して、この処理の手助けをしてくれます。
図4.56 競合の解決ダイアログ
リポジトリにコミット済みの他の変更と、ローカルでの他の変更が競合した場合は、円滑にマージさ
れている可能性が高いです。マージ可能なすべての変更がマージされます。マージ競合コールバック
ダイアログは、競合を解決する3つの異なる方法を提供します。
1. テキストファイルをマージする場合、最初の2つのボタンを押すと競合しない行はそのままマー
ジされ、競合する行については指定したバージョンが常に優先されます。ローカルを優先するを
選択すると、すべての競合点でローカルの変更が選択されます。つまり、マージ元の変更より
も、ローカルの内容が優先されます。同様に、リポジトリを優先するを実行すると、すべての競
合点でリポジトリの変更が選択されます。つまり、自分の作業コピーにあったものより、マージ
元の変更が優先されます。簡単なようですが、競合が予想以上に多くの行を上書きしてしまい、
予期しない結果をもたらすことがあります。
マージ対象にバイナリファイルが含まれていると、そのファイルの競合を行単位にマージするこ
とはできません。バイナリファイルの競合は、どちらのファイル全体を使うかを選択する必要が
あります。ローカルを優先するを実行すると、自分の作業コピー内にあるローカル版が採用さ
れ、リポジトリを優先するを実行すると、リポジトリ内のマージ元のファイルが採用されます。
2. 通常は、自分で競合を確認して解決すると思います。この場合、マージツールが起動する際に競
合の編集を選択してください。結果に問題がなければ、解決済にするをクリックしてください。
3. 最後の選択は、解決を先延ばしにして、マージを継続することです。現在競合したファイルと、
残りのマージするファイル双方に対して、その選択ができます。しかし、そのファイルにまだ変
更があると、マージは完了しないでしょう。
この対話的コールバックが必要なければ、マージ進行ダイアログに 非対話的なマージ チェックボッ
クスがあります。マージ時にこれをセットし、マージ結果に競合がある場合、ファイルに競合マーク
が付き、マージを継続します。マージがすべて完了したあとで、競合を解決しなければなりません。
セットしない場合は、競合マークがファイルに付く前に、マージ中に競合解決を行う機会がありま
す。ファイルが複数のマージ(複数のリビジョンがそのファイルに変更を与える)を受ける場合、影
響を受ける行によって、続くマージが成功するという利点があります。しかしもちろん、マージ実行
中には、コーヒーを入れにそこを離れるわけにはいきません。
111
日常の使用ガイド
4.20.7. 機能ブランチの保守
別々のブランチで新しい機能を開発する際、機能が完成した時の再統合指針を立てると良いと思いま
す。別の作業がトランク (trunk) で同時に進んでいる場合、時間がたつにつれて差異は深刻にな
り、マージを行うのは悪夢のようになります。
機能が比較的単純で、開発に時間がかからなそうであれば、機能が完成するまで全体を分けたブラン
チを維持し、ブランチの変更をトランクにマージするという、単純なアプローチを採用できます。
マージウィザードでは、これを単純に リビジョンの範囲をマージ で、リビジョン範囲にブランチの
リビジョン期間を指定して行います。
その機能に時間がかかり、トランクに対して変更を説明する必要がある場合、ブランチの同期を維持
する必要があります。これは、トランクの変更点 プラス 新機能をブランチが持つように、単純にト
ランクへの変更を定期的にブランチへマージするということです。同期プロセスでは リビジョンの
範囲をマージ を用います。機能が完成したら、ブランチを再統合する や 異なる2つのツリーをマー
ジ のどちらかを用いて、trunk にマージできます。
トランクのすべての変更を機能ブランチに反映する他の(手早い)方法として、拡張コンテキストメ
ニュー(Shiftキーを押したままファイルを右クリック)にあるTortoiseSVN → すべてマージ...を使
用できます。
図4.57 すべてマージダイアログ
このダイアログは非常に簡単です。しなければならないことは、 「マージオプション」 にあるよう
に、マージオプションを設定することだけです。TortoiseSVN は、マージ追跡を使用して残りを自動
的に処理します。
4.21. ロック
Subversion は一般的に、 「コピー・変更・マージモデル」 で先に説明したとおり、「コピー・変
更・マージ」 法を使用して、ロックしない方が最もよく動作します。しかし、ロックするポリシー
の形で実現する必要があるかもしれません。
• 例えば画像ファイルといった、「マージできない」ファイルを使っている場合。同じファイルを 2
人の人が変更した場合、マージできません。そのためどちらかの人の変更が失われます。
• 自分の会社が過去に、ロックするリビジョン管理システムを常に使用していて、管理するのに
「ロックが一番だ」 と決まっている場合。
112
日常の使用ガイド
第一に Subversion サーバーをバージョン 1.2 以降に確実にアップグレードする必要があります。そ
れ以前のバージョンでは、ロックを全くサポートしていません。file:// アクセスを使用するなら、
もちろんクライアントの方を更新する必要があります。
「ロック」の3つの意味
この節をはじめ、この文書の多くの場所では、「ロック」や「ロックする」という語
は、コミットを壊さないためにユーザー間で排他処理を行うことを指しています。しか
し、Subversionではさらに2つの「ロック」という用語が使われているため、この文書
でも注意しなければならない場合があります。
2番目の意味は作業コピーのロックで、Subverionでは、もともと同じ作業コピーを扱う
複数のSubversionクライアント間での破壊を防ぐためのものです。通常この意味での
ロック状態になるのは、更新やコミットなどのコマンドがエラーで中断された場合で
す。この意味でのロックは、作業コピーに対してクリーンアップコマンドを実行すると
解消できます。詳しくは「クリーンアップ」をご覧ください。
3番目の意味は、ファイルやフォルダーが他のプロセスから使用中のためにロックされ
ている状態で、例えばWordで文書を開いているとき、ファイルはロックされTortoiseSVN
からアクセスできません。
何か対処しなければならない問題が発生したとき、3種類のロックがあることを忘れが
ちです。この文書では「ロック」という用語を、文脈から明らかであるか、特に明記さ
れていない限り、最初の意味で使用しています。
4.21.1. Subversion でロックがどのように働くか
デフォルトではロックを行わず、コミットアクセスできる人が、いつでもどのファイルでも変更をコ
ミットすることができます。他の人は自分の作業コピーを定期的に更新し、ローカルに行った変更を
リポジトリにマージするでしょう。
ファイルの ロックを取得 すると、自分しかそのファイルをコミットできなくなります。他のユー
ザーがコミットしようとしても、自分がロックを解除するまでできません。ロックしたファイルは、
どんな方法でもリポジトリ内の変更ができません。そのため、ロック所有者を除いて削除も名前の変
更もできなくなります。
重要
ロックはユーザー単位ではなく、特定のユーザーと作業コピーに結び付けられていま
す。ある作業コピーでロックを獲得すると、同じユーザーでも別な作業コピーをコミッ
トすることはできなくなります。
例えば、 John というユーザーがオフィスのPCで作業コピーを持っていたとします。そこ
に彼は、ある画像ファイルの作業を開始し、そのファイルのロックを獲得したとしま
す。オフィスを離れるとき、そのファイルをまだ終えていないので、彼はそのロックを
解除しませんでした。家に帰って、 John はこちらでも作業コピーを持ち、プロジェクト
の作業をもう少しすることにしました。しかし、オフィスの作業コピーでロックを獲得
していたため、同じ画像ファイルを変更したりコミットしたりすることはできません。
しかし他のユーザーは、自分がロックしたことを知る必要はありません。定期的にロック状態を
チェックしなければ、まず他のユーザーはコミットが失敗して気が付くでしょう。ほとんどこのケー
スでしょうがあまり便利ではありません。ロックの管理を簡単にするには、新しい Subversion のプ
ロパティで svn:needs-lock があります。ファイルにこのプロパティが(値は何でも)セットされて
いると、ファイルをチェックアウトや更新すると常にローカルのコピーは読み取り専用になります。
ファイルにロックを取得しない限りこのままです。この動作は、まずロックを取得するまでファイル
の編集ができないということを警告しています。バージョン管理下で読み取り専用のファイルは、編
集前にロックする必要があることを示すように、TortoiseSVN
では特別なオーバーレイアイコンで
マークされます。
113
日常の使用ガイド
ロックは所有者と共に作業コピーの場所に記録されます。自宅や職場など複数の作業コピーがある場
合、ロックは作業コピーの中のひとつだけに記録されます。
仕事仲間の一人がロックを取得し、解除しないまま休暇を取ってしまったら、どうしたらいいでしょ
う? Subversion は強制的にロックする方法を用意しています。他の誰かが持っているロックを解除
することを、ロックの 強制解除 と呼び、他の誰かが既にロックしているファイルを強制的にロック
することを、ロックの 横取り と呼びます。当然、仕事仲間と友人でいたいなら、軽々しく行うこと
ではありません。
ロックはリポジトリに記録されます。また、ロックトークンはローカルの作業コピーに作成されま
す。他の誰かがロックを強制解除したりして、食い違いが発生すると、ローカルのロックは無効にな
ります。リポジトリは常に決定的なリファレンスです。
4.21.2. ロックの取得
ロックを取得したい作業コピーのファイルを選択し、TortoiseSVN → ロックの取得... コマンドを選
択してください。
図4.58 ロックダイアログ
ダイアログが現れ、コメントを入力できるようになります。そのため他の人はなぜロックしたのかが
判ります。コメントはオプションで、現在のところ Svnserve ベースリポジトリでしか使用できませ
ん。他の誰かからロックを横取りする場合(のみ)、ロックを奪う にチェックをつけてください。
その後 OK をクリックしてください。
プロジェクトのプロパティの TSVN:logtemplatelock を設定すると、ロック時のメッセージを記入
するユーザーにメッセージのひな形を提供することができます。プロパティを設定する方法は、
「プロジェクト設定」 を参照してください。
フォルダーを選択して、TortoiseSVN → ロックを取得... を使用すると、ロックするよう選択したす
べてのサブフォルダー内の すべてのファイルがある状態でロックダイアログが開きます。本当に全
階層をロックするのなら、これでできます。ですが、本当に仕事仲間をプロジェクトから閉め出して
しまうのなら、彼らの中の評価は非常に悪くなるでしょう。慎重に使用してください...
114
日常の使用ガイド
4.21.3. ロックの解除
もう必要でなくなったロックの解除を忘れないように、ロックされたファイルはコミットダイアログ
に表示され、デフォルトで選択されています。コミットを続けると、変更されていないとしても、選
択したままのファイルのロックが解除されます。特定のファイルでロックを解除したくない場合、そ
のファイルのチェックを外せます(変更されていない場合)。変更したファイルのロックを保持した
ければ、変更をコミットする前に ロックを保持 チェックボックスを有効にしておく必要がありま
す。
手動でロックを解除するには、ロックを解除したいファイルを作業コピーで選択し、TortoiseSVN →
ロックを解除コマンドを選択してください。追加で入力することはありません。そこで TortoiseSVN
はリポジトリに接続し、ロックを解除します。フォルダーに対してこのコマンドを使用し、再帰的に
全ロックの解除を行えます。
4.21.4. ロック状態のチェック
図4.59 変更をチェックダイアログ
誰がロックをかけているかを確認するのに、TortoiseSVN → 変更をチェック... を使用できます。
ローカルに保持したロックの印はすぐに現れます。他の人が保持しているロックをチェックするには
(そして誰がロックを強制解除したり横取りしたりしたかを見るには)、リポジトリをチェック を
クリックしてください。
ここのコンテキストメニューから、他の人が保持しているロックを、強制解除したり横取りしたりす
るように、ロックを取得したり解除したりもできます。
ロックの強制解除・横取りは避ける
ほかの誰かのロックを、断りもなく強制解除・横取りすると、潜在的に作業を失う原因
になります。マージ不可能なファイルの種類で作業していて、他の誰かのロックを横取
りした場合、自分がロックを解除すると、自由に上書きできます。Subversion はデータ
を失いませんが、ロックがもたらすはずだった、チーム作業の保護を失ってしまいま
す。
4.21.5. ロックしていないファイルを読み込み専用にするには
上記のように、ロックを使用するのに最も効果的な方法は、svn:needs-lock プロパティを設定する
ことです。プロパティの設定については 「プロジェクト設定」 をご覧ください。このプロパティを
115
日常の使用ガイド
持つファイルは、ロックを取得していないと、チェックアウトや更新をしたときに常に読み込み専用
になります。
TortoiseSVN は、忘れないように特別なオーバーレイアイコンで表示します。
ファイルやフォルダーをリポジトリに追加した際に、自動的にプロパティを設定するように
Subversion を設定できます。詳細情報は 「プロパティの自動設定」 をご覧ください。
4.21.6. ロックのフックスクリプト
Subversion 1.2 以降で作成したリポジトリでは、リポジトリの hooks ディレクトリに4つフックテ
ンプレートが追加されています。それぞれロック取得の前後、ロック解除の前後に呼ばれます。
ファイルがロックされたときに、そのファイルを表すのに email を送信するような、post-lock や
post-unlock フックスクリプトをサーバーにインストールするのは名案です。そういったスクリプト
が適切な場所にあると、誰かがファイルをロック・ロック解放するとユーザーすべてに通知されま
す。リポジトリフォルダーの hooks/post-lock.tmpl に、サンプルフックスクリプトがあります。
フックを使用すると、ロックの強制解除・横取りを禁止したり、特定の管理者のみに制限したりする
こともできます。また、ロックの強制解除・横取りが発生した時に、ロックの所有者にメールを送る
ようにすることもできます。
詳細は 「サーバー側フックスクリプト」 を参照してください。
4.22. パッチの作成及び適用
(TortoiseSVN のような)オープンソースプロジェクトでは、リポジトリは誰もが読み込みアクセス
できるようになっていて、誰もがプロジェクトに貢献できるようになっています。では、どのように
貢献をコントロールするのでしょう? 誰もが変更をコミットできるようにすると、プロジェクトは永
久に不安定になり、ややもすると永久に壊れた状態になるかもしれません。こういった状況では、変
更を開発チーム(書き込む権限がある)への パッチ ファイルの送信といった形で管理しています。
開発チームはまずパッチをレビューし、リポジトリに送信したり、拒否して作者に返却したりしま
す。
パッチファイルは単なるUnified差分ファイルで、作業コピーと元になったリビジョンとの差分を表
しています。
4.22.1. パッチファイルの作成
まず、変更したものの
make
とテスト
をする必要があります。それから、親フォルダーで
TortoiseSVN → コミット... する代わりに、TortoiseSVN → パッチを作成... を選択してください、
116
日常の使用ガイド
図4.60 パッチ作成ダイアログ
ここで完全なコミットをするときのように、パッチに含めるファイルを選択できます。これで選択し
たファイルに対する、リポジトリを最後に更新したときからの変更点をまとめたファイルを得ること
ができます。
ダイアログの中の列は、 変更をチェック ダイアログの中の列と同じ方法でカスタマイズできます。
詳細は 「ローカルとリモートの状態」 をご覧ください。
オプションボタンはをクリックすると、パッチの作り方を指定できます。たとえば、出力するパッチ
ファイルで行末文字や空白文字の変更を含めないようにすることができます。
違うファイルの変更点を含めた分割したパッチも生成できます。もちろん、パッチファイルを生成し
てから、同じ ファイルに変更を加えて別のパッチを作成すると、2つ目のパッチには 両方 の変更点
が含まれることになります。
それでは、任意のファイル名でファイルを保存してください。パッチファイルは任意の拡張子でかま
いませんが、.patch や .diff を拡張子に使用するのが通例となっています。これでパッチファイル
を送信する準備ができました。
ヒント
パッチファイルを他の人にメールで送る場合は、.txtの拡張子で保存しないでくださ
い。生のテキストファイルは、メールソフトが空白や改行文字を自動的に変換したり切
り詰めたりしてしまうことがあります。そうなると、パッチを円滑に適用できません。
そのため、パッチファイルを保存するときは.patchまたは.diffの拡張子を使用してくだ
さい。
また、ファイルに保存せずクリップボードに保存することもできます。電子メールに貼り付けて誰か
にレビューしてもらう際に、そうしたくなると思います。また、1つのマシンに2つ作業コピーがあ
り、片方からもう片方へ変更を持っていくときに、クリップボードにパッチがあるとべんりです。
117
日常の使用ガイド
必要であれば、コミットや変更をチェックダイアログでパッチファイルを作成することができます。
ファイルを選択して、コンテキストメニューからパッチを作成するメニュー項目を選択してくださ
い。オプションダイアログを表示する場合は、 Shift を押しながら右クリックしてください。
4.22.2. パッチファイルの適用
作業コピーにパッチファイルを適用します。パッチを作成したフォルダーと同じ階層で行う必要があ
ります。よくわからなければ、パッチファイルの最初の行を見てください。たとえば、最初のファイ
ルが doc/source/english/chapter1.xml に対するもので、パッチファイルの最初の行が Index:
english/chapter1.xml なら、doc/source/ フォルダーでパッチを適用する必要があります。適切な
作業コピーを使用していても、適用するフォルダー階層が間違っていると、TortoiseSVN は適切な階
層を使用するよう注意を促します。
パッチファイルを作業コピーに適用するために、少なくともリポジトリの読み込み権限が必要です。
これは、他の開発者がリビジョンを変更していないかどうか、マージプログラムが参照するからで
す。
フォルダーのコンテキストメニューから、TortoiseSVN → パッチを適用... をクリックしてくださ
い。すると「ファイルを開く」 ダイアログボックスが現れ、適用するパッチファイルを選択できま
す。デフォルトでは .patch ファイルか .diff ファイルのみが表示されていますが、「すべてのファ
イル」を選択できます。あらかじめパッチをクリップボードに保存していれば、「ファイルを開く」
ダイアログの クリップボードから開く... を使用できます。
その他には、パッチファイルが .patch や .diff といった拡張子を持つ場合、直接そのファイルを右
クリックして、TortoiseSVN → パッチを適用... を選んでください。この場合、作業コピーの場所を
入力することになります。
この2つは同じことを違う方法で行っているだけです。1つ目は作業コピーを選択してからパッチ
ファイルを閲覧し、2つ目はパッチファイルを選択してから作業コピーを閲覧します。
一度パッチファイルや作業コピーの場所を選択すると、パッチファイルの変更を作業コピーにマージ
するように TortoiseMerge が起動します。小さなウィンドウに変更のあったファイルを表示するの
で、その中の項目をダブルクリックして変更の確認や、マージしたファイルの保存を行ってくださ
い。
他の開発者のパッチが適用されたので、今度は誰もがリポジトリから変更点にアクセスできるよう、
コミットする必要があります。
4.23. 誰がその行を変更したか?
時々どの行が変更されたかだけでなく、ファイル内で、誰がどの行を変更したのか正確に知りたいこ
とがあります。その場合は、TortoiseSVN → 注釈履歴... コマンドでできます。また annotate コマ
ンドも役に立つので、時々参照されています。
このコマンドは、ファイルの行ごとに作業者と変更されたリビジョンを表示します。
118
日常の使用ガイド
4.23.1. ファイルの注釈履歴
図4.61 注釈履歴ダイアログ
ずっと前のリビジョンに興味がなければ、注釈を見始めるリビジョンを設定できます。全リビジョン
の注釈履歴を見るのなら、これを 1 に設定してください。
デフォルトでは、 TortoiseBlame を使用して注釈を見ます。これは、異なるリビジョンを色分けし
て、見やすくしてくれます。注釈を印刷したり編集したりしたければ、 注釈履歴を見るためにテキ
ストビューアーを用いる を選択してください。
改行コードや空白の変更に対する扱い方を指定できます。このオプションについては 「改行コード
と空白のオプション」 で説明しています。デフォルトの振る舞いは、空白や改行コードの差異も実
際の変更としますが、インデントの変更を無視してオリジナルの作者を見たい場合は、ここで適切な
オプションを選択できます。
このオプションには、サーバーから取得するためかなり時間がかかる可能性はありますが、必要に応
じてマージ情報を含めることができます。行が別のソースからマージされると、注釈履歴情報は、変
更が元のソースだけでなく、それがこのファイルにマージされたリビジョンで作成されたリビジョン
を表示します。
OKを押すと、TortoiseSVNは注釈ファイルを作成するため、データの取得を始めます。注釈処理が終
了すると、結果を一時ファイルに書き出し、結果を表示します。
119
日常の使用ガイド
図4.62 TortoiseBlame
TortoiseSVN に含まれる TortoiseBlame は、注釈ファイルを読みやすくしてくれます。マウスをある
行の注釈情報列の上に持っていくと、同じリビジョンの行の背景を濃くして表示します。同じ更新者
が行ったけれどもリビジョンが異なる行は、薄く色を付けて表示します。ディスプレイが 256 色
モードに設定されていると、きれいに色分けされない可能性があります。
行の上で 左クリック すると、同じリビジョンのすべての行に色分けされます。同じ作業者の、他の
リビジョンの行は薄い色で色分けされます。この色分けは貼り付いて、色分けを失わないようにマウ
スを移動できます。リビジョンをもう一度クリックすると、色分けが解除されます。
注釈情報の列の上ならどこでもマウスを持ってくると、ヒントボックスの中にリビジョンのコメント
(ログメッセージ)を表示します。そのリビジョンのログメッセージをコピーするには、注釈情報の
列を右クリックしてでてくるコンテキストメニューを使用してください。
注釈レポートを 編集 → 検索... を使用して検索できます。これでリビジョン番号、作業者、ファイ
ルの内容を検索できます。ログメッセージは検索できません。ログダイアログを使用して検索してく
ださい。
また、編集 → 指定した行へ移動... で指定した行番号にジャンプします。
注釈情報列の上にマウスを持っていくと、リビジョンを比較したり、履歴を検査するのに便利なコン
テキストメニューが使用可能になります。この時マウスのある行のリビジョン番号を参照します。コ
ンテキストメニュー → 前リビジョンの注釈履歴 では、同じファイルに対する前のリビジョンを上限
とした注釈履歴レポートを生成します。今見ている行に対する最終更新の、直前のファイルの状態を
表す注釈履歴レポートを得られます。コンテキストメニュー → 変更を表示 は、参照しているリビ
ジョンの変更点を表示する diff ビューアーを起動します。コンテキストメニュー → ログを表示は、
参照しているリビジョンから始まる、リビジョンログダイアログを表示します。
もっと視覚的に変更点の新旧を見たい場合、表示 → 各行の変更時期を色分けする を選択してくださ
い。これにより、新しい行は赤、古い行は青のグラデーションで表します。デフォルトの色分けは、
薄い色になっていますが、TortoiseBlame の設定で変更できます。
注釈履歴の起動時にマージ追跡を使用していると、マージされた行が若干異なって表示されます。別
のパスからのマージによって変更された行には、マージが行われたリビジョンではなく、マージ元の
120
日常の使用ガイド
ファイルが最後に変更された時のリビジョンと作者が表示されます。この場合、リビジョンと作者が
斜体で表示されます。注釈情報列の上にマウスを移動させると、マージされたリビジョンがツール
チップ上に表示されます。マージした行をこのような形で表示させたくない場合、注釈履歴を起動す
るときに マージ情報を含める チェックボックスをオフにしてください。
表示 → マージ元のパス を選択すると、マージに関係するパスが表示されます。その行がマージ以外
の操作によって最後に変更されたときのパスが表示されます。
注釈履歴情報の中のリビジョンは、その行の内容が変更された最後のリビジョンを表します。ファイ
ルを他からコピーして作成したとき、それから行を変更するまで、その行の注釈履歴のリビジョンは
元のソースファイルの最後の変更であり、コピーが作成されたリビジョンではありません。これは
マージ情報と共に表示されるパスにも適用されます。パスは、最後の変更がその行に作成されたリポ
ジトリの場所を示しています。
TortoiseBlame の設定は、TortoiseSVN → 設定... の TortoiseBlame タブでアクセスできます。
「TortoiseBlame の設定」 をご覧ください。
4.23.2. 注釈履歴の差分
注釈履歴レポートの限界の1つは、ファイルを特定のリビジョンにおける、各行を変更した最後の人
しか見ることができません。時には、誰が変更したかと同様に、誰が作成したかを知りたいことがあ
ります。 TortoiseBlame の行を右クリックしてコンテキストメニューを表示しすると、そのリビ
ジョンでの変更を見ることができます。しかし、変更点と注釈履歴を 同時に 確認したい場合は、差
分と注釈履歴のレポートを組み合わせなければなりません。
リビジョンログダイアログには、以下のようないくつかのオプションがあります。
リビジョンの注釈履歴
上の欄でリビジョンを2つ選択し、コンテキストメニュー → リビジョンの注釈履歴を選択してく
ださい。これにより、この2つのリビジョンの注釈履歴を取得し、差分ビューアーで注釈を比較
できます。
変更の注釈履歴
上の欄でリビジョン1つ選択し、下の欄でファイルを選択したうえで、コンテキストメニュー →
変更の注釈履歴 を実行してください。選択したリビジョンのとその前のリビジョンの注釈デー
タを取得し、差分ビューアーで注釈を比較できます。
作業ベースとの比較と注釈
画面上部のリビジョンをひとつ選択し、コンテキストメニュー → 作業ベースと比較/注釈履歴を
選択すると、そのファイルのログを表示します。選択したリビジョンと作業ベースにあるファイ
ルの注釈データを取得し、差分ビューアーで注釈を比較します。
4.24. リポジトリブラウザー
時に、作業コピーではなくリポジトリを直接操作する必要もあるでしょう。そのようなときのために
リポジトリブラウザー があります。エクスプローラーのようにかつアイコンオーバレイが表示され
るので、作業コピーと同じように操作できます。そのため、リポジトリブラウザーでリポジトリの構
造や状態を確認できます。
121
日常の使用ガイド
図4.63 リポジトリブラウザー
リポジトリブラウザーでは、コピー、移動、名前の変更、... といったコマンドをリポジトリ上で直
接実行できます。
リポジトリブラウザーは、 Windows エクスプローラーによく似ており、コンピューター上のファイ
ルと同じように、特定リビジョンのリポジトリの内容を表示できます。左画面にディレクトリツリー
が表示され、右画面に選択したディレクトリの内容が表示されます。リポジトリブラウザーウインド
ウの上部では、参照したいリポジトリの URL やリビジョンを入力できます。
svn:externalsプロパティに含まれるフォルダーは、リポジトリブラウザーからも見ることができま
す。この場合、フォルダーには、リポジトリ構造の一部ではなくリンクであることを示す、小さい矢
印が表示されます。
Windows エクスプローラーのように、右画面の列見出しをクリックすると、並び順をお好みに変更で
きます。また、エクスプローラーのように両方の画面でコンテキストメニューを使用できます。
ファイルに対するコンテキストメニューでは、以下のことができます。
• 選択したファイルを、ファイル形式に応じた既定のビューアーか選択したプログラムで開きます。
• 選択されたファイルを編集します。これは一時的な作業コピーをチェックアウトし、そのファイル
形式に応じたデフォルトのエディターを起動します。エディターが閉じられると、変更が保存され
ていた場合はコミットダイアログが表示されるので、コメントを入力して変更をコミットしてくだ
さい。
• そのファイルのリビジョンログの表示や、そのファイルの出自がわかるような全リビジョンのグラ
フを表示します。
122
日常の使用ガイド
• 誰が、どの行をいつ変更したのかを参照する、ファイルの注釈履歴を表示します。
• 単一のファイルをチェックアウトします。これはそのファイルだけが含まれる「部分的な」作業コ
ピーを作成します。
• ファイルの削除や名前の変更をします。
• 自分のハードディスクに、そのファイルのバージョン管理外のコピーを保存します。
• アドレスバーに表示されているURLをクリップボードにコピーします。
• リポジトリの別の場所や、同じリポジトリに属する作業コピーにファイルをコピーします。
• ファイルのプロパティを表示・編集します。
• リポジトリブラウザーを起動して、直接この場所を表示するためショートカットを作成します。
フォルダーに対するコンテキストメニューでは、以下のことができます。
• そのフォルダーのリビジョンログの表示や、そのフォルダーの出自がわかるような全リビジョンの
グラフを表示します。
• 自分のハードディスクに、フォルダーのバージョン管理外のコピーをエクスポートします。
• 自分のハードディスクに、フォルダーの作業コピーをチェックアウトします。
• リポジトリに新しいフォルダーを作成します。
• バージョン管理されていないファイルやフォルダーを、直接リポジトリに追加します。実質的には
Subversion のインポート操作と同じです。
• フォルダーの削除や名前の変更
• リポジトリの別の部分か、同じリポジトリに属する
作業コピーのどちらかに、フォルダーのコピーを作成します。これは、チェックアウトされた作
業コピーを作成せずにブランチ/タグを作成するために使用することもできます。
• フォルダーのプロパティの表示・編集
• 比較用にフォルダーをマークします。マークしたフォルダーは太字で表示されます。
• あらかじめマークを付けたフォルダーに対して、Unified差分ファイルとして、またはデフォルト
差分ツールを用いて差分を取ったファイルのリストとして差分を表示できます。これは2つのタグ
や、トランクとブランチにどんな変更があるのか比較するのに便利です。
右画面で2つの項目を選択すると、差分をUnified差分ファイルや、またはデフォルトの差分ツール
を用いて差分を取ったファイルのリストとして表示できます。
右画面で複数のフォルダーを選択すると、一度にすべてを共通の親フォルダーにチェックアウトでき
ます。
選択した2つのタグが同じルート(通常
/trunk/)からコピーされたものなら、コンテキストメ
ニュー → ログ表示... を使用して2つのタグ間のリビジョンのリストを表示できます。
外部項目(svn:externalを使用して参照される)もリポジトリブラウザーで表示され、フォルダーの
中を開いて見ることもできます。外部項目の上には赤い矢印が表示されます。
いつものように、表示を再度読み込むのに F5 を使用できます。これにより現在表示しているもの
を、すべて再度読み込みます。先読みをしたり、まだ開いていないノードの情報を読み込むに
は、Ctrl+F5 を使用してください。この後では、どのノードを展開しても、情報を取得するのにかか
るネットワーク遅延は発生しません。
123
日常の使用ガイド
リポジトリブラウザーをドラッグ&ドロップでも操作できます。エクスプローラーからリポジトリブ
ラウザーへフォルダーをドラッグすると、リポジトリにインポートを行います。複数の項目をドラッ
グすると、それぞれコミットを行うことに注意してください。
リポジトリ内で項目を移動する場合、単に新しい場所へ 左ドラッグ してください。移動ではなくコ
ピーを作成したい場合は、Ctrl-左ドラッグ してください。コピーの際は、エクスプローラーと同様
にカーソルが 「+」 マークになります。
ファイルやフォルダーを他の場所へコピー・移動したい場合や、それと同時に新しい名前を付けたい
場合には、左ドラッグをするのではなく 右ドラッグ や Ctrl-右ドラッグ をしてください。この場
合、ファイルやフォルダーの名前を入力する名前を変更ダイアログが表示されます。
以上の方法でリポジトリに変更を加える際には、必ずログメッセージ入力ダイアログが表示されま
す。間違えてドラッグした場合は、その操作をそこでキャンセルできます。
時々パスを開こうとしたときに、項目の詳細の箇所にエラーメッセージが表示されることがありま
す。これはおそらく、無効な URL を指定したか、アクセス権限がないか、その他サーバーの問題だ
と思われます。このメッセージをコピーして email に含める場合、右クリックして コンテキストメ
ニュー → クリップボードにエラーメッセージをコピーする を使用するか、単純に Ctrl+C としてく
ださい。
ブックマークしたURLやリポジトリは、左のツリービューの中で現在のリポジトリにおけるフォル
ダーの下に表示されます。項目を追加するには、ファイルやフォルダーを右クリックしてコンテキス
トメニュー → ブックマークに追加を選択してください。ブックマークをクリックすると、そのリポ
ジトリやファイル、フォルダーを見ることができます。
4.25. リビジョングラフ
図4.64 リビジョングラフ
時にはブランチやタグがトランクのどこから分かれたのか知る必要があります。この種の情報を見る
のに理想的なのは、グラフやツリー構造で見ることです。この必要があるときには、TortoiseSVN →
リビジョングラフ... としてください。
124
日常の使用ガイド
このコマンドは、リビジョンの履歴を解析し、どのポイントからコピーを取得したか、いつブラン
チ・タグを削除したかを表示するツリーを作成しようとします。
重要
TortoiseSVN がグラフを生成するには、リポジトリのルートからログメッセージをすべ
て取得しなければなりません。言うまでもなく、数千リビジョンのリポジトリがある場
合(サーバーの速度やネットワークの帯域などににもよりますが)数分かかるでしょ
う。現在 500,000 リビジョンを越えている Apache プロジェクトのようなところで試せ
ば、しばらく待っていなければなりません。
朗報としては、ログキャッシュを使用している場合は、一度この遅さを我慢すればいい
ということです。これ以後は、ローカルにログデータを保持しています。ログキャッ
シュは TortoiseSVN 設定で有効にできます。
4.25.1. リビジョングラフのノード
リビジョングラフの各ノードは、現在表示されているツリーで何かしらの変更が行われたリビジョン
を表しています。形や色でノードの違いを区別できます。形は固定ですが、色は TortoiseSVN → 設
定 を使用して設定できます。
追加・コピーした項目
追加されたり、他のファイルやフォルダーによって作られたりした項目は、長方形で囲んで表示
されます。デフォルトの色は緑色です。タグやトランクでは特別なものとして扱われ、異なる色
で表示されます。これは TortoiseSVN → 設定 で設定することができます。
削除した項目
必要のなくなったブランチなど削除された項目は、八角形(角を落とした長方形)で表示されま
す。デフォルト色は赤です。
名前を変更した項目
名前変更した項目も八角形でも表示されます。デフォルトの色は青です。
ブランチの最新リビジョン
グラフには通常、分岐したリビジョンしか表示されませんが、それぞれのブランチの最新版であ
る HEAD リビジョンも確認できると便利です。 HEADリビジョンを表示する を選択すると、各ブ
ランチの HEAD リビジョンのノードが楕円で表示されます。ここで言う HEAD リビジョンとは、
そのパスでコミットした最終リビジョンであり、リポジトリ全体の HEAD リビジョンではないこ
とにご注意ください。
作業コピーのリビジョン
作業コピーのリビジョングラフを表示した場合、 作業コピーのリビジョンを表示する を選択す
ると、作業コピーの元になった BASE リビジョンが太い輪郭で表示されます。
変更した作業コピー
作業コピーのリビジョングラフを表示させた場合、 作業コピーの変更を表示 を選択すると、変
更された作業コピーを表す追加ノードを表示できます。これは輪郭が太い楕円のノードで、デ
フォルトでは赤で表します。
通常の項目
他の項目は、通常の長方形で表します。
デフォルトのいグラフには、項目の追加・コピー・削除のみが表示されています。プロジェクト内の
すべてのリビジョンが表示されると、重要な時に非常に巨大なグラフになってしまいます。本当に、
変更が行われた すべての リビジョンが必要ならば、 表示 メニューやツールバーに、表示させるた
めのオプションがあります。
デフォルトの表示(グループ化無効)では、ノードは縦方向に、厳密にリビジョン順で配置されるた
め、実行された順番が視覚的に分かります。同じ列にある2つのノードの順番は明白です。2つのの
125
日常の使用ガイド
ノードが隣接する列にある場合、ノードが重なる心配がないため、補正は少なくて済みます。そして
そのため、少々明白でない場合があります。そのような最適化が、複雑なグラフを妥当な大きさにし
ておくために必要です。なお、この順序づけでは、 古い方 にあるノードの 端 (つまり、グラフを
古いノードを下に表示する場合は、ノードの下端)を、参照として使用します。ノードの形がすべて
同じ大きさであるわけではないため、参照する端は重要です。
4.25.2. 表示の変更
リビジョングラフは非常に複雑になることがありますので、任意の表示にできるようにいくつもの機
能があります。ツールバーの表示メニューから使用できます。
ブランチでグループ化
デフォルト(グループ化無効)では、すべての行がリビジョンの時系列になるよう厳密に配置さ
れます。その結果、歴史が長くコミット頻度が低いブランチは、変更量の割に長く列を占有する
ことになるため、グラフが非常に広くなってしまいます。
このモードでは変更がブランチ別に分類され、全体のリビジョン順にはなりません。ブランチ上
の連続した
リビジョンは、(通常は)連続した線で表示されます。サブブランチについても同様に配置さ
れますが、グラフを小さく収めるために、古いブランチと同じ列に後から発生したのブランチが
配置されるようになっています。そのため、異なるリビジョンが同じ行に表示されることがあり
ます。
古いものを先頭に表示
通常、グラフは古いものを下に配置し、上の方に伸びていきます。このオプションにより、上か
ら下に伸びていくようになります。
ツリーを上端でそろえる
グラフが、いくつかのツリーにばらばらにされた場合、ブランチでグループ化 オプションを使
用しているかによって、そのツリーは自然なリビジョン順か、ウィンドウの下部に整列して現れ
るでしょう。すべてのツリーを上部から下部へのばすには、このオプションを使用してくださ
い。
線の交差を避ける
このオプションは通常は有効になっており、グラフの線が交差して混乱しないように表示されま
す。しかし、これは列が論理的でない場所に配置される可能性もあります。たとえば、列よりも
大きい斜線があると、グラフの描画に必要な領域が多くなってしまいます。これが問題になる場
合には、表示メニューからオプションを無効にすることができます。
パス名を差分で表示
長いパス名はたくさんのスペースを取ってしまい、ノードボックスを非常に大きくしてしまいま
す。パスの変更された部分のみを表示し、共通部分を点に置換する場合、このオプションを使用
してください。つまり、/trunk/doc/html から ブランチ /branches/1.2.x/doc/html を作成した
場合、/branches/1.2.x/.. という短縮形で表示します。最後のふたつの階層(doc と html)が
変更されていないからです。
すべてのリビジョンを表示
予想通り、(グラフ化したツリーの) 変更されたすべてのリビジョンを表示します。履歴が長い
と、非常に大きなグラフになります。
最新リビジョン(HEAD)を表示
これにより、各ブランチの最新リビジョンが、グラフ上に常に現れることを保証します。
正確なコピー元
ブランチ・タグが作成された際、デフォルトの挙動では、変更があった最後のノードからのブラ
ンチとして表示します。ブランチは特定のリビジョンからよりも、その時の HEAD リビジョンか
ら作成されますので、厳密に言うと正しくありません。そこで、コピーを作成したリビジョンを
使用して、より正しい(しかしあまり有用でない)表示を行えます。このリビジョンが、ソース
ブランチの HEAD リビジョンよりも古い可能性があることに注意してください。
126
日常の使用ガイド
タグを折りたたむ
プロジェクトに多くのタグがある場合、それぞれのタグがグラフ上で独立したノードとして表示
されるため、開発にとってより重要なブランチの構造が読み取りにくくなります。一方、リビ
ジョン間で比較を行う場合は、タグの内容に簡単にアクセスできる必要があります。このオプ
ションは、タグのノードを非表示にする代わりに、コピー元のノード上にツールチップとして表
示するようにします。コピー元のノードの右側にタグアイコンがあれば、タグが作成されたこと
が分かります。これで、表示をとても簡素化することができます。
なお、タグからコピーが作成された場合、通常は新しいブランチがタグから作成された場合です
が、タグはまとめられずに独立したノードとして表示されます。
削除されたパスを隠す
リポジトリの HEAD リビジョンに存在していないパス(削除されたブランチなど)を非表示にし
ます。
タグを折りたたむを選択した場合、タグの作成元になったために表示されていた削除済みのブラ
ンチは、タグと一緒に非表示になります。タグが作成された最後のリビジョンは、削除された別
のリビジョンと区別するために、削除されたノードの色で表示されます。
タグを折りたたむを選択すると、タグを表示する必要がなくなったブランチは、再度非表示にな
ります。
未使用のブランチを非表示にする
それぞれのファイルやサブフォルダーに対して、変更をコミットしていないブランチを隠しま
す。これは必ずしも、そのブランチが使われなかったことを表すわけではありません。ただ、こ
の部分では変更されていないことを表します。
作業コピーのリビジョン表示
グラフ用に取得した項目の更新リビジョンに一致する、グラフのリビジョンをマークします。更
新したばかりの時は、 HEAD リビジョンになるでしょうが、最後に更新してから、別の人がコ
ミットしていると、作業コピーのリビジョンは若干古くなります。ノードは太い輪郭線でマーク
されます。
作業コピーの変更表示
作業コピーにローカルな変更がある場合、このオプションはその変更を分かれた楕円のノードと
して描画し、作業コピーの最終更新リビジョンの後ろに接続します。デフォルトの輪郭色は赤で
す。最新の変更を取得するため、F5 を押してグラフを再表示する必要があります。
フィルター
リビジョングラフは、時に必要以上に大量のリビジョンを含んでしまいます。このオプションで
はダイアログを表示し、表示するリビジョン範囲を制限したり、特定のパスを非表示にしたりと
いったことができます。
特定のパスを非表示にし、そのノードに子ノードがある場合、子ノードは別なツリーとして表示
されます。すべての子ノードを非表示にする場合は、子階層すべてを削除チェックボックスを使
用して下さい。
ツリーストライプ
複数のツリーを含むグラフでは、それぞれのツリーを識別するのに、交互に背景色が付いている
と便利です。
縮小表示
現在の表示ウィンドウをドラッグできる矩形で表した、グラフ全体の小さな画像を表示します。
これによりグラフをもっと簡単にナビゲートできます。非常に大きいグラフの場合、極端な縮小
のため役に立たない可能性があります。その場合表示されないことにご注意ください。
4.25.3. グラフの使用
大きなリビジョングラフを参照するのに、外観ウィンドウを使用してください。小さなウィンドウ
に、図の全体を表示し、現在の表示範囲を強調しています。強調範囲をドラッグすると、表示領域が
変化します。
127
日常の使用ガイド
リビジョンの日時、作者。コメントは、マウスをリビジョンボックスの上にかざしたときに出るヒン
トボックスに表示します。
2つのリビジョンを選択(Ctrl-左クリック)すると、そのリビジョン間の差分を表示するコンテキ
ストメニューを使用できます。ブランチ作成ポイントで差分を表示できますが、通常ブランチ終了ポ
イント(つまり HEAD リビジョン)について表示したいことでしょう。
差分をUnified差分ファイル(最小の文脈で全差分を1ファイルにまとめたもの)で見られます。 コ
ンテキストメニュー → リビジョンを比較 を選択すると、変更したファイルの一覧が表示されます。
ファイル名を ダブルクリック すると両リビジョンを取得し、視覚差分ツールで比較します。
リビジョン上で 右クリック すると、履歴を表示するのに コンテキストメニュー → ログ表示 を使
用できます。
別の作業コピーにある、選択したリビジョンの変更もマージできます。フォルダー選択ダイアログに
より、マージ結果を格納する作業コピーを選択できますが、確認ダイアログはなく、また動作チェッ
クもできません。変更されていない作業コピーを用い、選択したリビジョンをマージするのに失敗し
たら、変更を取り消すのがよい方法です。 これはあるブランチから別のブランチへ、選択したリビ
ジョンをマージするのに便利です。
リビジョングラフの読み方
初めて見たユーザーは、ユーザーのメンタルモデルと異なるリビジョングラフに驚くか
もしれません。例えばリビジョンが、ファイルやフォルダーに対して、複数のコピーや
ブランチを変更すると、ひとつのリビジョンから複数のノードが生成されます。ツール
バーの左端から初めて、ひとつひとつメンタルモデルと合うまで、グラフをカスタマイ
ズするのもいい実践法です。
フィルターオプションはすべて、可能な限り情報を少しも失わないように試みます。そ
れにより、例えばいくつかのノードは色が変わる可能性があります。予期しない結果と
なった場合は、常に最後に行ったフィルターを取り消し、特定のリビジョンやブランチ
に対して何が特別であったのか、理解するように努めてください。多くの場合、はじめ
に予想したフィルター操作の結果は、的確でないか誤解しています。
4.25.4. 表示の更新
新しい情報を取得するためサーバーを再チェックする場合、単純に F5 で表示を更新できます。ログ
キャッシュを使用する場合(デフォルトで有効)、新しいログメッセージがあるかリポジトリを
チェックし、新しいもののみを取得します。ログキャッシュがオフラインモードだった場合、オンラ
インモードにしようともします。
ログキャッシュを使用しており、メッセージの内容や作者を変更しようとする場合、必要なメッセー
ジを再読込するのにログダイアログを使用するべきです。リビジョングラフはリポジトリのルートか
ら動作しますので、ログキャッシュ全体を無効にせねばならず、キャッシュにためるのに非常に長い
時間がかかります。
4.25.5. ツリーの剪定
大きなツリーはナビゲートしにくい場合があり、一部を隠したり、小さなツリー群に分割したりした
くなると思います。ノードに出入りするノードリンクの点の上にマウスを移動すると、このための複
数のポップアップボタンを目にすることになります。
付随するサブツリーを折りたたむには、-ボタンをクリックしてください。
128
日常の使用ガイド
折りたたまれたツリーを展開するには、+ボタンをクリックしてください。ツリーが折りたたまれて
いる場合、隠されたサブツリーを表すため、表示したままとなります。
×ボタンをクリックすると、取り付けたサブツリーを分割し、独立したツリーとしてグラフに表示し
ます。
○ボタンを押すと、分割したツリーを再度取り付けます。ツリーが遠いところで分割された際には、
分割したサブツリーがあることを示すため、このボタンを表示したままとなります。
グラフの背景をクリックすると、すべて展開 や すべて連結する を提供する、メインコンテキストメ
ニューを表示します。折りたたんだり分割したブランチがなければ、コンテキストメニューを表示し
ません
4.26. Subversion 作業コピーをエクスポート
.svn ディレクトリのない、作業ツリーのまっさらなコピーが欲しい場合があります。ソースの圧縮
アーカイブを作成するときや、WEBサーバーにエクスポートするときなどです。コピーを作成してか
ら.svn
ディレクトリを手作業で削除する代わりに、TortoiseSVNではTortoiseSVN → エクスポー
ト... コマンドを用意しています。URLからのエクスポートと作業コピーからのエクスポートは多少
異なります。
図4.65 URL からエクスポートダイアログ
バージョン管理外のフォルダーでこのコマンドを実行すると、TortoiseSVN は選択したフォルダーを
ターゲットと見なし、エクスポートする URL とリビジョンを入力するダイアログを開きます。この
ダイアログでは、最上位フォルダーのみかどうか、外部参照を省略するかどうか、svn:eol-style プ
ロパティが設定されているファイルの行末を書き換えるかどうかといったオプションがあります。
129
日常の使用ガイド
またもちろん、リポジトリから直接エクスポートもできます。リポジトリブラウザーを用いて、リポ
ジトリ内の適切なサブディレクトリを探し、コンテキストメニュー → エクスポート としてくださ
い。前述の URL からエクスポート ダイアログを表示します。
作業コピーでこのコマンドを実行すると、.svn フォルダーを含まない、まっさら な作業コピーを保
存する場所を訊いてきます。デフォルトではバージョン管理下のファイルのみですが、バージョン管
理外のファイルもエクスポートする チェックボックスを使用すると、リポジトリになく作業コピー
にあるバージョン管理外のファイルも含めることができます。必要なら svn:externals を使用した
外部参照を省略することもできます。
他にも、作業コピーのフォルダーを別の場所に右ドラッグし、コンテキストメニュー → SVN
バー
ジョン管理下の項目をここにエクスポート、コンテキストメニュー → SVN すべての項目をここにエ
クスポート、コンテキストメニュー → SVN 変更された項目をここにエクスポートを選んでも、作業
コピーからエクスポートすることができます。2番目はバージョン管理されていないファイルも含み
ます。3番目はフォルダ構造の中で、変更された項目のみをエクスポートします。
作業コピーからエクスポートする際、ターゲットフォルダーにエクスポートするフォルダーと同じ名
前が存在する場合は、既存のフォルダーを上書きするか、自動的に名前を生成して新しいフォルダー
を作成するか(Target (1)など)を選択できます。
単一ファイルのエクスポート
エクスポートダイアログは、Subversion ではできる 単一ファイルのエクスポートを、許
可していません。
TortoiseSVN で単一ファイルをエクスポートするには、リポジトリブラウザーを使う必
要があります (「リポジトリブラウザー」)。単純にエクスポートしたいファイルを、
リポジトリブラウザーからエクスプローラーの目的の場所にドラッグするか、リポジト
リブラウザーのコンテキストメニューを使ってファイルをエクスポートします。
変更したツリーのエクスポート
プロジェクトツリー構造のコピーをエクスポートしたいのに、特定のリビジョンやふた
つのリビジョン間にしかないファイルのみを含めたい場合、 「フォルダーの比較」 で説
明する、リビジョン比較機構を使用してください。
作業コピーのツリー構造の中で、ローカルで変更されたファイルのみをエクスポートし
たい場合は、前述のSVN 変更された項目をここにエクスポートを参照してください。
4.26.1. 作業コピーをバージョン管理外へ
作業コピーを.svnディレクトリがない通常のフォルダーにしたい場合は、作業コピーのルートにあ
る.svnディレクトリを削除するだけです。
それ以外にも、作業コピーのフォルダー自身にエクスポートする方法もあります。Windowsエクスプ
ローラーで、ファイルペインにある作業コピーのルートフォルダーを、フォルダーペインの同じフォ
ルダーに右ドラッグしてください。TortoiseSVNはこの特殊なケースを検出し、作業コピーをバー
ジョン管理下から外すかどうかを聞いてきます。はい と答えると、コントロールディレクトリを削
除し、まっさらなバージョン管理されていないディレクトリになります。
4.27. 作業コピーの再配置
130
日常の使用ガイド
図4.66 再配置ダイアログ
もしリポジトリの位置(IP/URL)が何らかの理由で変更された場合、たぶん作業が止まってしまうで
しょう。コミットができなくなり、新しい場所から再び作業コピーをチェックアウトして、変更した
データをすべて新しい作業コピーに書き戻すということはしたくないでしょう。その時に使うの
は、TortoiseSVNの → 再配置コマンドです。ここで行われることは少しだけです。新しいURLで各
ファイルとフォルダーに関連付けられているすべてのURLを書き換えます。
注記
この操作は作業コピーのルートでのみ実行できます。そのため、コンテキストメニュー
項目は作業コピーのルートでのみ表示されます。
この操作の一部として、TortoiseSVN
がリポジトリに接続するのに驚かれるかもしれません。これ
は、新しい URL が既存の作業コピーと、本当に同じリポジトリを指しているかを簡単にチェックす
るためだけに行います。
警告
これはほとんど行われない操作でしょう。再配置コマンドは、リポジトリのルートの
URL が変更されたときのみ使用します。考えられる理由は以下のようなものでしょう。
• サーバーの IP アドレスが変更された。
• プロトコルが変更された。(http:// から https:// など)
• サーバーのセットアップでリポジトリのルートパスが変更された。
その他としては、作業コピーが同じリポジトリの同じ場所を参照していたのに、リポジ
トリ自身が移動してしまった時に、再配置する必要があります。
以下のような場合には使用しないでください。
• 異なる Subversion のリポジトリに移動したい。その場合は新しいリポジトリの場所か
らまっさらなチェックアウトを実行するべきです。
• 同じリポジトリの、異なるブランチやディレクトリに切り替えたい。この場
合、TortoiseSVN → 切り替え... を使用するべきです。詳細は、 「チェックアウトす
るか切り替えるか...」 をご覧ください。
以上のような場合に再配置を使用すると、作業コピーを破損してしまい、更新、コミッ
ト、etc.
でわけの分からないエラーメッセージを見ることになります。こうなってし
まったら、新しくチェックアウトするしかありません。
4.28. バグ追跡ツール/課題追跡システムとの統合
131
日常の使用ガイド
ソフトウェア開発ではふつう、変更を特定のバグIDや課題IDに結びつけます。バグ追跡ツール(課題
追跡システム)を使用している場合、 Subversion で行った変更を、課題追跡システムの特定のIDと
関連付けできると便利です。多くの課題追跡システムではそのために、ログメッセージを解釈してコ
ミットに関連する課題IDを抽出するための pre-commit フックスクリプトを提供しています。しか
し、 pre-commit フックスクリプトが正しく解釈できるようにログメッセージを書けるかどうかは
ユーザーに依存しているため、ときどき失敗する傾向があります。
TortoiseSVN は、次の2つの方法でユーザーを補助します。
1. ユーザーがログメッセージを入力するとき、課題IDを含む行が自動的に正しい書式で追加される
ようにします。これによって、ユーザーがバグ追跡ツールで正しく解釈できない形で課題IDを入
力してしまうリスクを減らせます。
また、 TortoiseSVN は入力されたログメッセージのうち、課題追跡システムが認識した部分を強
調表示できます。これにより、ログメッセージが正しく解釈されたか、ユーザーが知ることがで
きます。
2. ユーザーがログメッセージを閲覧する際に、 TortoiseSVN は、ログメッセージ内の各課題IDに、
課題に言及しているページをブラウザーで開くリンクを作成します。
4.28.1. ログメッセージへの課題IDの付与
TortoiseSVN は任意のバグ追跡ツールと統合できます。そのためには、 bugtraq: で始まるプロパ
ティを、フォルダーに対して定義する必要があります。(「プロジェクト設定」)
132
日常の使用ガイド
図4.67 課題追跡システムのプロパティダイアログ
課題追跡システムのプロパティを編集する場合、適切な値を簡単に設定するために、専用のプロパ
ティエディターを使用します。
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
つの方法があります。
133
日常の使用ガイド
文字列が ^/ で始まる場合は、リポジトリルートからの相対 URL であると見なされます。例
えば、リポジトリが http://tortoisesvn.net/svn/trunk/ にある場合、^/../?do=details&id=
%BUGID% は、http://tortoisesvn.net/?do=details&id=%BUGID% と解釈されます。
/ で始まる文字列の URL は、サーバーのホスト名からの相対 URL であると見なします。例
えば、リポジトリが http://tortoisesvn.net のどこかにある場合、/?do=details&id=%BUGID%
は、http://tortoisesvn.net/?do=details&id=%BUGID% と解釈されます。
bugtraq:warnifnoissue
課題IDテキストフィールドが空の場合、TortoiseSVN が警告を発するようにする場合は、 true
に設定してください。有効な値は true/false です。 定義されていなければ、 false として扱
われます。
4.28.1.1. テキストボックスを使用した課題ID
単純文字列によるアプローチでは、課題IDを入力できる独立した入力フィールドが表示されます。そ
して、ユーザーが入力したログメッセージに独立した行が追加されます。
bugtraq:message
入力フィールドモードでバグ追跡システムを有効にします。このプロパティを設定すると、変更
をコミットする際に課題IDを入力するよう促されます。この書式でログメッセージの末尾に行が
追加されます。中に %BUGID% を含んでいる必要があり、これはコミットの際に課題IDに置換され
ます。この機能を使用することで、コミットログに課題IDへの参照を一定の書式で確実に含め、
バグ管理ツールがこれを解釈して課題IDと特定のコミットを関連付けることができるようになり
ます。例えば Issue : %BUGID% などと設定することができますが、これは使用するツールに依存
します。
bugtraq:label
このテキストは、コミットダイアログの課題IDを入力するエディットボックスのラベルとして表
示されます。設定されていないと、 バグID/課題番号(): bugtraq:numbertrue true/false true
bugtraq:appendtrue/false true
4.28.1.2. 正規表現を使用した課題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」(複数の場合)やコロンを続けることもできます。この
134
日常の使用ガイド
後、0個以上の空白と、オプションのコンマまたは 「and」 、さらに0個以上の空白が来て、さ
らに「#」と十進数の数値、という形のグループが1つ以上来ます。
正規表現が1個のみの場合は、単体の課題IDと正規表現文字列のグループとがマッチしなければ
なりません。例: [Ii]ssue(?:s)? #?(\d+)。この方法は、 trac のような一部の課題追跡システ
ムには必要ですが、その正規表現を構築するのは大変です。使用する課題追跡システムのドキュ
メントにある場合にのみ、この方法を使用するのをお勧めします。
正規表現になじみがなければ、http://ja.wikipedia.org/wiki/正規表現
[http://
ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE]
にある解説や、http://
www.regular-expressions.info/ にあるオンラインのドキュメントやチュートリアルをご覧くだ
さい。
正規表現を常に正しく書くことは困難なので、手助けのために、課題追跡システムのプロパティ
ダイアログにテストダイアログを用意しています。エディットボックスの右側のボタンをクリッ
クすると起動します。ここに文字列を入力し、正規表現を変更すると結果を表示させることがで
きます。正規表現が無効であれば、エディットボックスの背景が赤くなります。
bugtraq:message と bugtraq:logregex の両方を設定した場合、logregex が優先されます。
ヒント
ログメッセージを解釈する pre-commit フックスクリプトを持つ課題追跡システムがなく
ても、ログメッセージで言及している問題にリンクするために、この機能を使用するこ
とができます。
またリンクが必要なくても、課題IDがログダイアログの独立した列に表示されるので、
どの課題に対応する変更かがわかりやすくなります。
tsvn: プロパティのいくつかは true/false 値をとります。TortoiseSVN は yes を true と同義
に、no を false と同義に解釈します。
フォルダーへのプロパティの設定
これらのプロパティは、作業するシステムのフォルダーに設定しなければなりません。
ファイルやフォルダーをコミットする際に、このフォルダーからプロパティが読み取ら
れます。フォルダーにプロパティが設定されていない場合、プロパティはフォルダー階
層を上位に向かって、バージョン管理外フォルダーか、ツリーのルート(例: C:\)に到
達するまで検索されます。すべてのユーザーが、例えば trunk/ からチェックアウトし、
サブフォルダーからチェックアウトしないことが確認できるのであれば、 trunk/ にその
プロパティを設定するだけで充分です。サブフォルダーからもチェックアウトする可能
性があるのであれば、プロパティを各サブフォルダーに再帰的に設定するべきです。プ
ロジェクトの深い階層で設定されたプロパティは、高いレベルの(trunk/ に近い)もの
より優先されます。
バージョン1.8より、TortoiseSVNおよびSubversionでは、フォルダーに設定したプロパ
ティが自動的にサブフォルダーに継承されようになりました。これをプロパティ継承と
呼びます。そのため、ルートフォルダーに設定すれば、すべてのフォルダーにプロパ
ティを設定する必要はなくなりました。
プロジェクトプロパティ(例:tsvn:、bugtraq:、webviewer:)に限っていえば、 プロ
パティを再帰的に適用する チェックボックスを使うと、そのフォルダ以下のすべてのサ
ブフォルダーにプロパティを設定しますが、ファイルには設定しません。
TortoiseSVN で新しいサブフォルダーを作業コピーに追加する際、親フォルダーに設定されているプ
ロジェクトプロパティは、新しいサブフォルダーにも自動的に追加されます。
135
日常の使用ガイド
リポジトリブラウザーからは課題追跡システムの情報を利用で
きない
バグ追跡システムとの統合は、 Subversion のプロパティとして保持されているため、
チェックアウトした作業コピーを使用するときのみ表示されます。リモートからプロパ
ティを取得するのには時間がかかるため、作業コピーからリポジトリブラウザーを起動
しなければ表示されません。リポジトリのURLを入力してリポジトリブラウザーを起動し
た場合は表示されません。
同じ理由で、プロジェクトのプロパティは、リポジトリブラウザーを使用して子フォル
ダーを追加しても、自動的には継承されません。
この課題追跡システムとの統合は、 TortoiseSVN に限定されたものではなく、どの Subversion クラ
イアントでも共通で使用できます。詳細については、TortoiseSVN のソースリポジトリにある Issue
Tracker Integration Specification [https://svn.code.sf.net/p/tortoisesvn/code/trunk/doc/
notes/issuetrackers.txt] の全文をお読みください(リポジトリへのアクセスのしかたは、「ライ
センス」 で説明します)。
4.28.2. 課題追跡システムからの情報取得
前節では、ログメッセージへ課題情報の追加について扱いました。しかし、課題追跡システムから情
報を取得する必要がある場合、どのようにしたらよいのでしょう?コミットダイアログは、課題追跡
システムと対話できるような、外部プログラムを統合するためのCOMインターフェイスを備えていま
す。通常、自分に割り当てられた未解決の課題の一覧を問い合わせて、このコミットに関連する課題
を選択できるといいのではないでしょうか。
そのようなインターフェイスはいずれも、課題追跡システムに強く依存しているので、私たちはこの
部分を提供することはできませんし、そのようなプログラムの作成方法について説明することは、こ
のマニュアルの範疇を超えてしまいます。インターフェイスの定義や、C#やC++/ATLで書かれたサン
プルプラグインは、 TortoiseSVN リポジトリ [https://svn.code.sf.net/p/tortoisesvn/code/
trunk/contrib/issue-tracker-plugins]の contrib フォルダから取得できます(リポジトリのアク
セスの仕方は、 「ライセンス」で説明します)。API の概要も 7章IBugtraqProvider インター
フェイス で得られます。それ以外の(動作する)サンプルプラグインとして、 C# では Gurtle
[http://code.google.com/p/gurtle/] があり、これは課題管理システム Google Code [http://
code.google.com/hosting/] と連動するために必要な COM インターフェイスを実装しています。
説明のために、システム管理者が、インストールした課題管理システムプラグインを提供し、
TortoiseSVN
の設定ダイアログでそのプラグインを使用する作業コピーをセットアップしたとしま
しょう。プラグインに割り当てられた作業コピーからコミットダイアログを開くと、ダイアログの上
部に新しいボタンが現れるはずです。
136
日常の使用ガイド
図4.68 課題追跡システムクエリダイアログの例
この例では、複数の未解決課題を選択できます。その後、プラグインがログメッセージに追加する、
特定のフォーマットのテキストを生成できます。
4.29. Web ベースのリポジトリビューアーとの統合
Subversion
のリポジトリビューアーとして使用することができるウェブベースのシステムとし
て、ViewVC [http://www.viewvc.org/] や WebSVN [http://websvn.tigris.org/] などがありま
す。TortoiseSVN は、そういったビューアーと連携することができます。
TortoiseSVN は任意のリポジトリビューアーと統合できます。そのためには、リンク用に用意されて
いるプロパティを定義する必要があります。以下のようにフォルダーに設定しなければなりません。
(「プロジェクト設定」)
webviewer:revision
リビジョンを指定して、その変更点を表示させるために使用する URL を指定します。適切に
URI
エンコードし、%REVISION%
という文字列を含んでいる必要があります。
%REVISION
% の部分は、リビジョン番号に置き換わります。このプロパティを設定すると、ログダイアログ
のコンテキストメニューに、コンテキストメニュー → リビジョンをウェブビューアーで表示 が
表示されるようになります。
webviewer:pathrevision
ファイルとリビジョンを指定して、その変更点を表示させるために使用する URL を指定します。
適切に URI エンコードし、%REVISION% と %PATH% という文字列を含んでいる必要がありま
137
日常の使用ガイド
す。 %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を入力してリポジトリブラウザーを起
動した場合は表示されません。
同じ理由で、プロジェクトのプロパティは、リポジトリブラウザーを使用して子フォル
ダーを追加しても、自動的には継承されません。
4.30. TortoiseSVN の設定
マウスポインタをしばらくエディットボックスやチェックボックスなどの上に置いておくと、ヘルプ
のツールチップがポップアップして、設定がなんのために変更できるのかが分かります。
4.30.1. 一般設定
138
日常の使用ガイド
図4.69 設定ダイアログの「全般」ページ
このダイアログでは、好みの言語を指定したり、Subversion 特有の設定を行うことができます。
言語
ユーザーインターフェイスの言語を選択してください。もちろん、英語以外を利用する場合は適
切な言語パックを先にインストールしておく必要があります。
更新をチェック
チェックすると、TortoiseSVN
は週に一度、ダウンロードサイトに接続して、プログラムの新
バージョンがリリースされているかを調べます。結果をすぐに知りたければ、今すぐチェック
を押してください。新バージョンがダウンロードされるわけではありません。単に新バージョン
があるという、情報ダイアログが表示されるだけです。
システムサウンド
TortoiseSVN にはデフォルトで3つのカスタムサウンドがインストールされています。
• エラー
• 注意
• 警告
Windows のコントロールパネルで別のサウンド(もしくは完全に OFF)を選択できます。設定は
コントロールパネルへのショートカットです。
Aero のダイアログを使用
Windows Vista 以降のシステムでは、ダイアログに Aero スタイルを使用するかどうか制御する
ことができます。
ライブラリを作成
Windows 7 では、システムのさまざまな場所に散在している作業コピーをグループ化するための
ライブラリを作成することができます。
常に無視するパターン
常に無視するパターンは、バージョン管理外のファイルを、コミットダイアログなどで表示され
ないようにするのに使用します。パターンにマッチしたファイルは、インポートでも無視されま
139
日常の使用ガイド
す。除外するファイルやディレクトリは、名前や拡張子で判断されます。パターンは空白で区切
り、
bin
obj
*.bak
*.~??
*.jar
*.
[Tt]mp のようにします。このパターンにはパス区切り文字を含めないでください。また、ファ
イルとディレクトリを区別することができないことに注意してください。パターンマッチの文法
の詳細は、 「無視リストでのパターンマッチ」 を参照してください。
ここで指定した無視パターンは、同じPCで動作する他の Subversion クライアント(コマンドラ
インクライアントを含む)でも有効になることに注意してください。
注意
Subversion の設定ファイルで global-ignores パターンを設定していると、この設
定を上書きしてしまいます。 Subversion の設定ファイルには、下にある 編集 ボタ
ンでアクセスできます。
この無視パターンはすべてのプロジェクトに影響します。バージョン管理されませんので、他の
ユーザーには影響しません。一方、バージョン管理の
svn:ignore
や
svn:globalignore プロパティを使用し、バージョン管理からファイルやディレクトリを除外することもで
きます。詳細は 「ファイルやディレクトリの無視」 をご覧ください。
ファイルの更新日時を「最後にコミットした日時」に設定
このオプションは、チェックアウトや更新時にコミット時の日時をファイルの更新日時として使
うよう、TortoiseSVN に指示します。そうでなければ、 TortoiseSVN は現在の日時を使用しま
す。ソフトウェアを開発しているなら、ビルドシステムがコンパイルの要否を判断するのにタイ
ムスタンプを使用するので、現在の日時にしておくのが最善でしょう。「最後にコミットした日
時」 を使用していると、ファイルを古いリビジョンに戻す場合、プロジェクトがコンパイルさ
れない可能性があります。
Subversion 設定ファイル
Subversion
設定ファイルを直接編集するには
編集
を使用してください。い
くつかの設定は
TortoiseSVN
では直接変更することができないため、その場合にこれ
が必要です。Subversion
の
config
ファイルについての詳細情報は、Runtime
Configuration
Area
[http://svnbook.red-bean.com/en/1.8/svn.advanced.confarea.html]
をご覧ください。Automatic
Property
Setting
[http://svnbook.redbean.com/en/1.8/svn.advanced.props.html#svn.advanced.props.auto]
の節には興味深い
項目があり、これはここで設定します。Subversion
は複数の設定情報を読み込めますが、そ
の優先順位を知っておかなくてはならないことに注意してください。詳細は
Configuration
and
the
Windows
Registry
[http://svnbook.red-bean.com/en/1.8/
svn.advanced.confarea.html#svn.advanced.confarea.windows-registry]
を参照してくださ
い。
更新時に svn:externals にローカルの変更を適用する
このオプションは、 TortoiseSVN が作業コピーを更新する時に、 svn:externals プロパティに
ローカルで行われた変更を常に適用することを示します。
140
日常の使用ガイド
4.30.1.1. コンテキストメニュー設定
図4.70 設定ダイアログの「コンテキストメニュー」ページ
このページでは、メインコンテキストメニューと
TortoiseSVN
サブメニューに現れる
TortoiseSVN
コンテキストメニューエントリを指定できます。デフォルトでは、ほとんどの項目に
チェックが付いておらず、サブメニューに表示されません。
ロックを取得 は特殊です。もちろん上のリストを用いてトップレベルに表示できますが、ロックの
必要がないほとんどのファイルにとっては乱雑なだけです。しかし、svn:needs-lock プロパティが
設定されているファイルには、いつでも編集できるように、このアクションが必要です。この場合
トップレベルに表示している方が便利です。このボックスをチェックしておくと、svn:needs-lock
プロパティが設定されているファイルを選択すると、ロックを取得 がいつでもトップレベルに表示
されるようになります。
Subversion
のバージョン管理下にあるフォルダーを離れているときは、ほとんどの場合、
TortoiseSVN のコンテキストメニューを使用しません。バージョン管理外のフォルダーで本当にコン
テキストメニューを必要とするのは、チェックアウト時くらいでしょう。バージョン管理外のパスで
はメニューを表示しないのオプションをチェックすると、 バージョン管理外フォルダーのコンテキ
ストメニューでは、TortoiseSVN のメニュー項目が表示されなくなります。ただし、バージョン管理
下のフォルダーでは、すべての項目を表示します。 Shift
を押しながらコンテキストメニューを表示させると、バージョン管理外のフォルダーでもすべての
メニュー項目を表示させることができます。
TortoiseSVN のコンテキストメニューにも現れて欲しくない、コンピューター上のパスがある場合、
下にあるボックスの項目を一覧できます。
141
日常の使用ガイド
4.30.1.2. TortoiseSVN ダイアログ設定1
図4.71 設定ダイアログの「ダイアログ1」ページ
このダイアログでは、TortoiseSVN のダイアログをお好みに設定できます。
デフォルトのログメッセージ数
最初に TortoiseSVN → ログを表示 を選択したとき、 TortoiseSVN が取得するログメッセージを
この数に制限します。サーバーへの接続が遅い場合に便利です。もっとメッセージを取得するに
は 全て表示 や 次の100件 を使用してください。
ログメッセージ用フォント
リビジョンログダイアログの中央の欄で、ログメッセージが表示される際に使用されるフォント
とサイズを指定します。これは、コミットダイアログでログメッセージを編集する際にも使われ
ます。
ログメッセージに短い日時形式を使用する
標準の長いメッセージ形式で使用するには画面が狭い場合、短い形式を使用します。
ログリスト内でダブルクリックすることで過去のリビジョンと比較する
ログダイアログの上の欄のリストを使用してリビジョンの比較を頻繁に行う場合は、このオプ
ションを有効にすると、ダブルクリックで比較できるようになります。差分の取得には時間がか
かるため、デフォルトでこのオプションは有効になっていません。多くの人は、間違ってダブル
クリックした際に長時間待たされるのを避けたいということから、このオプションをデフォルト
で有効にしていません。
ダイアログを閉じる条件
TortoiseSVN のコマンドがエラーがなく終了すると、進行ダイアログを自動で閉じることができ
ます。この設定でダイアログを閉じる条件を選択できます。デフォルト(推奨)設定は手動で閉
じるで、全てのメッセージを見て、何が起きたのか確認できます。しかし、ある種のメッセージ
は無視して、重要な変更がなければ自動で閉じてもらいたいということもあります。
マージ、追加、削除がなければ自動的に閉じるは、単純な更新のみの場合は進行ダイアログを閉
じますが、リポジトリからの変更をマージする必要がある場合や、ファイルの追加・削除がある
場合はダイアログを開いたままにします。また処理中に、なんらかの競合やエラーが発生した場
合にも開いたままになります。
142
日常の使用ガイド
競合がなければ自動的に閉じるはもっと基準をゆるめ、マージ、追加、削除が起きてもダイアロ
グを閉じますが、競合が発生した場合はダイアログを開いたままにします。
エラーがなければ自動的に閉じるは、競合が発生しても、 Subversion が処理を継続できないよ
うなエラーが発生しない限りダイアログを閉じます。例えば、サーバーにアクセスできずに更新
が失敗したり、作業コピーが最新ではなくコミットができない場合などです。
ローカル操作に対してはダイアログを常に閉じる
ファイルの追加や変更の取り消しといったローカル操作は、リポジトリへのアクセスは必要な
く、短時間で完了します。そのため、進行状況ダイアログは重要でないことがしばしばありま
す。エラーが発生しない時に限り、これら操作後に自動で進行状況ダイアログを閉じる場合は、
このオプションを選択してください。
変更を取り消す際にごみ箱を使用する
ローカルの変更を取り消す際、既に行っていた変更は破棄されます。TortoiseSVN では安全のた
めに、元のコピーに戻す前に、変更したファイルをごみ箱に入れます。ごみ箱に入れるのをス
キップしたい場合は、このオプションのチェックを外してください。
作業コピーの URL を 「元:」 のデフォルトURLとして使用する
マージダイアログでは、デフォルトの動作は 元: の URL を記憶している所にマージします。し
かし、階層内のいくつもの違う場所からマージを実行したい人もいますし、現在の作業コピーの
URL からはじめる方が簡単な場合があります。また、別のブランチにある平行したパスを参照し
ながら編集するのにも使用できます。
デフォルトチェックアウトパス
チェックアウトのデフォルトパスを指定できます。チェックアウトした物をすべて一カ所に保持
しておく場合、ドライブやフォルダーをあらかじめ設定しておいてくれ、最後に新しいフォル
ダー名を追加するだけですみます。
デフォルトチェックアウト URL
チェックアウトのデフォルト URL も指定できます。非常に大きいプロジェクトのサブプロジェク
トをちょくちょくチェックアウトする場合、URL をあらかじめ設定しておいてくれ、最後にサブ
プロジェクト名を追加するだけですみます。
4.30.1.3. TortoiseSVN ダイアログ設定2
図4.72 設定ダイアログの「ダイアログ2」ページ
143
日常の使用ガイド
バージョン管理外のフォルダーを再帰的に調べる
チェックすると(デフォルト状態)、追加、コミット、変更をチェックダイアログに、バージョ
ン管理外のフォルダーやそれ以下の階層のファイルやフォルダがすべて表示されます。チェック
しないと、以下の階層は表示されません。チェックを外せば、上記のダイアログが煩雑にならず
に済みます。この場合、バージョン管理外のフォルダーを追加するよう選択すると、再帰的に追
加されます。
変更をチェック
ダイアログでは、無視される項目を表示するか選択できます。このチェック
ボックスにチェックして、無視されたフォルダーを表示すると、その中にある項目も同様に見ら
れるようになります。
ファイルのパスやキーワードの自動補完を使用する
コミットダイアログはコミットするファイル名の一覧を保持しています。一覧にある項目の始め
の 3 文字をタイプすると、自動補完ボックスがポップアップし、Enter を押すとファイル名が補
完されます。チェックするとこの機能が有効になります。
自動補完のパースがタイムアウトするまでの時間(秒)
大きなファイルをチェックしていて、自動補完パーサが遅すぎることがあります。コミットダイ
アログが長い時間止まってしまうのなら、ここで指定した時間でタイムアウトするようになりま
す。重要な自動補完情報を見逃してしまうのなら、タイムアウトを長くできます。
tsvn:projectlanguage が設定されている場合はスペルチェッカーを使用する
コミット時にスペルチェッカーを使用しない場合、ここにチェックをつけてください。プロジェ
クトプロパティで必要だと指定したときだけ、動作するようになります。
ログメッセージの履歴で表示する最大の項目数
コミットダイアログでログメッセージを入力すると、TortoiseSVN
は後で再利用できるように
メッセージを記憶します。デフォルトでは、リポジトリごとに最新のログメッセージを 25 個記
憶していますが、ここでその数をカスタマイズできます。たくさんの異なるリポジトリがあるな
ら、レジストリがいっぱいにならないように、少なくしておくといいでしょう。
この設定は、このコンピューターで入力したメッセージにのみ適用されることに、ご注意くださ
い。ログキャッシュには何も影響を与えません。
項目を自動的に選択する
コミットダイアログの通常動作は、全ての(バージョン管理下の)変更があるファイルをコミッ
トするよう、自動的に選択します。はじめに何も選択せず、コミットする項目を手作業で選択す
る場合、このチェックボックスのチェックを外してください。
未コミットの項目が残ったときはコミット後に再度ダイアログを開く
コミットされていないファイルやフォルダーがあった場合、コミット完了後に同じディレクトリ
で自動的にコミットダイアログを再度開きます。
スタートアップ時にリポジトリへアクセスする
デフォルトでは「変更をチェック」ダイアログで作業コピーのチェックが行われ、リポジトリを
チェックがクリックされた時だけリポジトリへの接続を行います。常にリポジトリをチェックす
るようにしたい場合、これを設定すると、この動作が自動的に行われるようになります。
ファイルをロックする前にロックダイアログを表示する
ひとつないし複数のファイルを選択し、TortoiseSVN → ロック を使用してそのファイルをロック
する際、プロジェクトによっては、なぜそのファイルをロックしたかを説明するロックメッセー
ジを書くことになっています。ロックメッセージを使用しない場合には、このチェックボックス
のチェックをはずすと、ダイアログをスキップし、すぐにファイルをロックします。
フォルダーにたいしてロックコマンドを使用する場合、ロックするファイルを選択するため、常
にロックダイアログを表示します。
プロジェクトで tsvn:lockmsgminsize プロパティを使用している場合、そのプロジェクトはロッ
クメッセージが 必須 なので、設定がどうであってもロックダイアログを表示します。
144
日常の使用ガイド
4.30.1.4. TortoiseSVN ダイアログ設定3
図4.73 設定ダイアログの「ダイアログ3」ページ
高速に表示するためにフォルダーを先読みする
このチェックボックスをチェックすると(デフォルトの状態)、リポジトリブラウザーはバック
グラウンドでフォルダーに表示される情報を取得します。そのため、フォルダーのうちの1つを
クリックしたとき、情報がすでに準備されている状態になります。
しかし、サーバーによってはこのような場合に並行してアクセスされても処理できなかったり、
非常に多数のアクセスを正しく扱うように設定されていなかったために、不具合が発生してブ
ロックされてしまったりすることがあります。この場合、このチェックボックスで先読み機能を
無効にしてください。
外部参照を表示する
このチェックボックスをチェックすると(デフォルトの状態)、リポジトリブラウザーは
svn:externals プロパティで外部参照として設定されたファイルやフォルダーを、普通のファイ
ルやフォルダーと同じように表示します。但し、オーバーレイアイコンでは外部ソースとして扱
われます。
上記の先読み機能が有効になっていると、この機能も弱いサーバーには負担になることがありま
す。この場合、このチェックボックスでこの機能を無効にしてください。
145
日常の使用ガイド
4.30.1.5. TortoiseSVN の色の設定
図4.74 設定ダイアログの「色」ページ
このダイアログでは、TortoiseSVN のダイアログで使用するテキストの色をお好みに変更できます。
競合・妨害
更新中やマージ中に発生した競合。既存のバージョン管理外のファイル・フォルダーと同じ名前
のバージョン管理下のものがあると更新は妨害されます。
進行ダイアログのエラーメッセージにも使用します。
追加したファイル
リポジトリに追加した項目。
紛失・削除・置換
リポジトリから削除された項目、作業コピーから紛失した項目、作業コピーから削除された項
目、同じ名前で置き換えられた項目。
マージ終了
リポジトリからの変更を、競合もなく作業コピーにうまくマージしました。
変更・コピー
履歴に追加されるかリポジトリ内のパスをコピーした項目。ログダイアログでも、コピーされた
項目を含む場合に使用されます。
削除したノード
リポジトリからすでに削除された項目。
ノードを追加
(追加・コピー・移動操作で) リポジトリに追加した項目。
名前を変更されたノード
リポジトリで名前の変更があった項目。
置換
元の項目が削除され、同じ名前で新しく作成された項目。
146
日常の使用ガイド
絞り込みへの一致
ログダイアログで絞り込みをする際、検索語は検索結果中でこの色で強調表示されます。
4.30.2. リビジョングラフの設定
図4.75 設定ダイアログの「リビジョングラフ」ページ
分類パターン
リビジョングラフは、トランク、ブランチ、タグを見分けることで、リポジトリを明確に可視化
しようとします。これは Subversion に組み込まれた分類ではなく、パス名から抽出した情報で
す。デフォルト設定では、Subversion のドキュメントで推奨されている英語名規約ですが、も
ちろん使い方はことなるかもしれません。
三つの矩形で表すパスを、認識するため使用するパターンを指定してください。パターンは大文
字小文字を区別しませんが、小文字で書いてください。* や ? といったワイルドカードはいつも
のように使用できます。また、; で複数のパターンを区切ってください。比較に使用されてしま
うため、余計な空白は含めないでください。
コミットタグの検出
これらのパターンはリビジョングラフだけではなく、タグへのコミットの検出にも
使われることに注意してください。
色の変更
リビジョングラフで、ノードタイプ(つまり追加、削除、名前変更といったノード)を表すのに
使用する色です。ノードの分類を識別するため、ノードタイプと分類の両方を表示するよう、リ
ビジョングラフに色をませるよう指示できます。このチェックが付いていないと、ノードタイプ
を表すためだけに色を使用します。使用するそれぞれの色を指定するには、色選択ダイアログを
使用してください。
147
日常の使用ガイド
4.30.2.1. リビジョングラフの色
図4.76 設定ダイアログのリビジョングラフの「色」ページ
このページでは使用する色を設定できます。ここで指定する色は、無地の色であることにご注意くだ
さい。ほとんどのノードでは、ノードタイプ色と背景色、必要に応じて分類色を混ぜた色で着色され
ます。
削除したノード
削除され、同じリビジョンのどこにもコピーされていない項目です。
追加したノード
新しく追加されたか、コピー(履歴とともに追加)された項目です。
名前変更ノード
ある場所から削除され、同じリビジョンの別の場所に追加された項目です。
変更ノード
追加も削除もされず、単純に変更された項目です。
未変更ノード
(グラフに表示する)変更がまったくそのリビジョンで発生しなかったとしても、コピー元とし
て使用されるリビジョンを表示するのに使用される場合があります。
最新リビジョン(HEAD)ノード
現在のリポジトリの HEAD リビジョンです。
作業コピーノード
変更された作業コピー向けに追加ノードを表示するよう選択した場合、グラフに追加された最終
コミットリビジョンは、この色を使用します。
作業コピーノードの縁
作業コピーが変更されたことを表示するように選択した場合、変更を検出すると作業コピーの境
界線にこの色を使用します。
タグノード
タグとして分類されたノードは、この色が混ざることがあります。
148
日常の使用ガイド
トランクノード
トランクとして分類されたノードは、この色が混ざることがあります。
たたまれたタグマーカー
領域を節約するためにタグを折りたたんだ場合、コピー元において、タグはこの色のブロックを
使用してマークされます。
選択したノードマーカー
ノードを選択するためクリックしたままにした場合、選択状態を表すマーカはこの色のかたまり
となります。
縞模様
グラフがサブツリーに分割された時にその色を使い、背景にその他の色が付いている場合、分割
ツリーを際だたせるため、縞模様にします。
4.30.3. アイコンオーバレイ設定
図4.77 設定ダイアログの「アイコンオーバーレイ」ページ
このページでは、TortoiseSVN が表示するアイコンオーバーレイの項目を選択できます。
作業コピーの状態を取得するには時間がかかるため、エクスプローラーがオーバーレイアイコンを表
示するのに負荷がかからないように、 TortoiseSVN は状態をキャッシュに格納します。システムや
作業コピーの大きさをもとに、 TortoiseSVN が使用するキャッシュタイプを以下から選択してくだ
さい。
デフォルト
別のプロセス(TSVNCache.exe)がすべての状態情報をキャッシュします。このプロセスは、全
ドライブの変更を監視し、作業コピー内のファイルが更新されれば、その状態情報を再取得しま
す。優先度が最低で動作しますので、他のプログラムが、これによりリソースをとられてしまう
ことはありません。これは状態情報が リアルタイム で更新されないということでもあります
が、オーバーレイ表示は数秒で更新されます。
【利点】オーバーレイには再帰的な状態が表示されます。つまり、作業コピーの深い階層にある
ファイルを更新すると、作業コピーの最上位までの全フォルダーにも更新オーバーレイが表示さ
149
日常の使用ガイド
れます。さらにプロセスからシェルに通知が送られるので、通常、左のツリービューのオーバー
レイ表示も変更されます。
【欠点】プロジェクトについての作業をしていないときでも、プロセスが常に動作しています。
さらに、作業コピーの数や大きさにも依存しますが、およそ10~50MBの RAM を消費します。
シェル
シェル拡張 DLL の内部で直接キャッシュしますが、表示されているフォルダーのみをキャッシュ
します。別のフォルダーに移るたびに、ステータス情報を再取得されます。
【利点】とても少ないメモリの消費量で(およそ1MBの RAM を使用)、状態を リアルタイム に
表示できます。
【欠点】単一のフォルダーしかキャッシュしないため、オーバーレイには再帰的な状態が表示さ
れません。大きな作業コピーでは、デフォルトのキャッシュよりも、エクスプローラーのフォル
ダー表示に時間がかかることがあります。また、 MIME タイプ列が使用できなくなります。
無し
この設定では、 TortoiseSVN はエクスプローラーで状態をまったく取得しません。このため、
バージョン管理下にあるファイルやフォルダーには、常に「通常」がオーバーレイ表示されま
す。それ以外のオーバーレイは表示されず、追加の列も無効になります。
【利点】追加でメモリを使用することは絶対になく、閲覧中にエクスプローラーが遅くなること
もありません。
【欠点】ファイルやフォルダーの状態情報が、エクスプローラーに表示されません。作業コピー
が変更されているかどうかを確認するには、「変更をチェック」ダイアログを使用する必要があ
ります。
デフォルトでは、ファイルを開く・保存ダイアログでも、Windows エクスプローラーと同様に、オー
バレイアイコンやコンテキストメニューが表示されます。
Windows
エクスプローラーで
の
み
表示させる場合は、エクスプローラー上でのみオーバーレイとコンテキストメニューを表示を
チェックしてください。
バージョン管理外のファイルを含むフォルダーに、変更済マークをつけるようにもできます。これに
より、まだバージョン管理下に入れてない新しいファイルを作成したのを、覚えておくのに便利で
す。このオプションは、キャッシュタイプ(前述)が デフォルト の場合にのみ有効です。
変更リストignore-on-commitにファイルが登録されている場合、状態を親フォルダーの表示に反映さ
せないようにすることができます。つまり、変更リスト内のファイルだけが変更されても、親フォル
ダーのオーバーレイアイコンは「未変更」のままになります。
次のグループでは、オーバーレイを表示するストレージの種類を選択できます。デフォルトでは、
ハードディスクドライブしか選択されていません。アイコンオーバレイをすべて無効にもできます
が、そんなことしたいですか?
ネットワークドライブはとても遅いので、デフォルトでは、ネットワークフォルダー上にある作業コ
ピーにはアイコンを表示しません。
USB フラッシュドライブは、ドライブタイプがデバイス毎に特定されるので特殊です。ある種のもの
は固定ドライブに見え、別のある種のものはリムーバブルドライブに見えます。
除外するパス は TortoiseSVN に対して、それらのパスにはアイコンオーバーレイやステータス列
を 表示しない ことを伝えるために使用します。これは、変更しないライブラリのみが含まれるため
オーバーレイの必要ない巨大な作業コピーが存在する場合、もしくは TortoiseSVN に特定のフォル
ダーのみ見て欲しい場合に有用です。
ここで指定するパスはどれも再帰的に適用されることを想定しています。そのため、どの子階層フォ
ルダーもオーバーレイ表示されません。名前のついたフォルダー のみ を除外したいなら、 ? をパス
の後ろに追加してください。
150
日常の使用ガイド
含めるパス にも同じことが言えます。オーバーレイが無効になるドライブタイプや、除外パスで指
定したパスでも、オーバーレイされるようになります。
ユーザーは時々これら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 にフロッ
ピードライブがあっても、数秒の遅延が考えられるドライブを強制的に参照するからです。
151
日常の使用ガイド
4.30.3.1. アイコンセットの選択
図4.78 設定ダイアログの「アイコンセット」ページ
オーバーレイアイコンを任意のものに変更できます。オーバーレイアイコンセットを変更したとき
に、変更を有効にするにはコンピューターの再起動が必要なことに注意してください。
4.30.3.2. オーバーレイハンドラーを有効にする
図4.79 設定ダイアログの「オーバーレイハンドラー」ページ
使用可能なオーバーレイの数が厳しく制限されているため、任意のものがロードされることを保証す
るために、いくつかのハンドラを無効にすることができます。 TortoiseSVN は他の Tortoise クライ
アント(例えば TortoiseCVS や TortoiseHg )と共用される TortoiseOverlays コンポーネントを使
用しているため、この設定はそれらのクライアントに影響します。
152
日常の使用ガイド
4.30.4. ネットワーク設定
図4.80 設定ダイアログの「ネットワーク」ページ
リポジトリごとにプロキシの設定をする必要がある場合、 Subversion
の
servers
ファイル
を直接編集する必要があります。直接編集する場合は
編集
ボタンを押してください。このファ
イルの使用法の詳細は、Runtime Configuration Area [http://svnbook.red-bean.com/en/1.8/
svn.advanced.confarea.html] で説明しています。
TortoiseSVN が svn+ssh リポジトリと安全な接続を確立するのに使用するプログラムを指定できま
す。私たちは TortoisePlink.exe をお勧めします。これは TortoiseSVN に含まれている一般的な
Plink プログラムです。ですがウィンドウなしアプリとしてコンパイルされているため、認証するた
びに DOS ボックスがポップアップする、ということはありません。
実行ファイルのフルパスを指定しなければなりません。TortoisePlink.exe の場合、 TortoiseSVN の
標準 bin ディレクトリにあります。その場所を指定するには 参照 ボタンが役に立ちます。パスに空
白が含まれる場合、以下のように引用符で囲んでください。
"C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe"
ウィンドウを持たないということの側面として、いずれのエラーメッセージも行き場がないというこ
とがあります。そのため、認証が失敗したときに 「標準出力に書き込めません」 といった簡単な
メッセージしか得られません。このため、まず標準の Plink をセットアップすることをお勧めしま
す。すべて動作すれば、TortoisePlink を全く同じパラメーターで使用できます。
TortoisePlink は、Plink の派生物のためドキュメントがありません。コマンドラインパラメーター
は PuTTY のウェブサイト [http://www.chiark.greenend.org.uk/~sgtatham/putty/] で参照してく
ださい。
パスワードを繰り返し入力しなくてもいいように、Pageant のようにパスワードキャッシュツールの
使用も検討する必要があるでしょう。これも PuTTY のウェブサイトでダウンロードできます。
最終的に、サーバーとクライアントにSSHを設定するのは、このヘルプファイルの範疇を超えている
重要なプロセスです。しかし、TortoiseSVN FAQ にリストされている Subversion/TortoiseSVN SSH
How-To [http://tortoisesvn.net/ssh_howto.html] にガイドがあります。
153
日常の使用ガイド
4.30.5. 外部プログラムの設定
図4.81 設定ダイアログの「差分ビューアー」ページ
ここでは、TortoiseSVN
が使用する外部の差分・マージツールを定義できます。デフォルトでは
TortoiseSVN と一緒にインストールされる TortoiseMerge が使われます。
TortoiseSVN の外部の差分・マージツールとしてよく使われているものの一覧は、
マージツール」 をご覧ください。
「外部差分・
4.30.5.1. 差分ビューアー
外部の差分ツールは、ファイルを異なるリビジョン間で比較するのに使用します。外部ツールは、そ
れぞれのコマンドラインオプションに従って、コマンドラインからファイル名を取得する必要があり
ます。TortoiseSVN は % が先頭についた置換パラメーターを使用します。このパラメーターが現れる
と、適切な値に置換されます。パラメーターの順番はお使いの差分ツールに合わせてください。
%base
変更前のファイル
%bname
変更前ファイルのウィンドウタイトル
%nqbname
引用符なしの変更前ファイルのウィンドウタイトル
%mine
変更後のファイル
%yname
変更後ファイルのウィンドウタイトル
%nqyname
引用符なしの変更後ファイルのウィンドウタイトル
%burl
元ファイルのURL(もしあれば)
154
日常の使用ガイド
%nqburl
引用符なしの元ファイルのURL(もしあれば)
%yurl
2番目のファイルのURL(もしあれば)
%nqyurl
引用符なしの第2ファイルのURL(もしあれば)
%brev
元ファイルのリビジョン(もしあれば)
%nqbrev
引用符なしの元ファイルのリビジョン(もしあれば)
%yrev
2番目のファイルのリビジョン(もしあれば)
%nqyrev
引用符なしの第2ファイルのリビジョン(もしあれば)
%peg
ペグリビジョン(もしあれば)
%nqpeg
引用符なしのペグリビジョン(もしあれば)
%fname
競合ファイルの名前
%nqfname
引用符なしの競合ファイルの名前
ウィンドウタイトルは単なるファイル名ではありません。 TortoiseSVN は、それを表示名として扱
うため、それにふさわしい名前を作成します。たとえば、あるファイルのリビジョン 123 と作業コ
ピーの差分を表示する場合、それぞれの名前は filename : リビジョン 123 と filename : 作業コ
ピー となります。
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
155
日常の使用ガイド
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差分ファイルは単なるテキストファイルなので、任意のテキストエディターを使用しても結
構です。
4.30.5.2. マージツール
外部マージプログラムを競合したファイルの解決に使用します。パラメーターを差分プログラムと同
様の方法で置換します。
%base
誰も変更していないもとのファイル
%bname
変更前ファイルのウィンドウタイトル
%nqbname
引用符なしの変更前ファイルのウィンドウタイトル
%mine
自分の変更がある自分のファイル
%yname
変更後ファイルのウィンドウタイトル
%nqyname
引用符なしの変更後ファイルのウィンドウタイトル
%theirs
リポジトリにあるファイル
156
日常の使用ガイド
%tname
リポジトリにあるファイルのウィンドウタイトル
%nqtname
引用符なしのリポジトリにあるファイルのウィンドウタイトル
%merged
マージ操作をした結果の競合ファイル
%mname
マージしたファイルのウィンドウタイトル
%nqmname
引用符なしのマージしたファイルのウィンドウタイトル
%fname
ファイルの名前です。もし同じファイルの2つの状態を比較するのではなく、2つの異なるファイ
ルを比較する場合は、この文字列は空欄になります。
%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
157
日常の使用ガイド
4.30.5.3. 差分・マージの高度な設定
図4.82 設定ダイアログの「差分/マージの高度な設定」ダイアログ
高度な設定では、ファイルの拡張子ごとに異なる差分・マージプログラムを定義できます。たとえ
ば、.jpg ファイルの 「差分」 を取るのに Photoshop を関連付けできます。:-) svn:mime-type で
差分・マージプログラムと関連付けることもできます。
拡張子を関連付けるには、拡張子を指定する必要があります。Windows ビットマップファイルを指定
するには、.BMPとしてください。svn:mime-type
プロパティを使用して関連付けるには、text/xml
のようにスラッシュを含めて mime type を指定してください。
158
日常の使用ガイド
4.30.6. 保存データの設定
図4.83 設定ダイアログの「保存されたデータ」ページ
便宜上、TortoiseSVN
はたくさんの設定を保存し、最近の情報を記憶しています。データのキャッ
シュを削除する場合、ここで行います。
URLの履歴
作業コピーのチェックアウトや、変更点のマージ、リポジトリブラウザーの使用の際は常
に、TortoiseSVN は直近に使用した URL を記録し、コンボボックスに提供します。時には URL が
もう存在しなくなり、リストが散らかりますので、定期的に掃除するのに便利です。
コンボボックスに表示されている 1 項目だけを、その場で削除したい場合、下矢印をクリックし
てコンボボックスを開き、削除したい項目にマウスをあわせて、Shift+Del を押してください。
ログメッセージ(入力ダイアログ)
TortoiseSVN は最近の入力したコミットログを保存しています。リポジトリごとに保存していま
すので、たくさんのリポジトリにアクセスする場合、極度に肥大化してしまうことがあります。
ログメッセージ(ログダイアログ)
TortoiseSVN は、次回ログを参照した際の時間節約のため、ログ参照ダイアログが取得したログ
メッセージをキャッシュしています。メッセージがキャッシュされている状態で、他の誰かがロ
グメッセージを編集した場合、キャッシュを消去しないとその変更を参照できません。ログメッ
セージのキャッシュは ログキャッシュ タブで有効にできます。
ダイアログのサイズと位置
多くのダイアログは、前回使用したときのサイズと画面内の位置を記憶しています。
認証データ
Subversion サーバーの認証を通れば、ユーザー名とパスワードを毎回入力しなくてもいいよう
に、ローカルにキャッシュしています。セキュリティ上の理由や、リポジトリに別のユーザー名
でアクセスするのに消去したいかもしれません……ジョンはPCがあなたに使われているのを知っ
ていますか?
もし、特定の1つのサーバーについて認証データをクリアしたい場合は、全て消去ではなく消
去...ボタンを使用してください。
159
日常の使用ガイド
アクションログ
TortoiseSVN
は、進行ダイアログに書き込まれたすべてのログを保持しています。これは例え
ば、最近の更新コマンドで何が起きたのかをチェックしたいときに便利です。
ログファイルは長さを制限しており、大きくなりすぎたときには古い内容から破棄していきま
す。デフォルトでは 4000 行保持しますが、この数字はカスタマイズできます。
ここからログファイルの内容の確認や消去ができます。
4.30.7. ログキャッシュ
図4.84 設定ダイアログの「ログキャッシュ」ページ
このダイアログでは、TortoiseSVNのログキャッシュ機能の設定ができます。これはログメッセージ
と変更したパスのローカルコピーを保持し、サーバーからダウンロードの時間消費を防ぎます。ログ
キャッシュを使用すると、ログダイアログやリビジョングラフが劇的に速くなります。その他にも、
オフライン時にもログメッセージを参照できるといった便利な特徴もあります。
ログのキャッシュを有効にする
ログデータが必要な時は常にログのキャッシュを有効にします。チェックすると、キャッシュが
有効ならキャッシュからデータを取得します。キャッシュにメッセージがなければ、サーバーか
ら取得しキャッシュに追加します。
キャッシュを無効にすると、データを常にサーバーから直接取得し、ローカルに保存しません。
あいまいなURLを許可
時には、すべてのリポジトリが同じ URL を使用するサーバーに、接続しなければならないかもし
れません。svnbridge の旧バージョンではこうなるでしょう。そのようなリポジトリにアクセス
する必要がある場合、このオプションをチェックする必要があります。そうでなければ、性能向
上のため、チェックしないままにしてください。
あいまいなUUIDを許可
いくつかのホスティングサービスでは、すべてのリポジトリが同じ UUID を与えます。また、自
分のリポジトリフォルダーをコピーして新しいリポジトリを作成、のようなことさえしたかもし
れません。さまざまな理由でこれはまずい考えです。UUID は一意でなければなりません。しか
160
日常の使用ガイド
し、このチェックボックスをチェックすると、そのような状況でもログキャッシュが動作しま
す。必要なければ、性能向上のため、チェックしないままにしてください。
リポジトリにアクセスできない場合
オフラインで作業していたり、リポジトリサーバーがダウンしていたりした場合でも、ログ
キャッシュを使用して、すでにキャッシュに保持したログメッセージを提供できます。もちろん
キャッシュは最新の状態ではありませんから、この機能を使用するかどうかの選択肢がありま
す。
サーバーに接続せず、キャッシュからログデータを取得する際、ダイアログはオフライン状態で
あることをタイトルバーに表示します。
HEAD リビジョンへの更新がタイムアウトになるまでの秒数
ログダイアログを表示する際、通常、新しいログメッセージをチェックするのにサーバーに接続
すると思います。ここでタイムアウトに0以外を指定したばあい、前回の接続からその秒数経過
しているときだけ、サーバーに接続します。頻繁にログダイアログを開き、サーバーが遅い場
合、これによりサーバーとのやりとりを抑えることができますが、表示されるデータが完全に最
新であるとは限りません。この機能を使用する場合は、折衷案として300(5分)とするのをお勧
めします。
小さいキャッシュを自動削除する日数
たくさんのリポジトリをブラウズすると、たくさんのログキャッシュを蓄積することになりま
す。そのリポジトリを頻繁に使用しなければ、キャッシュが大きくふくらむことはありません。
そのため、TortoiseSVN はデフォルトで、ここにセットした時間後にキャッシュを削除します。
キャッシュの削除を制御するのに、この項目を使用してください。
自動削除対象となるキャッシュのサイズの上限
大きなキャッシュの再取得は、より負荷が高くなります。そのため、TortoiseSVN
キャッシュしか削除しません。この値で、適切な閾値を調節してください。
は小さな
異常終了後にキャッシュを保持する回数
時折、キャッシュに何か障害が発生し、それが元で異常終了することがあります。これが発生す
ると、問題の再発防止のため、通常自動的にキャッシュを削除します。ナイトリービルドのよう
な不安定さの残るバージョンを使用する場合などで、キャッシュを保持するために指定すること
ができます。
4.30.7.1. キャッシュされているリポジトリ
このページでは、ローカルにキャッシュしたリポジトリの一覧を、キャッシュに使用した領域ととも
に参照できます。リポジトリを選択すると、その下のボタンを使用できます。
更新 をクリックすると、キャッシュを完全に再読込し、抜けたところを補完します。大きなリポジ
トリでは、非常に時間がかかりますが、オフラインで作業し、もっともよい状態のキャッシュが必要
な場合に便利です。
エクスポート ボタンをクリックすると、キャッシュ全体を CSV ファイルでエクスポートします。ロ
グデータを外部プログラムで処理をする際に便利ですが、主に開発者用でしょう。
削除 をクリックすると、選択したリポジトリのキャッシュデータをすべて削除します。これはその
リポジトリのキャッシュを無効にするものではなく、次回ログデータが必要になると、新しいキャッ
シュを作成します。
161
日常の使用ガイド
4.30.7.2. ログキャッシュの統計データ
図4.85 設定ダイアログのログキャッシュ統計
詳細 ボタンをクリックすると、特定のキャッシュの詳細統計を表示します。ここではたくさんの項
目が表示され、これは主に TortoiseSVN の開発者が興味を引く項目です。そのため、すべてを詳細
に説明することはしません。
RAM
このキャッシュを提供するのに必要なメモリ量です。
ディスク
キャッシュに使用するディスクスペースです。データは圧縮されますので、ディスクの使用量
は、一般的にかなり控えめになります。
接続状態
リポジトリが有効なキャッシュを、前回使用したかどうかを表示します。
最終更新日
最後にキャッシュの内容を更新した日時です。
最終取得日
サーバーから HEAD リビジョンを最後に取得した日時です。
作者
キャッシュに記録したメッセージの作者数です。
162
日常の使用ガイド
パス
svn log -v で見られるリストにある、パスの数です。
スキップ範囲
取得していないリビジョン範囲の数で、単純にリクエストしていないものです。キャッシュ内の
ホール数の尺度になります。
最大リビジョン
キャッシュに格納されている、リビジョン番号の最大値です。
リビジョン数
キャッシュに格納されているリビジョン番号の数です。キャッシュの完全性に関する別の尺度に
なります。
4.30.8. クライアント側フックスクリプト
図4.86 設定ダイアログの「フックスクリプト」ページ
このダイアログでは、Subversion のアクションに合わせて自動的に実行される、フックスクリプト
のセットアップを行えます。対照的に 「サーバー側フックスクリプト」 で説明しているフックスク
リプトは、クライアントのローカルで実行されます。
ここで言うフックは、コミット後にバージョン番号を更新するため SubWCRev.exe のようなプログラ
ムを起動したり、再構築のトリガになったりします。
なお、フックスクリプトは作業コピーの特殊なプロパティで指定することもできます。詳しく
は、「TortoiseSVN のプロジェクトプロパティ」を参照してください。
163
日常の使用ガイド
図4.87 設定ダイアログのフックスクリプトの設定
新しいフックスクリプトを追加するには、単に 追加 をクリックし、詳細を入力してください。
現在、次の種類のフックスクリプトが使用できます。
Start-commit
コミットダイアログを表示する前に呼ばれます。フックがバージョン管理下のファイルを変更し
たり、コミットするファイルのリストやコミットメッセージに影響を与える場合に使用してくだ
さい。しかし、初期の段階でフックが呼ばれるため、コミット用に選択したオブジェクトの全リ
ストは有効でないことに注意するべきです。
Manual Pre-commit
これが指定されると、コミットダイアログにフックを実行ボタンが表示され、クリックすると定
義されたフックスクリプトが実行されるようになります。フックスクリプトはチェックされた
ファイルやフォルダーすべての一覧と、入力されていればコミットメッセージを受け取ります。
Check-commit
コミットダイアログでユーザーがOKをクリックした後、コミットダイアログが閉じる前に呼ばれ
ます。このフックはチェックされたすべてのファイルの一覧を受け取ります。フックがエラーを
返すと、コミットダイアログは閉じません。
改行で区切られたパスを含むエラーメッセージが返されると、エラーメッセージ表示後に表示さ
れるコミットダイアログでこれらのパスが選択されます。
Pre-commit
コミットダイアログの OK をクリックした後、実際のコミットが始まる前に呼ばれます。この
フックは実際にコミットするファイルのリストを持ちます。
Post-commit
コミットが完了した後で(成功・失敗に関わらず)呼ばれます。
Start-update
リビジョンへの更新ダイアログが表示される前に呼ばれます。
Pre-update
実際のSubversionの更新や切り替え操作が始まる前に呼び出されます。
Post-update
更新、切り替え、チェックアウト、が終了した後に(成功したかどうかにかかわらず)呼び出さ
れます。
Pre-connect
リポジトリに接続を試みる前に呼び出されます。通常、およそ5分に1度の割合で呼び出されま
す。
164
日常の使用ガイド
フックは特定の作業コピーのパスに対して定義されます。最上位のパスのみ指定する必要がありま
す。もし、サブフォルダーを操作する場合、TortoiseSVN は自動的に上位へマッチするかどうか検索
を行います。
次に、実行するコマンドラインを、フックスクリプトや実行ファイルのパスから始めて指定する必要
があります。ここではバッチファイルや実行可能ファイル、その他の Windows と関連付けられた
ファイル(例えば
Perl
スクリプト)を指定します。なお、Windows
のセキュリティ上の制限
で、Windows は UNC パスで指定されたスクリプトを実行しないため、この形式で指定することはでき
ません。
コマンドラインには、TortoiseSVN が設定するパラメーターを含めます。呼ばれるフックによってパ
ラメーターは異なります。各フックには以下の順番で渡されるパラメーターがあります。
Start-commit
PATHMESSAGEFILECWD
Manual Pre-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.
各パラメーターの意味は以下に説明する通りです。
PATH
操作を開始したときのすべてのパスを格納した一時ファイルのパスです。各パスは、一時ファイ
ル内に 1 行ごと格納されています。
なお、操作がリモートで行われた場合(例えばリポジトリブラウザー内で)、それらのパスは
ローカルパスではなく、影響する項目のURLになります。
DEPTH
コミット・更新が完了した際の深さです。
以下のような有効な値があります。
-2
svn_depth_unknown
-1
svn_depth_exclude
0
svn_depth_empty
1
svn_depth_files
165
日常の使用ガイド
2
svn_depth_immediates
3
svn_depth_infinity
MESSAGEFILE
コミット用のログメッセージを格納しているファイルのパスです。このファイルには、UTF-8 エ
ンコードのテキストが格納されています。start-commit フックの実行が完了すると、ログメッ
セージを読み返し、フックが変更する機会を与えます。
REVISION
更新したりコミットが完了したときの、リポジトリのリビジョンです。
ERROR
エラーメッセージを含むファイルのパスです。エラーがない場合、このファイルは空になりま
す。
CWD
スクリプトを実行する現在の作業ディレクトリです。これはすべてに影響を与えるパスの、共通
のルートディレクトリに設定されます。
RESULTPATH
操作によって何らかの変更があったすべてのパスを含む一時ファイルのパス名です。一時ファイ
ル内ではパスが改行区切りで記述されます。
便宜上パラメーターに名前を付けましたが、フックの設定で、その名前を参照する必要はないことに
注意してください。個々のフックに挙げたパラメーターはすべて、好むと好まざるとに関わらず常に
渡されます ;-)
Subversion の操作を、フックスクリプトが完了するまで止めておきたい場合は、スクリプトが終了
するまで待機 をチェックしてください。
通常、スクリプト実行時に不格好な DOS ウィンドウを隠しておきたいと思います。 そのため 実行時
はスクリプトを非表示にする をデフォルトでチェックしてあります。
クライアントフックスクリプトのサンプルは、 TortoiseSVN リポジトリ [https://svn.code.sf.net/
p/tortoisesvn/code/trunk/contrib/hook-scripts] サイトの contrib フォルダーから入手できます
(リポジトリへのアクセス方法は、 「ライセンス」 をご覧ください。)
フックスクリプトをデバッグするとき、DOSコンソールに実行中の行を表示したり、スクリプトが実
行完了したときにウィンドウが閉じるのを防ぐためにpauseを挿入したりしたくなったりすることが
あるでしょう。入出力がリダイレクトされているため、これは正しく動作しません。しかし、入出力
を明示的にCONにリダイレクトすることはできます。例えば、
echo Checking Status > con
pause < con > con
TortoiseSVN のインストールディレクトリに、 ConnectVPN.exe という小さいツールが含まれていま
す。このツールを pre-connect フックとして使用すると、 TortoiseSVN がリポジトリにアクセスし
ようとする前に、自動的に VPN に接続できるようになります。ツールの最初の引数として、 VPN 接
続の名前を渡すようにしてください。
4.30.8.1. 課題追跡システムとの統合
TortoiseSVN
は、コミットダイアログで課題管理システムにクエリを発行するために、COM
プ
ラグインを使用できます。そのようなプラグインの使用を、
「課題追跡システムからの情報取
得」 で説明しています。システム管理者が、すでにインストールして登録したプラグインを提供し
ている場合、どのように作業コピーと統合するかをここで指定します。
166
日常の使用ガイド
図4.88 設定ダイアログの「課題追跡システムとの統合」ページ
特定の作業コピーでプラグインを使用するには、追加...
をクリックしてください。ここで作業コ
ピーのパス、登録済み課題管理システムプラグインのドロップダウンリストでの選択、渡す任意のパ
ラメーターの指定ができます。パラメーターはプラグインに固有ですが、自分に割り当てられた課題
をプラグインが抽出できるように、課題管理システムのユーザー名を含めるかも知れません。
プロジェクトのすべてのユーザーで同じ
COM
プラグインを使用する場合
は、bugtraq:provideruuid、bugtraq:provideruuid64、bugtraq:providerparamsをプロパティとして
設定することができます。
bugtraq:provideruuid
IBugtraqProvider の COM UUID (例えば、{91974081-2DC7-4FB1-B3BE-0DE1C8D6CE4E})を指定し
ます。(この例は Google Code [http://code.google.com/hosting/] の課題管理システム向けプ
ロバイダーである Gurtle bugtraq provider [http://code.google.com/p/gurtle/] の UUID で
す)。
bugtraq:provideruuid64
これは bugtraq:provideruuid と同様ですが、64ビット版の IBugtraqProvider です。
bugtraq:providerparams
このプロパティは、IBugtraqProvider に渡すパラメーターを指定します。
2つのプロパティに何を設定するか調べるには、 IBugtraqProvider プラグインのドキュメントを参
照してください。
167
日常の使用ガイド
4.30.9. TortoiseBlame の設定
図4.89 設定ダイアログの「TortoiseBlame」ページ
TortoiseBlame で使用する設定は、TortoiseBlame 自体ではなく、メインのコンテキストメニューか
ら設定します。
色
TortoiseBlame では、ファイルにある行の古さを背景色で表現します。ここでは、最新と最古の
両端のリビジョンの色を指定します。 TortoiseBlame はこの 2 色の中間色を使用して、行単位
のリポジトリのリビジョンを表現します。
表示位置調整バーで使用する差分の色を指定することができます。デフォルトでは、メインウィ
ンドウで文字を読みやすいよう背景の明るさを維持
しながら、表示位置調整バーと強いコントラストをなす色が使われています。
フォント
ここでは、テキストを表示するフォントとポイントサイズを指定できます。ここで指定された
フォントは、ファイルの内容と、左画面に表示する作者とリビジョンの両方に使用されます。
タブ
ファイルの内容にタブ文字があった場合、空白を何文字使用して展開するかを定義します。
168
日常の使用ガイド
4.30.10. TortoiseUDiff設定
図4.90 設定ダイアログの「TortoiseUDiff」ページ
TortoiseUDiffで使用する設定は、TortoiseUdiff自体ではなく、メインのコンテキストメニューから
設定します。
色
TortoiseUDiffのデフォルト色はふつう良いのですが、ここで設定することができます。
フォント
画面に表示される文字列のフォントや大きさ(ポイント単位)を選択できます。
タブ
差分の内容にタブ文字があった場合、空白を何文字使用して展開するかを定義します。
169
日常の使用ガイド
4.30.11. TortoiseSVN の設定のエクスポート
図4.91 設定ダイアログの「同期」ページ
TortoiseSVNのすべての設定を、暗号化ファイルと同期させることができます。ファイルは入力した
パスワードで暗号化されるので、OneDriveやGDriveやDropBoxのようなクラウドフォルダーに入れて
も心配ありません。 You can sync all TortoiseSVN settings to and from an encrypted file. The
file is encrpyted 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は自動的にすべての設定を同期し、その後も同期し
続けます。
すべての設定を手動で暗号化ファイルにエクスポートしたり、暗号化ファイルからインポートしたり
することもできます。その場合、パスと設定ファイルの暗号化処理のためのパスワードを尋ねられま
す。
設定を手動でエクスポートするとき、通常のエクスポートや同期では含まれないすべてのローカル設
定を含めることもできます。ローカル設定はローカルパスを含みますが、これはふつうコンピュー
ター間で異なります。ローカル設定は差分・マージツールの設定やフックスクリプトを含みます。
4.30.12. 高度な設定
使用頻度の低い一部の設定は、設定ダイアログの高度な設定ページでのみ設定できます。これらの設
定はレジストリを直接操作するので、それぞれの設定が何をするのかを理解しておく必要がありま
す。これらの変更がどうしても必要な場合を除いて、これらの設定を変更しないでください。
AllowAuthSave
同じコンピューター上で、複数のユーザーが同じアカウントを使用していることがあります。こ
のような場合、認証データを保存すべきでないことがあります。この値を false にせ底すると、
認証ダイアログの認証を保存ボタンを無効にすることができます。
170
日常の使用ガイド
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
になります。
171
日常の使用ガイド
DiffBlamesWithTortoiseMerge
TortoiseSVN は外部の差分ビューアーを使用することができます。しかし、多くのビューアーに
は注釈履歴 (「注釈履歴の差分」)が統合されていませんので、その場合はTortoiseMerge に戻
したくなることもあるでしょう。そのためには、この値をtrueに設定してください。
DlgStickySize
この値はダイアログが境界にくっつく際の接近距離をピクセル数で指定します。既定値は3で
す。この値を無効にするには、0に設定してください。
FixCaseRenames
アプリケーションによっては、必要でもないのに勝手に、通知なしでファイル名の大文字/小文
字を変えてしまうものがあります。例えば、 file.txt が FILE.TXT に変わっても、 Windows ア
プリケーションでは困りませんが、 Subversion ではこのような場合にも大文字/小文字を区別し
てしまいます。そのため、 TortoiseSVN ではこのような大文字/小文字の変更を自動的に修正し
ます。
もし、 TortoiseSVN が自動的に大文字/小文字の修正を行ってほしくない場合、この値を false
に設定してください。
FullRowSelect
様々なダイアログ(例えばコミット、変更をチェック、追加、変更の取り消し、など)のリスト
コントロールを、全行選択(つまり、項目を選択する際に、最初のカラムではなく行全体を選択
すること)にします。これは使いやすいのですが、行全体が反転するため、右下の背景画像に重
なると醜くなってしまうことがあります。全行選択を解除する場合は、この値を false に設定し
てください。
GroupTaskbarIconsPerRepo
このオプションは、様々なTortoiseSVNのダイアログやウィンドウが、Windows 7のタスクバー内
でグループ化される方法を決定します。このオプションは、Vistaでは効果がありません。
1. 既定値は0です。この設定では、アイコンがアプリケーションの種類によってグループ化され
ます。TortoiseSVNのすべてのダイアログがひとつにグループ化され、TortoiseMergeのすべて
のウィンドウがひとつにグループ化される・・・という形です。
図4.92 タスクバーでのデフォルトのグループ化
2. 1に設定すると、すべてのダイアログがアプリケーション単位ではなく、リポジトリ単位でグ
ループ化されます。たとえば、リポジトリAのログダイアログとコミットダイアログが開いて
いて、リポジトリBの変更のチェックダイアログとログダイアログが開いていた場合、Windows
7のタスクバーには2つのアプリケーションアイコングループが表示され、それぞれリポジト
リごとにグループ化されます。但し、TortoiseMergeのウィンドウは、TortoiseSVNのダイアロ
グと同じグループにはなりません。
図4.93 タスクバーでのリポジトリ毎のグループ化
3. 2に設定すると、1に設定した場合と同様にグループ化されますが、
TortoiseSVN、
TortoiseMerge、 TortoiseBlame、 TortoiseIDiff、 TortoiseUDiff のウィンドウも一緒にグ
ループ化されます。たとえば、コミットダイアログが開いているときに変更されたファイルを
ダブルクリックした場合、 TortoiseMerge の差分ウィンドウが開きますが、タスクバー上で
はコミットダイアログと同じアイコングループに含められます。
172
日常の使用ガイド
図4.94 タスクバーでのリポジトリ毎のグループ化
4. 3に設定すると、1に設定した場合と同様にグループ化されますが、リポジトリごとではなく作
業コピーごとにグループ化されます。これは、同じリポジトリですべてのプロジェクトを管理
し、プロジェクトごとに異なる作業コピーを使用している場合に便利です。
5. 4に設定すると、2に設定した場合と同様にグループ化されますが、リポジトリごとではなく作
業コピーごとにグループ化されます。
HideExternalInfo
falseに設定すると、すべてのsvn:externalsがアップデート中に個別に表示されます。
trueに設定した場合(デフォルト)、外部参照の更新情報が更新の影響を受けたかどうかのみ
(何かが変更された等)が表示されます。通常のファイルやフォルダーの情報は表示されませ
ん。
GroupTaskbarIconsPerRepoOverlay
GroupTaskbarIconsPerRepo オプションを0に設定した場合は、効果がありません(上記参照)。
このオプションを true に設定すると、 Windows 7 のタスクバーにはダイアログやウィンドウで
使用されているリポジトリを識別するための、色のついた四角の小さいオーバーレイが表示され
ます。
図4.95
様子
タスクバーでのグループ化にリポジトリのカラーオーバーレイが付いた
IncludeExternals
デフォルトでは、 TortoiseSVN は常に外部参照を含めて更新を行います。これは作業コピーの一
貫性の問題を回避することができます。しかし、外部参照のセットが多い場合、更新に時間がか
かるようになります。この値をfalseに設定すると、デフォルトでは外部参照を含めずに更新さ
れるようになります。外部参照を含めて更新するには、特定リビジョンへ更新...を実行する
か、この値を再びtrueに設定します。
LogMultiRevFormat
ログダイアログで複数のリビジョンが選択された時のログメッセージの書式文字列です。
書式文字列では、次のプレースホルダーを利用できます。
%1!ld!
リビジョン番号に置換されます
%2!s!
リビジョンの短いログメッセージに置換されます
173
日常の使用ガイド
LogStatusCheck
ログダイアログでは、作業コピーのリビジョンを太字で表示します。しかし、ログダイアログが
パスの状態を確認する必要があります。そのため、非常に大きい作業コピーでは時間がかかりま
す。この値を false に設定すると、この機能を無効にすることができます。
MergeLogSeparator
別のブランチからのリビジョンをマージし、マージ追跡情報が使用可能になると、マージされた
リビジョンのログメッセージは、コミット時のログメッセージを構成するために収集されます。
各リビジョンの個々のログメッセージは、あらかじめ定義された区切り文字列で区切られます。
必要に応じて、任意の区切り文字列を指定してください。
NumDiffWarning
ここに指定された数よりも多くの項目の差分を表示しようとした場合、警告ダイアログが最小に
表示されます。既定値は10です。
OldVersionCheck
TortoiseSVN は週に一度、新しいバージョンが出ているかどうかをチェックします。新しいバー
ジョンが見つかると、コミットダイアログにリンクコントロールが表示されます。 true に設定
すると、以前のようにアップデートを通知ダイアログで行うようになります。
RepoBrowserTrySVNParentPath
リポジトリブラウザーは、すべてのリポジトリの一覧を取得するために、SVNサーバーが
SVNParentPathディレクティブの指定に従って作成するウェブページにアクセスを試みます。こ
の動作を無効にするには、この値をfalseに設定して下さい。
ScintillaDirect2D
このオプションは、コミットダイアログやunified差分ビューアーなどで使用されている
Scintillaコントロールで、Direct2Dによるアクセラレーション描画を有効にします。一部のグ
ラフィックカードでは、文字を入力するカーソルが表示されっぱなしになるなどの不具合が発生
します。このような場合、この値をfalseにすることでこの機能を無効にしてください。
OutOfDateRetry
作業コピーが最新ではないとエラーが表示された後で、TortoiseSVN が作業コピーを更新するか
どうかユーザーに自動的に確認させたくない場合はこの値を false に設定してください。
ShellMenuAccelerators
TortoiseSVN はエクスプローラーのコンテキストメニュー項目に設定されているアクセラレータ
を使用します(例えば SVN コミット のアクセラレータは Alt+C ですが、エクスプローラーの
コピー 項目と重複します)。 TortoiseSVN のエントリでアクセラレータを設定する必要がない
場合は false に設定してください。
ShowContextMenuIcons
これは Windows エクスプローラー以外のものを使用したり、コンテキストメニューが正しく表示
できないといった問題が発生したりしたときに便利です。 false に設定すると、シェルのコンテ
キストメニューに TortoiseSVN のアイコンが表示されなくなります。アイコンを表示する場合
は、true を設定してください。
ShowAppContextMenuIcons
false に設定すると TortoiseSVN のダイアログで、コンテキストメニューのアイコンが表示され
なくなります。.
StyleCommitMessages
コミットダイアログとログダイアログでは、コミットメッセージに装飾(例えばボールド、イタ
リックなど)を使います(詳しくは 「コミットログメッセージ」 を参照してください)。これ
を無効にしたい場合は false に設定してください。
UpdateCheckURL
この値は、TortoiseSVN が有効なアップデートがあるかどうかを検査するためのテキストファイ
ルをダウンロードする URL です。企業の管理者が通知するまでユーザーに TortoiseSVN をアッ
プデートさせたくない場合などに有効です。
174
日常の使用ガイド
VersionCheck
TortoiseSVN
は週に一回程度、使用可能な新しいバージョンがあるかどうかを確認します。
TortoiseSVN にこのチェックを行わせたくない場合は、この値を false に設定してください。
4.31. 最終ステップ
寄付をお願いします
TortoiseSVNとTortoiseMergeはフリーですが、パッチを送ったり、開発の中で重要な役割を
担ったりして、開発者をサポートすることができます。また、コンピューターの前で延々と時
間を過ごす私たちを応援することができます。
TortoiseSVNで作業している間、私たちは音楽を聴くのが大好きです。我々はプロジェクトに多
くの時間を費やしているため、多くの音楽が必要です。そこで、私たちの好きな音楽のCDやDVD
のウィッシュリストを、 http://tortoisesvn.net/donate.html で公開しています。また、
パッチや翻訳を提供してプロジェクトに貢献している人のリストもご覧ください。
175
第5章 プロジェクトモニター
プロジェクトモニターは、リポジトリを監視して新しいコミットがあった時に通知する便利なツール
です。
プロジェクトは作業コピーのパスかリポジトリのURLで監視することができます。
プロジェクトモニターは設定された時間ごとにプロジェクトをスキャンし、新しいコミットが検出さ
れた際に通知ポップアップを表示します。また、システムトレイにアイコンを表示し、新しいコミッ
トがあることを通知します。
Snarl
もし Snarl [http://snarl.fullphat.net/] が実行中の場合、プロジェクトモニターは新
しいコミットの検知を通知するために自動的に Snarl を利用します。
5.1. プロジェクトをモニターに追加
プロジェクトモニターを初めて使用するとき、左側のツリービューは空です。プロジェクトを追加す
るには、ダイアログの上にあるプロジェクトを追加と書かれたボタンをクリックしてください。
図5.1 プロジェクトモニターのプロジェクトの編集ダイアログ
監視するプロジェクトを追加するには、必要な項目を入力してください。プロジェクトの名称は必須
ですが、それ以外の情報は任意です。
パスまたはURLのボックスが空欄の場合、フォルダーが追加されます。これはグループを監視するプ
ロジェクトで有用です。
ユーザー名とパスワードの欄はリポジトリが匿名読み取りアクセスを許可していない場合で、認証情
報がSubversion自身に格納されていない場合にのみ入力する必要があります。TortoiseSVNやその他
のSVNクライアントで監視されているリポジトリにアクセスしている場合で、すでに認証情報が格納
176
プロジェクトモニター
されている場合、ここは空欄にしてください。パスワードが変更された際に、プロジェクトを編集す
る必要はありません。
監視間隔(分) は監視する間の待ち時間を指定します。最小間隔は1分です。
チェック間隔
もし多数のユーザーが同じリポジトリを監視しており、サーバーの帯域幅に制限がある
場合、リポジトリの管理者は最短の確認の間隔を svnrobots.txt で指定することができ
ます。詳細についてはプロジェクトモニターの Web サイトで確認してください。
http://stefanstools.sourceforge.net/svnrobots.html
stefanstools.sourceforge.net/svnrobots.html]
[http://
5.2. モニターダイアログ
図5.2 プロジェクトモニターのメインダイアログ
プロジェクトモニターは監視中のプロジェクトを左のツリービューに表示します。プロジェクトは移
動することが可能で、例えばあるプロジェクトを他のプロジェクトの下位に移動して、子プロジェク
トや下位プロジェクトにすることができます。
右側のプロジェクトをクリックすると、プロジェクトのすべてのログメッセージが表示されます。
更新されたプロジェクトは太字で表示され、新しいコミットの回数が右側のカッコ内に表示されま
す。プロジェクトをクリックすると、自動的に既読になります。
5.2.1. 主な操作
ダイアログ上部のツールバーからプロジェクトモニターの操作や設定が可能です。
今すぐチェック
設定された間隔でプロジェクトを監視している際、このボタンを押すことで直ちに全てのプロ
ジェクトを確認します。もし更新が見つかった場合でも、全てのプロジェクトの確認が終了する
までは通知が表示されないことに注意してください。
177
プロジェクトモニター
プロジェクトを追加
監視を始めるプロジェクトを追加するダイアログを表示します。
編集
選択されたプロジェクトの設定ダイアログを表示します。
削除
確認ダイアログを表示した後、選択されたプロジェクトを削除します。
すべて確認済みにする
すべてのプロジェクトのすべてのリビジョンを確認済みにします。未確認のリビジョンを含むプ
ロジェクトを選択後に別のプロジェクトを選択すると、自動的にすべて確認済みになることに注
意してください。
Shift
す。
キーを押しながらボタンをクリックすると、すべてのエラー状態も併せてクリアされま
すべて更新
すべてのモニター中の作業コピーについてUpdateを実行します。URLでモニターされているプロ
ジェクトは更新されず、作業コピーのパスが設定されているもののみです。
オプション
プロジェクトモニターの動作を設定するダイアログを表示します。
178
第6章 SubWCRev プログラム
SubWCRev は、Subversion の作業コピーの状態を読み取り、オプションでテンプレートファイルの
キーワード置換を行うのに使用する、Windows コンソールアプリケーションです。ビルドプロセスの
一部として、ビルドするものに作業コピーの情報を組み込むのにしばしば使用します。典型的なの
は、「About」 ボックスにリビジョン番号を含めるのに使用することでしょう。
6.1. SubWCRev コマンドライン
SubWCRevは、デフォルトで作業コピーの外部参照を除いた全ファイルの Subversion の状態を読み込
みます。検出した最も大きいコミットリビジョン番号を記録し、そのリビジョンのコミットのタイム
スタンプが、それはまた、作業コピーの変更、または更新リビジョンが混在しているかどうかを記録
します。リビジョン番号や更新リビジョン範囲、変更状態を標準出力に出力します。
SubWCRev.exeはコマンドラインやスクリプトから呼び出されます。制御にはコマンドラインパラメー
ターを使用します。
SubWCRev WorkingCopyPath [SrcVersionFile DstVersionFile] [-nmdfe]
WorkingCopyPath はチェックする作業コピーのパスです。SubWCRev は作業コピーのみで使用でき、
直接リポジトリを扱えません。作業コピーへのパスは、絶対パス、相対パスどちらでもかまいませ
ん。
リポジトリリビジョンや
URL
といったフィールドをテキストファイルに保存するた
め、SubWCRev がキーワード置換を行うようにしたい場合があります。その場合、テンプレートファ
イル SrcVersionFile や、テンプレートの置換バージョンを含む出力ファイル DstVersionFile を用
意する必要があります。
SubWCRevの無視パターンを設定すると、特定のファイルやパスを確認の対象から除外することができ
ます。パターンは.subwcrevignoreという名前のファイルから読み込まれます。このファイルは特定
のパスや、作業コピーのルートからも読み込まれます。このファイルがない場合は、ファイルやパス
は無視されません。.subwcrevignoreファイルには、改行区切りで複数のパターンを記述できます。
パターンはリポジトリルートからの相対パスとして比較されます。例えば、TortoiseSVNの作業コ
ピーにあるdocフォルダー内のすべてのファイルを無視するには、.subwcrevignoreファイルの中に次
のような行を入れてください。
/trunk/doc
/trunk/doc/*
すべての画像を無視するには、無視するパターンを次のように設定できます。
*.png
*.jpg
*.ico
*.bmp
重要
Subversionと同様に、無視パターンは大文字と小文字を区別します。
ヒント
Windowsのエクスプローラーでピリオドで始まるファイルを作成するに
は、.subwcrevignore.と入力してください。最後にピリオドがあることに注意してくだ
さい。
179
SubWCRev プログラム
SubWCRev の動作に影響を与えるオプションスイッチが多数あります。複数を使用する場合は、1つ
にグループ化して指定する必要があります。例えば、 -n -m ではなく、 -nm と指定します。
切り替え
説明
-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 は標準出力に作業コピーの状態を表示
せずにキーワード置換を行います。
表6.1 使用できるコマンドラインスイッチ一覧
エラーがない場合、SubWCRevは0を返します。しかしエラーが発生した場合は、標準エラー出力(コ
ンソール)にエラーメッセージが出力されます。そして、
エラーコード
説明
1
文法エラー。1つまたは複数のコマンドライン引数が無効です。
2
コマンドラインで指定されたファイルまたはフォルダーが見つかりません。
3
入力ファイルが開けないか、ターゲットファイルが作成できません。
4
メモリを確保できません。これは、ソースファイルが大きすぎる場合などに発生
する可能性があります。
5
ソースファイルのプロパティをスキャンできません。
6
SVNエラー: SubWCRevが作業コピーから情報を検索しようとする際に、Subversion
がエラーで復帰しました。
7
作業コピーはローカルで変更されました。この場合は-nスイッチが必要です。
8
作業コピーに複数のリビジョンが混在しています。この場合は-mスイッチが必要
です。
180
SubWCRev プログラム
エラーコード
説明
9
出力ファイルが既に存在しています。この場合は-dスイッチが必要です。
10
指定されたパスは作業コピーやその一部を指すものではありません。
11
作業コピーにバージョン管理外のファイルやフォルダーが含まれています。-Nス
イッチが必要です。
表6.2 SubWCRevのエラーコードの一覧
のエラーが返却されます。
6.2. キーワード置換
元ファイルと先ファイルを与えると、SubWCRev
ワード置換を行いながらコピーします。
は元ファイルから先ファイルへ、以下のようにキー
キーワード
説明
$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$ のようになります。使用することができる書式文字のリスト
については、オンライン参照 [http://msdn.microsoft.com/ja-jp/
library/fe06s4ak%28VS.100%29.aspx]を参照してください。
$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 に置き換わります。
181
SubWCRev プログラム
キーワード
説明
$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に置換
されます。
表6.3 利用可能なキーワードの一覧
SubWCRev は式のネストを直接サポートしていません。たとえば、次のような式は使用することがで
きません。
#define SVN_REVISION "$WCMIXED?$WCRANGE$:$WCREV$$"
しかし、次のように形式を変更すれば使用することができます。
#define SVN_RANGE
#define SVN_REV
#define SVN_REVISION
$WCRANGE$
$WCREV$
"$WCMIXED?SVN_RANGE:SVN_REV$"
ヒント
以上のキーワードのうちいくつかは、作業コピー全体というよりも、単一ファイルに適
用されます。そのため、単一ファイルを走査するよう SubWCRev が呼ばれたときにのみ使
用する意味があります。これは $WCINSVN$, $WCNEEDSLOCK$, $WCISLOCKED$, $WCLOCKDATE
$, $WCLOCKOWNER$ and $WCLOCKCOMMENT$ に適用します。
6.3. キーワード例
以下のサンプルは、テンプレートファイル内のキーワードが、どのように出力ファイルへ置換される
かを示します。
// Test file for SubWCRev
char
char
char
char
char
char
char
char
*Revision
*Revision16
*Revisionp100
*Revisionm100
*Modified
*Unversioned
*Date
*CustDate
=
=
=
=
=
=
=
=
"$WCREV$";
"$WCREV&0xFF$";
"$WCREV+100$";
"$WCREV-100$";
"$WCMODS?Modified:Not modified$";
"$WCUNVER?Unversioned items found:no unversioned items$";
"$WCDATE$";
"$WCDATE=%a, %d %B %Y$";
182
SubWCRev プログラム
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
*DateUTC
*CustDateUTC
*TimeNow
*TimeNowUTC
*RevRange
*Mixed
*ExtAllFixed
*IsTagged
*URL
*isInSVN
*needslck
*islocked
*lockdateutc
*lockdate
*lockcustutc
*lockcust
*lockown
*lockcmt
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
"$WCDATEUTC$";
"$WCDATEUTC=%a, %d %B %Y$";
"$WCNOW$";
"$WCNOWUTC$";
"$WCRANGE$";
"$WCMIXED?Mixed revision WC:Not mixed$";
"$WCEXTALLFIXED?All externals fixed:Not all externals fixed$";
"$WCISTAGGED?Tagged:Not tagged$";
"$WCURL$";
"$WCINSVN?versioned:not versioned$";
"$WCNEEDSLOCK?TRUE:FALSE$";
"$WCISLOCKED?locked:not locked$";
"$WCLOCKDATEUTC$";
"$WCLOCKDATE$";
"$WCLOCKDATEUTC=%a, %d %B %Y$";
"$WCLOCKDATE=%a, %d %B %Y$";
"$WCLOCKOWNER$";
"$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
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
char
*Revision = "22837";
*Revision16 = "53";
*Revisionp100 = "22937";
*Revisionm100 = "22737";
*Modified = "Modified";
*Unversioned = "no unversioned items";
*Date = "2012/04/26 18:47:57";
*CustDate = "Thu, 26 April 2012";
*DateUTC = "2012/04/26 16:47:57";
*CustDateUTC = "Thu, 26 April 2012";
*TimeNow = "2012/04/26 20:51:17";
*TimeNowUTC = "2012/04/26 18:51:17";
*RevRange = "22836:22837";
*Mixed = "Mixed revision WC";
*ExtAllFixed = "All externals fixed";
*IsTagged = "Not tagged";
*URL = "https://svn.code.sf.net/p/tortoisesvn/code/trunk";
*isInSVN = "versioned";
*needslck = "FALSE";
*islocked = "not locked";
*lockdateutc = "1970/01/01 00:00:00";
*lockdate = "1970/01/01 01:00:00";
*lockcustutc = "Thu, 01 January 1970";
*lockcust = "Thu, 01 January 1970";
*lockown = "";
*lockcmt = "";
183
の実行後、出力ファイル
SubWCRev プログラム
#if 1
#error Source is modified
#endif
// End of file
ヒント
このようなファイルがそのビルドに含まれるため、そのファイルがバージョン管理され
ていると思われるでしょう。バージョン管理下にあるのはテンプレートファイルであっ
て、生成したファイルではありません。そうでなければ、 バージョンファイルを生成す
るたびに変更をコミットしなければなりません。そして順次バージョンファイルを更新
しなければなりません。
6.4. COM インターフェイス
他のプログラムから Subversion のリビジョン情報にアクセスする必要がある場合、SubWCRev のCOM
インターフェイスを使用できます。作成するオブジェクトは SubWCRev.object で、以下のメソッド
をサポートしています。
メソッド
説明
.GetWCInfo
この方法は作業コピーを横断してリビジョン情報を集めます。当
然、以下のメソッドを呼び出す前に、これを呼び出さなくてはなり
ません。第 1 引数はパスです。第 2 引数は、フォルダーのリビジョ
ンを含める場合に true としてください。コマンドラインスイッチ f と等価です。第 3 引数は、svn:externals を含める場合に true
としてください。コマンドラインスイッチ -e と等価です。
.GetWCInfo2
GetWCInfo() と同様ですが、第4引数は -E スイッチに設定した場合
と等価になります。
.Revision
最新コミット時の作業コピーのリビジョンです。$WCREV$と同じで
す。
.Date
最新コミット時のコミット日時です。$WCDATE$ と同じです。
.Author
もっとも大きいコミットリビジョン番号の作者。これは変更した作
業コピーを最後にコミットした人などです。
.MinRev
$WCRANGE$ で参照できる更新リビジョンの最小値
.MaxRev
$WCRANGE$ で参照できる更新リビジョンの最大値
.HasModifications
ローカルに変更がある場合 True
.HasUnversioned
バージョン管理外の項目がある場合はtrue
.Url
GetWCInfoで使用された作業コピーのリポジトリ上のURLに置き換わ
ります。$WCURL$と同じです。
.IsSvnItem
項目がバージョン管理下にあると True になります。
.NeedsLocking
項目に svn:needs-lock プロパティがセットされていれば True にな
ります。
.IsLocked
項目がロックされていると True になります。
.LockCreationDate
ロック日時を表す文字列です。ロックされていない場合は空文字列
となります。
.LockOwner
ロック所有者を表す文字列です。ロックされていない場合は空文字
列となります。
.LockComment
ロック作成時に入力したコメントです。
表6.4 COM オートメーションのサポート
184
SubWCRev プログラム
以下のサンプルでは、どのようにインターフェイスを使用するべきかを示しています。
// testCOM.js - javascript file
// test script for the SubWCRev COM/Automation-object
filesystem = new ActiveXObject("Scripting.FileSystemObject");
revObject1
revObject2
revObject3
revObject4
=
=
=
=
new
new
new
new
ActiveXObject("SubWCRev.object");
ActiveXObject("SubWCRev.object");
ActiveXObject("SubWCRev.object");
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 = " +
185
SubWCRev プログラム
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("バージョン管理対象外");
}
186
第7章 IBugtraqProvider インターフェイス
シンプルな
bugtraq:
プロパティを使用するよりも、より密接に課題管理システムと統合するた
め、TortoiseSVN は COM プラグインを使用できます。課題管理システムから直接情報を取得できるプ
ラグインとともに使用することでユーザーとやりとりし、TortoiseSVN への未クローズ問題の情報提
供やユーザーが入力したログメッセージの検証、さらに問題のクローズといったコミット完了後の処
理実行までも行うことができます。
私たちは、各プログラミング言語で COM オブジェクトを実装する方法について、情報やチュートリ
アルを提供することはできませんが、 C++/ATL と C# で書かれたプラグインのサンプルを、私たちの
リポジトリの contrib/issue-tracker-plugins フォルダーで提供しています。そのフォルダーから
も、プラグインを作成するのに必要なインクルードファイルを入手することができます(リポジトリ
にアクセスする方法は、 「ライセンス」 を参照してください)。
重要
プラグインは32ビット版と64ビット版の両方を提供する必要があります。 TortoiseSVN
の x64 バージョンでは32ビットのプラグインを使用することができませんし、その逆も
同様です。
7.1. 命名規則
もし
TortoiseSVN
用の問題追跡プラグインをリリースするならば、Tortoise<何とか>とい
う名前は使用しないでください。私たちはTortoiseというプレフィックスを、
Windows
に統
合するバージョン管理クライアントのために予約しておきたいのです。例えば、TortoiseCVS
や
TortoiseSVN、TortoiseHg、TortoiseGit、TortoiseBzr など、いずれもバージョン管理クライアント
です。
Tortoise クライアントのプラグインは、Turtle<何とか> と命名してください。 <何とか> は、接続
する問題解決システムの名前になります。または、 Turtle と似た発音で、頭文字が異なる言葉を使
用しても結構です。例えば、
• Gurtle - Google code のための問題追跡プラグイン
• TurtleMine - Redmine のための問題追跡プラグイン
• VurtleOne - VirsionOne のための問題追跡プラグイン
が良い例です。
7.2. 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
187
IBugtraqProvider インターフェイス
);
このメソッドは、ユーザーがプラグインを追加・設定できる設定ダイアログから呼び出されます。
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 の文字列は、コミットダイアログを表示するために選択されたすべての項目の親のパス
が入っています。これは、ユーザーがコミットダイアログで選択した全項目のルートパスではないこ
とに注意してください。ブランチ/タグダイアログの場合、これはコピーされるパスです。
188
IBugtraqProvider インターフェイス
pathList パラメーターは、ユーザーがコミットのために選択したパス(文字列)の配列をが含まれ
ています。
originalMessageパラメーターは、コミットダイアログのログメッセージボックスに入力したテキス
トが含まれています。ユーザーはまだ何もテキストを入力していない場合、この文字列は空になりま
す。
newMessageに返された文字列は、コミットダイアログのログメッセージのエディットボックスにコ
ピーされ、すでに何が書かれていてもそれを置き換えます。プラグインが originalMessage を変更
しなかった場合、ここでは同じ文字列を返却する必要があります。そうしなければ、ユーザーが入力
した文字列は失われます。
7.3. 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のドキュメントを参照してください。
189
IBugtraqProvider インターフェイス
commonURLパラメーターは、コミットダイアログを表示するために選択されたすべての項目の親URLで
す。これは基本的には commonRoot パスのURLです。
bugID パラメーターは、 bug-ID フィールドの内容が内容が含まれています(bugtraq:messageプロパ
ティの設定により、表示される場合)。
返却パラメーターbugIDOutは、メソッドから戻るときにbug-ID
ます。
フィールドを埋めるために使用され
revPropNames や revPropValues 出力パラメーターには、コミット時に設定されるリビジョンのプロ
パティの名前と値のペアを入れることができます。プラグインは、両方の配列が同じサイズであるこ
とを確認する必要があります。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,
190
IBugtraqProvider インターフェイス
// 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 のメソッドに渡されます。
191
付録A よくある質問(FAQ)
TortoiseSVNは全力を費やして開発しているので、ドキュメントを完全な状態で維持し続けるのは困
難です。私たちは
TortoiseSVN
のメーリングリストである<[email protected]>
や
<[email protected]>
でよく尋ねられる質問を、
オンラインFAQ
[http://
tortoisesvn.net/faq.html] に公開しています。
私たちは、プロジェクトの
課題追跡ツール
[https://sourceforge.net/p/tortoisesvn/
tickets/] も維持管理しています。これで私たちのTo-Doリスト上にあるものの一部や、既に修正さ
れたバグについて説明しています。バグを発見した場合や、新しい機能を要求する場合、他の誰かが
すでに報告していないかを確認するためにまずここをチェックしてください。
回答が得られていない質問がある場合は、次のメーリングリストのいずれかに質問をしてください。
• TortoiseSVN
を使用するにあたって質問がある場合に使用する場合は、
<[email protected]> にメールを送付してください。
• TortoiseSVN の開発に協力して下さる場合は、 <[email protected]> 上で議論に参加し
てください 。
• TortoiseSVN
のユーザーインターフェイスやドキュメントの翻訳を支援して下さる場
合、<[email protected]>に電子メールを送信 してください。
192
付録B こんなときは……
この付録には TortoiseSVN を使用する際の問題や疑問に対する解決法があります。
B.1. 大量のファイルの同時移動・コピー
ひとつのファイルを移動・コピーするには、TortoiseSVN → 名前を変更... でできます。しかし、こ
の方法でたくさんのファイルを移動・コピーするには、とても遅くたくさん手を動かさなければなり
ません。
お勧めの方法は、ファイルを新しい場所に右ドラッグすることです。単にファイルの上で右クリック
し、マウスボタンを押したままにします。その後、新しい場所にファイルをドラッグし、マウスボタ
ンを離します。コンテキストメニューが表示されるので、コンテキストメニュー → SVN バージョン
管理下の項目をここにコピーする か コンテキストメニュー → SVN バージョン管理下の項目をここに
移動する を選択します。
B.2. ログメッセージの入力の強制
ログメッセージを空にしてコミットするのを防ぐには、2つ方法があります。TortoiseSVN 特有の方
法と、Subversion クライアント全てで使用できる方法ですがサーバーに直接アクセスできる必要が
あります。
B.2.1. サーバー上のフックスクリプト
リポジトリサーバーに直接アクセスできるのならば、コミット時のログメッセージが、空だったり短
すぎると拒否するような pre-commit フックスクリプトをインストールすればいいのです。
サーバーのリポジトリフォルダーには、hooks というフックスクリプトのサンプルがあるサブフォル
ダーがあります。pre-commit.tmpl ファイルは、ログメッセージがなかったり短すぎる場合にコミッ
トを拒否するサンプルスクリプトです。このファイルにはこのスクリプトをインストールし使用する
方法も書かれています。このファイルの指示に従ってください。
TortoiseSVN 以外に他の Subversion クライアントも使用するようなときに、この方法をお勧めしま
す。欠点は、コミットがサーバーによって拒否され、ユーザーにエラーメッセージが返ることです。
クライアントには、コミットの前に拒否されるかどうかわかりません。ログメッセージが十分長くな
るまで、TortoiseSVN が OK ボタンを無効にするようにしたければ、以下で説明する方法で行ってく
ださい。
B.2.2. プロジェクトプロパティ
TortoiseSVN
は機能を制御するのにプロパティを使用します。そういったプロパティのひとつ
に、tsvn:logminsize プロパティがあります。
フォルダーにこのプロパティをセットすると、プロパティで指定した長さ以上ログメッセージを入力
するまで、TortoiseSVN はコミットダイアログの OK ボタンを無効にします。
これらのプロジェクトプロパティの詳細については、 「プロジェクト設定」 を参照してください。
B.3. リポジトリからの選択したファイルの更新
通常、作業コピーを更新するのに、TortoiseSVN → 更新 を使用します。しかし、同僚が、(同時に他
のファイルのいずれの変更もマージせず) 追加だけ行った新しいファイルのみを取り出したい場合、
違ったアプローチを取る必要があります。
193
こんなときは……
TortoiseSVN → 変更をチェック を使用してください。それから、リポジトリに対して行われた変更
を見るのに、リポジトリをチェック をクリックしてください。ローカルに更新したいファイルを選
択し、コンテキストメニューから更新してください。
B.4. リポジトリのリビジョンのロールバック(取り消し)
B.4.1. リビジョンログダイアログの使用
いくつかのリビジョンでの変更を取り消す場合、断然簡単なのはリビジョンログダイアログを使用す
る方法です。
1. 変更を取り消す必要のあるファイルやフォルダーを選択してください。すべての変更を取り消す
場合は、トップレベルフォルダーを選択してください。
2. TortoiseSVN → ログを表示 を選択してリビジョン一覧を表示します。参照したいリビジョンを表
示させるために、必要に応じてすべて取得や次の100件を使用してください。
3. 変更を取り消したいリビジョンを選択してください。リビジョン範囲を取り消すのなら、最初の
ものを選択してから、Shift キーを押したまま最後のものを選択してください。複数のリビジョン
やその範囲を選択する場合は、Ctrlキーを押しながらリビジョンを選択してください。選択した
リビジョンで右クリックし、コンテキストメニュー → このリビジョンにおける変更を取り消す を
選択してください。
4. もしくは、もっと古いリビジョンを HEAD リビジョンにしたい場合は、選択したリビジョンの上で
右クリック し、コンテキストメニュー → このリビジョンに戻す を選択してください。これによ
り、選択したリビジョン以降の変更がすべて取り消されます。
変更の取り消しは作業コピーに対して行われます。結果を確認し、変更をコミットしてください。
B.4.2. マージダイアログの使用
リビジョン番号のリストを入力して指定する場合、マージダイアログを使用することもできます。前
の方法では暗黙にマージが使用されましたが、この方法では明示的にマージを使用します。
1. 作業コピーで TortoiseSVN → マージ を選択してください。
2. マージタイプダイアログの中で、リビジョンの範囲をマージを選択してください。
3. マージ元のURLフィールドに、作業コピーのフォルダーに対応するリポジトリの完全なURLを入力
してください。デフォルトでURLが入力されているはずです。
4. マージするリビジョンの範囲フィールドに、変更を取り消したいリビジョン番号のリストを入力
してください(または、上記の方法と同様にログダイアログを使用して選択してください)。
5. 逆マージチェックボックスがチェックされていることを確認してください。
6. マージオプションダイアログはデフォルトのままにしてください。
7. マージをクリックするとマージを完了します。
作業コピー内の変更が取り消されました。結果が期待通りかどうかを確認し、変更をコミットしてく
ださい。
B.4.3. svndumpfilter の使用
TortoiseSVN は決してデータを失わないため、「ロールバックした」リビジョンはまだ中間リビジョ
ンとして存在しています。 HEAD リビジョンが以前の状態になっただけです。すべての痕跡を削除し
て、リポジトリから完全に見えなくする場合は、もっと極端な手段を採らねばなりません。これは本
194
こんなときは……
当に十分な理由がなければ、お勧めしません。考えられる理由としては、誰かが公開リポジトリに機
密文書をコミットしたなどでしょう。
リポジトリからデータを削除する唯一の方法は、Subversion コマンドラインツールの svnadmin を
使うことです。この実行方法の説明は、Repository Maintenance [http://svnbook.red-bean.com/
en/1.8/svn.reposadmin.maint.html] にあります。
B.5. ファイルやフォルダーに対して 2 リビジョン間の比較
項目の履歴にある2つのリビジョン(例えば同じファイルのリビジョン100と200)を比較したい場
合、単純に TortoiseSVN → ログを表示 を使用して、そのファイルのリビジョンの履歴を表示しま
す。そこで、比較したい2つのリビジョンを取り出し、コンテキストメニュー → リビジョンを比較
を使用してください。
2つの別ツリーにある同じ項目(例えばトランクとブランチ)を比較したい場合、両方のツリーを開
くのにリポジトリブラウザーを使用できます。それから同じ場所のファイルを選択し、コンテキスト
メニュー → リビジョンの比較 を使用してください。
2つのツリーでどこが変更されか(例えばトランクとタグ付けされたリリース)を比較したい場
合、TortoiseSVN → リビジョングラフ を使用できます。比較する2つのノードを選択し、コンテキ
ストメニュー → HEADリビジョンを比較 を使用してください。これで変更されたファイルの一覧が表
示され、変更の詳細を見るよう特定のファイルを選択できます。また、変更したファイルすべてを含
むツリー構造をエクスポートしたり、単純に変更したファイルをすべて表示したりできます。詳細は
「フォルダーの比較」 をご覧ください。その他には、変更の全サマリを最小コンテキストで見るの
に、コンテキストメニュー → HEADリビジョンに対するUnified形式での差分 を使用してください。
B.6. 共通のサブプロジェクトを含める
作業コピーに別プロジェクト、たとえばライブラリのコードを含めたくなることがあると思います。
実現する方法が少なくとも4つあります。
B.6.1. svn:externals の使用
プロジェクトにあるフォルダーに svn:externals プロパティをセットしてください。このプロパ
ティは複数行からなります。各行には、共通コードをチェックアウトするフォルダーとして使用する
サブフォルダー名と、そこにチェックアウトするリポジトリの URL を記述します。もっと詳しいこ
とは 「外部項目」 をご覧ください。
新しいフォルダーをコミットしてください。そこで更新すると、Subversion は各リポジトリから作
業コピーに、プロジェクトのコピーを取得します。必要なサブフォルダーは自動的に作成されます。
メインの作業コピーを更新する度にも、全外部プロジェクトの最新版を取得します。
外部プロジェクトが同じリポジトリにある場合、メインプロジェクトの変更をコミットすると、変更
がコミットリストに含まれます。
外部プロジェクトが別のリポジトリにある場合、メインプロジェクトのコミット時に、外部プロジェ
クトに対する変更は通知されますが、別々にコミットする必要があります。
説明した3つの方法のうち、クライアント側でセットアップが必要ないものは1つだけです。一度
フォルダープロパティに外部参照を設定すると、すべてのクライアントで、更新時に設定したフォル
ダーを取得します。
B.6.2. ネストした作業コピーの使用
プロジェクトに共通コードを格納する新しいフォルダーを作成してください。ですがまだ
Subversion に追加しないでください。
新しいフォルダーで TortoiseSVN → チェックアウト を選択し、共通コードのコピーをここにチェッ
クアウトしてください。これで、メインの作業コピーの中に独立した作業コピーをネストさせます。
195
こんなときは……
2つの作業コピーは独立しています。親作業コピーの変更をコミットした際には、ネストした作業コ
ピーの変更は無視されます。同様に、親作業コピーを更新した際には、ネストした作業コピーは更新
されません。
B.6.3. 相対位置の使用
同じ共通コアコードを複数のプロジェクトで使用するが、使用するプロジェクトごとに複数の同じ作
業コピーを維持したくなければ、使用するその他のプロジェクトと関連する、独立した場所にチェッ
クアウトできます。例えば以下のようになります。
C:\Projects\Proj1
C:\Projects\Proj2
C:\Projects\Proj3
C:\Projects\Common
その上で、共通コードには相対パスで参照してください。例: ..\..\Common\DSPcore
プロジェクトが関係ない場所に散乱している場合、以下のバリエーションを使用できます。共通コー
ドを一カ所に置き、その場所をプロジェクト内でハードコードしているものになるようドライブレ
ター変換を使用します。例えば、共通コードを D:\Documents\Framework か C:\Documents and
Settings\{login}\My Documents\framework にチェックアウトし、
SUBST X: "D:\Documents\framework"
として自分のソースコード内で使用するドライブマッピングを作成してください。自分のコードでは
絶対パスを指定できます。
#include "X:\superio\superio.h"
この方法は、全てが PC の環境でしか利用できません。また、必要なドライブマッピングを明文化し
ておかないと、チームはファイルがどこにあるか分からなくなってしまいます。はっきり言って、こ
の方法は閉じた開発環境向けで、一般的にはお勧めできません。
B.6.4. プロジェクトをリポジトリに追加
最も簡単な方法は、単に自分のプロジェクトにおける作業コピーの中にサブフォルダーに追加するこ
とでしょう。しかし、この外部プロジェクトの更新やアップグレードを手作業で行わなければならな
いという欠点があります。
アップグレードしやすくするよう、 ToretoiseSVN にはエクスプローラーの右ドラッグコンテキスト
メニューのコマンドを用意しています。新しいバージョンの外部ライブラリを展開したフォルダー
を、作業コピー内のフォルダーに右ドラッグして、コンテキストメニュー → SVN ここにあるベン
ダーブランチを更新を実行するだけです。これでコピー先のフォルダーに新しいファイルがコピーさ
れます。自動的に新規ファイルは追加され、新しいバージョンで無くなったファイルは削除されま
す。
B.7. リポジトリへのショートカットの作成
特定の場所をリポジトリブラウザーでたびたび開く必要があるのなら、TortoiseProc の自動化イン
ターフェイスを使用して、デスクトップショートカットを作成できます。単に新しいショートカット
を作成し、項目の場所を以下のようにセットしてください。
TortoiseProc.exe /command:repobrowser /path:"url/to/repository"
もちろん本当のリポジトリ URL を含める必要があります。
196
こんなときは……
B.8. バージョン管理外のファイルの無視
たまたま無視するはずのファイルを追加してしまったら、どのようにしたらそのファイルを失わずに
バージョン管理下から外せるのでしょうか? おそらくプロジェクトの一部ではない、しかし長時間か
けてお好みに設定した IDE の設定ファイルがあることでしょう。
まだ追加をコミットしていない場合は、 TortoiseSVNの → 追加を元に戻す... を使用することで追加
を取り消すことができます。その後、誤って後で再び追加しないように、無視リストにファイル(複
数可)を追加する必要があります。
ファイルがリポジトリ内に既にある場合は、リポジトリから削除する必要がありますし、無視リスト
に追加します。幸いなことに
TortoiseSVN
にはこれを行うための便利なショート
カットがあります。
TortoiseSVN
→
バージョン管理から除外し、無視リストに追
加 を実行すれば、まずリポジトリからファイルやフォルダーを削除するようにマークし、ローカル
コピーを保持します。そして、アイテムを無視リストに追加し、誤って再び Subversion に追加され
ないようにします。この後、必要があるのは親フォルダーをコミットすることだけです。
B.9. 作業コピーをバージョン管理外に
作業コピーから.svnディレクトリを削除し、通常のフォルダーツリーにする場合、これを単純にエク
スポートできます。どのようにするかは、「作業コピーをバージョン管理外へ」をご覧ください。
B.10. 作業コピーの削除
不要になった作業コピーをきれいに削除するには、どのようにすればよいのでしょうか。簡単です。
Windows エクスプローラーで、フォルダーごと削除するだけです。作業コピーはプライベートな存在
であり、内部で自己完結しています。 Windows エクスプローラーで作業コピーを削除しても、リポ
ジトリ内のデータにはまったく影響しません。
197
付録C 管理者向けの便利な小技
この付録には TortoiseSVN を複数のコンピュータに配置する上での 問題や疑問に対する解決法があ
ります。
C.1. グループポリシーでの 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 の改変」を検
索してください。
C.2. 更新チェックのリダイレクト
TortoiseSVN は数日おきに、新しいバージョンが出ているかをばチェックします。使用可能な新しい
バージョンがある場合は、コミットダイアログに通知が表示されます。
図C.1 アップグレードの通知を表示するコミットダイアログ
自分のドメインにいるたくさんのユーザーに対して責任を負っているなら、確認をとった特定バー
ジョンのみ使用させ、最新版をインストールさせたくないでしょう。おそらくユーザーがすぐにアッ
プグレードしないよう、アップグレードダイアログを表示させたくないことでしょう。
TortoiseSVN 1.4.0 以降では、イントラネットのサーバーにその更新チェックのリダイレクトするこ
とができます。レジストリキーのHKCU\Software\TortoiseSVN\UpdateCheckURL (文字列値)をご使
用のイントラネット内のテキストファイルを指すURLに設定してください。そのテキストフ
ァイルには、次の形式である必要があります。
198
管理者向けの便利な小技
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ファイルを保存するようにユーザーに要求します。
C.3. SVN_ASP_DOT_NET_HACK 環境変数の設定
何でもかんでもすべてを選択してしまうユーザーに多くの問題と混乱を発生させたので、バージョン
1.4.0以降では、TortoiseSVNのインストーラーがSVN_ASP_DOT_NET_HACK
環境変数を設定するオプ
ションを提供していません。
しかし、この機能はTortoiseSVNやその他のSVNクライアントで利用できます。有効にするに
は、WindowsのASPDOTNETHACKという名前の環境変数を1に設定してください。実際には、この環境変
数の値は意識されません。環境変数があれば機能が有効になります。
重要
なお、これは未だに
VS.NET2002
を使用している人にのみ必要です。
Visual
Studio のそれ以降のバージョンでは、この対策は必要ありません。それよりも古いツー
ルを使用している人は、使用をやめるべきです!
C.4. コンテキストメニューエントリの無効化
バージョン 1.5.0 以降では、TortoiseSVN はコンテキストメニューエントリを無効(実際には非表
示)にできます。コンパイル上の理由だけではなく、この機能は気軽につかうべきではありませんの
で、GUI は用意されておらず、レジストリを直接操作する必要があります。特定のコマンドを使うべ
きでないユーザーがいる場合に、そのコマンドを無効にできます。なお、エクスプローラー のコン
テキストメニューエントリを隠すだけで、他の方法では実行することができます。例えば、コマンド
ラインや、TortoiseSVN 自体の他のダイアログから実行する場合などです。
コンテキストメニューを表示する際の情報を保持しているレジストリキーは、HKEY_CURRENT_USER
\Software\TortoiseSVN\ContextMenuEntriesMaskLow と HKEY_CURRENT_USER\Software\TortoiseSVN
\ContextMenuEntriesMaskHigh です。
それぞれのレジストリエントリは、特定のメニューエントリに対応する各ビットの DWORD 値です。
ビットをセットすると対応するメニューエントリが無効になります。
値
メニューエントリ
0x0000000000000001
チェックアウト
0x0000000000000002
更新
0x0000000000000004
コミット
0x0000000000000008
追加
0x0000000000000010
変更の取り消し
0x0000000000000020
クリーンアップ
0x0000000000000040
競合の解決
199
管理者向けの便利な小技
値
メニューエントリ
0x0000000000000080
切り替え
0x0000000000000100
インポート
0x0000000000000200
エクスポート
0x0000000000000400
ここにリポジトリを作成
0x0000000000000800
ブランチ・タグ
0x0000000000001000
マージ
0x0000000000002000
削除
0x0000000000004000
名前変更
0x0000000000008000
特定リビジョンへ更新
0x0000000000010000
差分
0x0000000000020000
ログの表示
0x0000000000040000
競合の編集
0x0000000000080000
再配置
0x0000000000100000
変更をチェック
0x0000000000200000
無視
0x0000000000400000
リポジトリブラウザー
0x0000000000800000
注釈履歴
0x0000000001000000
パッチを作成
0x0000000002000000
パッチの適用
0x0000000004000000
リビジョングラフ
0x0000000008000000
ロック
0x0000000010000000
ロックの削除
0x0000000020000000
プロパティ
0x0000000040000000
URL と差分表示
0x0000000080000000
バージョン管理外の項目を削除
0x0000000100000000
すべてマージ
0x0000000200000000
過去のバージョンと差分
0x0000000400000000
貼り付け
0x0000000800000000
作業コピーをアップグレード
0x0000001000000000
差分元として選択
0x0000002000000000
次のファイルと比較: 「ファイル名」
0x0000004000000000
Unified形式の差分
0x2000000000000000
設定
0x4000000000000000
ヘルプ
0x8000000000000000
TortoiseSVN について
表C.1 メニューエントリとその値
例: 「再配置」・「バージョン管理外の項目を削除する」・「設定」 といったメニューエントリを
無効にするには、以下のように値を設定してください。
200
管理者向けの便利な小技
0x0000000000080000
+ 0x0000000080000000
+ 0x2000000000000000
= 0x2000000080080000
下位の
DWORD
値
(0x80080000)
は
HKEY_CURRENT_USER\Software\TortoiseSVN
\ContextMenuEntriesMaskLow
に格納せねばならず、上位の
DWORD
値
(0x20000000)
は
HKEY_CURRENT_USER\Software\TortoiseSVN\ContextMenuEntriesMaskHigh に格納せねばなりません。
メニューエントリを、再度有効にするには、単純に2つのレジストリキーを削除してください。
201
付録D TortoiseSVN の自動化
すべての TortoiseSVN のコマンドがコマンドライン引数で制御できます。バッチファイルで自動化
したり、テキストエディターなどの他のプログラムから、特定のコマンドやダイアログを起動したり
することができます。
重要
TortoiseSVN
はあくまで
GUI
クライアントです。ここでは
TortoiseSVN のダイアログを表示させて、ユーザーに入力を促す方法を説明します。入
力を伴わずに操作をするスクリプトを書くのであれば、公式の Subversion コマンドライ
ンクライアントを使用してください。
D.1. TortoiseSVNのコマンド
TortoiseSVN の GUI プログラムは TortoiseProc.exe から呼び出します。実行するコマンドは /
command:<コマンド名> 引数で指定し、 <コマンド名> の部分にはコマンド名を指定します。ほとんど
のコマンドでは /path:"<パス名>" 引数でパスを指定する必要があります。下記の表で、 /command:<
コマンド名> で指定するコマンドと、 /path:"<パス名>" で指定するパスの意味を説明します。
パラメーターを必要としない特殊なコマンド
/command:abcd
がありますが、もし何もコ
マンドラインから指定されなかった場合、代わりにプロジェクトモニターが起動します。もし
/
tray を指定すると、プロジェクトモニターを表示せず、システムトレイにアイコンが表示された状
態で起動します。
コマンドによっては、複数の対象のパスを受け付けます(例えば、コミット時に複数のファイルを指
定する場合など)。 /path 引数には * で区切って複数のパスを指定することができます。
改行で区切った複数のパスを記述したファイルで指定することもできます。ファイルはUTF-16形式
で、BOM
[http://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC
%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF] を入れないでください。ファイルを渡したい場
合は、/pathではなく/pathfileを使用してください。コマンド実行後にTortoiseProcがファイルを自
動削除するようにしたい場合は、/deletepathfileを使用してください。/deletepathfileを指定しな
い場合、手作業でファイルを削除しなければファイルは残ります。
多くのコマンド(コミットや更新など)で表示される進行ダイアログは、通常はコマンドが終了した
後も OK ボタンを押すまで開いたままになります。設定ダイアログで進行ダイアログを自動的に閉じ
るように設定することができます。ただしこの場合、コマンドをバッチファイルから起動しても、
TortoiseSVN コンテキストメニューから起動しても、進行ダイアログが閉じるようになります。
/configdir:"<設定ファイルのディレクトリのパス>" を指定すると、異なる場所にある設定ファイル
を指定することができます。この引数は、レジストリで設定されているデフォルトパスを上書きしま
す。
/closeonend 引数を指定すると、設定を変更することなくコマンド終了時に進行ダイアログを自動で
閉じることができます。
• /closeonend:0 ダイアログを自動的に閉じません。
• /closeonend:1 エラーがなければ自動的に閉じます。
• /closeonend:2 エラーや競合がなければ自動的に閉じます。
• /closeonend:3 エラー、競合、マージがなければ自動的に閉じます。
エラーや競合がない場合にローカル操作の進行ダイアログを自動的に閉じるには、
引数を指定してください。
202
/closeforlocal
TortoiseSVN の自動化
以下の表には、 TortoiseProc.exe のコマンドラインで使用してアクセスすることができる、すべて
のコマンドを一覧しています。上で述べたように、 /command:<コマンド名> の形で使用してくださ
い。この表では紙面を節約するため、頭に付ける /command は省略しています。
コマンド
説明
:about
「バージョン情報」ダイアログを表示します。コマンドが省略された場
合もバージョン情報ダイアログを表示します。
:log
ログダイアログを開きます。/pathでログを表示するファイルやフォル
ダーを指定します。その他のオプションは次の通りです。
• /startrev:xxx,
• /endrev:xxx,
• /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:
203
TortoiseSVN の自動化
コマンド
説明
• {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
「チェックアウト」ダイアログを開きます。 /path でチェックアウト先
のディレクトリを指定します。 /url でチェックアウト元の URL を指定
します。 /blockpathadjustments を指定すると、チェックアウトパスの
自動調整を抑制します。 /revision:XXX でチェックアウトするリビジョ
ンを指定します。
: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
で指定された作業コピーの、中断されたり失敗したりした
操作をクリーンアップし、作業コピーのロックを解除します。
/
noui
を指定すると、(クリーンアップの終了を通知したりエラー
を表示したりする)ポップアップダイアログを抑制します。
/
204
TortoiseSVN の自動化
コマンド
説明
noprogressui を指定すると、進行状況ダイアログの表示も抑制します。
/nodlg
を指定すると、ユーザーがクリーンアップ処理の内容を選択す
るためのダイアログを表示しません。クリーンアップ時の動作は、
/
cleanup、 /revert、 /delunversioned、 /delignored、 /refreshshell、
/externals で指定することができます。
:resolve
/path で指定した競合ファイルを解決済みにします。 /noquestion を指
定すると、本当に行ってもよいか確認せずに解決済みにします。
:repocreate
/path にリポジトリを作成します。
:switch
切り替えダイアログを開きます。/pathで切り替えるディレクトリ、/
urlで切り替え先のURLを指定します。
:export
/path で指定された作業コピーを別のディレクトリにエクスポートしま
す。 /path でバージョン管理外ディレクトリを指定すると、ダイアログ
が表示されて /path で指定されたディレクトリにエクスポートする URL
を尋ねてきます。 /blockpathadjustments を指定すると、パスの自動調
整を抑制します。
:dropexport
作業コピーを /path から /droptarget で指定されたディレクトリにエク
スポートします。このコマンドでは、エクスポートダイアログを表示せ
ずに直接実行します。 /overwrite を指定すると、既存のファイルを確認
なしで上書きします。 /autorename を指定すると、ファイルが既に存在
するとき、上書きせずにエクスポートされたファイルの名前を自動的に
変更します。/extendedオプションは、localchangesと共に指定すると、
ローカルで変更されたファイルのみをエクスポートし、unversionedと共
に指定すると、それに加えてバージョン管理されていない項目もすべて
エクスポートします。
:dropvendor
/path で指定されたフォルダーを、 /droptarget で指定されたディレク
トリに再帰的にコピーします。ターゲットの作業コピーに対して、新し
いファイルは自動的に追加され、見つからないファイルは削除され、基
本的にコピー元とコピー先は全く同じになります。
: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 を指
定してください。
205
TortoiseSVN の自動化
コマンド
説明
:diff
TortoiseSVNの設定で指定された外部差分ビューアーを起動します。/
pathには1番目のファイルを指定します。/path2オプションを指定する
と、その2つのファイルに対して差分ビューアーが起動します。/path2を
省略すると、/pathで指定されたファイルとその作業ベースの間の差分と
なります。指定されたファイルにプロパティの変更がある場合は、変更
された各プロパティについても外部差分ビューアーが起動されます。こ
れを防ぐには、/ignorepropsを指定してください。リビジョン番号を指
定するには、/startrev:xxxや/endrev:xxxを指定してください。ペグリ
ビジョンを指定する場合は、/pegrevision:xxxを指定してください。/
blameを指定して/path2を指定しない場合、指定されたリビジョンのファ
イルの注釈履歴が表示されます。 /line:xxxを指定すると、差分を表示す
るときにその行番号にジャンプします。
:showcompare
unified オプションが指定された場合は、Unified差分ファイルに含まれ
る変更されたファイルの一覧をダイアログで表示します。URLがファイル
を指していた場合は、その2ファイルに対して差分ビューアーを起動し
ます。
url1、 url2、 revision1、 revision2 の各オプションを指定する必要が
あります。pegrevision、 ignoreancestry、 blame、 unified オプショ
ンを指定することもできます。
指定されたURLのプロパティの変更があった場合、変更された各プロパ
ティについても外部差分ビューアーが起動します。これを避けるには、/
ignorepropsオプションを指定してください。
: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 を指定すると、注釈範囲を指定するダイアログが
表示されず、指定したリビジョンの値を使用します。
206
TortoiseSVN の自動化
コマンド
説明
/line:nnn を指定すると、 TortoiseBlame を開く際に指定した行番号に
ジャンプします。
/ignoreeol や /ignorespaces 、/ignoreallspaces の各オプションもサ
ポートしています。
:cat
/path
で指定した
URL
や作業コピーのパスのファイル
を、
/savepath:path
で指定した場所に保存します。
/
revision:xxx でリビジョンを指定できます。指定したリビジョンのファ
イルを取得するのに使用できます。
:createpatch
/path で指定されたパスのパッチファイルを作成します。「名前を付けて
保存」ダイアログをスキップする場合は、 /savepath:path でパッチファ
イルを保存するディレクトリのパスを指定してください。パッチファイ
ルを統合差分ビューアーで表示する場合は、 /noview を指定してくださ
い。
:revisiongraph
/path で指定したパスのリビジョングラフを表示します。
グラフウィンドウを表示せずに、特定のパスのリビジョングラフのイ
メージファイルを作成する場合には、 /output:path で出力ファイルのパ
スを指定してください。出力ファイルには、リビジョングラフを出力で
きるファイル形式の拡張子を付与する必要があります。出力できるのは
.svg、 .wmf、 .png、 .jpg、 .bmp、 .gif のいずれかです。
リビジョングラフは、表示方法を設定するための多くのオプションがあ
り、出力イメージファイルを作成するときにこれらのオプションを設定
できます。オプションは
/option:XXXX
を指定します。
XXXX は十進数の数値です。オプションの値を知るには、リビジョングラ
フを通常の方法で起動して、ユーザーインターフェイスからオプション
を指定し、グラフを終了させます。その際、コマンドラインで指定する
値は、レジストリの次の項目に書き込まれています。
HKCU\Software
\TortoiseSVN\RevisionGraphOptions
:lock
/path で指定したファイルや、指定したディレクトリにあるすべてのファ
イルをロックします。ロック時のコメントを入力するよう「ファイルを
ロック」ダイアログを表示します。
:unlock
/path で指定したファイルや、指定したディレクトリにあるすべてのファ
イルのロックを解除します。
:rebuildiconcache
Windows のアイコンキャッシュを再生成します。Windows のアイコンが破
損したときのみ使用してください。(避けられない)副作用として、デ
スクトップのアイコンが再配置されてしまうことがあります。メッセー
ジボックスの表示を抑制するには、 /noquestion を指定してください。
:properties
/path で指定されたパスのプロパティダイアログを表示します。
このコマンドでバージョン管理されたプロパティを扱う場合は、作業コ
ピーを指定する必要があります。
/rev:XXX が指定されていて、 /path がURLであれば、ダイアログでリビ
ジョンプロパティを表示・編集できます。
特定のプロパティのプロパティダイアログを直接開く場合は、プロパ
ティ名を /property:name の指定してください。
:sync
現在の設定がエクスポートした設定より新しいかどうかに応じて、設定
をエクスポート/インポートします。
/path オプションでパスを渡すと、設定の読み書きに指定したパスが使用
されます。
207
TortoiseSVN の自動化
コマンド
説明
/askforpath を指定すると、エクスポートまたはインポートするパスを選
択するダイアログが表示されます。
/load も /save も指定されていない場合、 TortoiseSVN はどちらの設定
が新しいかを元にインポートとエクスポートのどちらを行うかを決定し
ます。もしエクスポートファイルのほうが新しければ設定をインポート
し、現在の設定のほうが新しければ設定をファイルにエクスポートしま
す。
/load を指定すると、設定ファイルから設定をインポートします。
/save を指定すると、設定ファイルに設定をエクスポートします。
/local を指定すると、ローカルな設定も含めてエクスポートします(ロー
カルなパスを参照している設定など)。
表D.1 使用できるコマンドとオプションの一覧
コマンドの例(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
D.2. Tsvncmd URL ハンドラ
特殊な URL を使用すると、web ページから TortoiseProc を呼び出すことができます。
TortoiseSVN は、TortoiseSVN コマンドを実行するようなハイパーリンクを作成する、tsvncmd: と
いう新しいプロトコルを登録します。コマンドやパラメーターは、コマンドラインから TortoiseSVN
を自動化するのと同じです。
tsvncmd: URL の形式は以下のようになります。
tsvncmd:command:cmd?parameter:paramvalue?parameter:paramvalue
cmd は許可されたコマンドの1つ、 parameter は path や revision のような引数の名前、そして
paramvalue は引数に設定される値です。引数のリストの数は、使われるコマンドに依存します。
以下のコマンドを tsvncmd: URL に使用できます。
• :update
• :commit
• :diff
• :repobrowser
• :checkout
• :export
• :blame
208
TortoiseSVN の自動化
• :repostatus
• :revisiongraph
• :showcompare
• :log
簡単な 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>
D.3. TortoiseIDiff コマンド
画像差分ツールには、起動時のふるまいを制御するのに使用する、コマンドラインオプションが少し
あります。オプションは TortoiseIDiff.exe により呼ばれます。
以下の表は、コマンドラインで画像差分ツールに渡す、全オプションの一覧です。
オプション
説明
:left
左に表示するファイルのパス。
:lefttitle
タイトルの文字列。イメージファイルのフルパスの代わりに、この文字
列をイメージビューのタイトルに使用します。
:right
右に表示するファイルのパス。
:righttitle
タイトルの文字列。イメージファイルのフルパスの代わりに、この文字
列をイメージビューのタイトルに使用します。
:overlay
指定すると、画像差分ツールがオーバーレイモード(アルファブレン
ディング)に変わります。
:fit
指定すると、画像差分ツールはどちらの画像も画面一杯に表示します。
:showinfo
イメージ情報ボックスを表示します。
表D.2 使用できるオプションの一覧
サンプル(一行で入力してください):
TortoiseIDiff.exe /left:"c:\images\img1.jpg" /lefttitle:"image 1"
/right:"c:\images\img2.jpg" /righttitle:"image 2"
/fit /overlay
D.4. TortoiseUDiffコマンド
Unified差分ビューアーにはコマンドラインオプションが2つだけあります。
オプション
説明
:patchfile
Unified差分ファイルへのパスです。
209
TortoiseSVN の自動化
オプション
説明
:p
パイプモードを有効にします。Unified差分を標準入力から読み取りま
す。
表D.3 使用できるオプションの一覧
例(1行で入力してください)
TortoiseUDiff.exe /patchfile:"c:\diff.patch"
他のコマンドで差分を取った場合、TortoiseUDiffで差分を直接表示させることができます。
svn diff | TortoiseUDiff.exe /u
/pパラメーターを省略しても動作します。
svn diff | TortoiseUDiff.exe
210
付録E コマンドラインインターフェイスの
クロスリファレンス
時々このマニュアルは、コマンドラインインターフェイス(CLI)の説明をしている Subversion の
ドキュメントを参照しています。TortoiseSVN があるシーンの裏で何を行っているか理解する助けに
なるよう、それぞれの TortoiseSVN の GUI 操作と同等な CLI コマンドを示すリストを用意しまし
た。
注記
TortoiseSVN で行うことと同等な物が CLI にありますが、TortoiseSVN が CLI を呼ぶこ
とはなく、直接 Subversion ライブラリを使用するのを覚えていてください。
TortoiseSVN のバグを見つけたら、Subversion の問題か TortoiseSVN の問題かを切り分けるため
に、CLI を使用してそれを再現するようにお願いするかもしれません。このリファレンスで、どのコ
マンドを行うべきか確認してください。
E.1. 規約と基本規則
以下の説明では、リポジトリの位置を表す URL (例: https://svn.code.sf.net/p/tortoisesvn/
code/trunk/)は、単に URL と表します。作業コピーのパス(例: C:\TortoiseSVN\trunk)は、単に
PATH と表します。
重要
TortoiseSVN は Windows シェル拡張ですから、カレントワーキングディレクトリの概念
は使用できません。作業コピーのパスは相対パスではなく絶対パスで与えられます。
いくつかの項目はオプションで、TortoiseSVN ではチェックボックスやラジオボタンで制御されてい
ます。こういったオプションはコマンドラインの定義では [角かっこ] で表されます。
E.2. TortoiseSVNのコマンド
E.2.1. チェックアウト
svn checkout [-depth ARG] [--ignore-externals] [-r rev] URL PATH
depthの引数は、「チェックアウトする深さ」コンボボックスに関連します。
外部参照を除外する
い。
がチェックされているなら、--ignore-externals
スイッチを使用してくださ
特定のリビジョンをチェックアウトしたい場合、-r スイッチを使って指定してください。
E.2.2. 更新
svn info URL_of_WC
svn update [-r rev] PATH
複数の項目を更新するのに、現在の Subversion では不可分操作できません。そこで TortoiseSVN
は、まず HEAD リビジョンをリポジトリから探し出し、複数のリビジョン場混じった作業コピーを作
らないように、特定のリビジョン番号を持つすべての項目を更新します。
211
コマンドラインインターフェ
イスのクロスリファレンス
1項目しか選択しないで更新したり、選択した項目がすべて同じリポジトリにない場合、TortoiseSVN
は HEAD リビジョンに更新します。
ここでのコマンドラインオプションはありません。特定リビジョンへ更新 も update コマンドを実装
していますが、こちらはもっとオプションがあります。
E.2.3. リビジョンの更新
svn info URL_of_WC
svn update [-r rev] [-depth ARG] [--ignore-externals] PATH
depthの引数は、「チェックアウトする深さ」コンボボックスに関連します。
外部参照を除外する
い。
がチェックされているなら、--ignore-externals
スイッチを使用してくださ
E.2.4. コミット
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 スイッチを使用してください。
E.2.5. 差分
svn diff PATH
212
コマンドラインインターフェ
イスのクロスリファレンス
メインのコンテキストメニューから差分が実行された場合、BASEリビジョンから変更されたファイル
に対して比較を行います。上記のCLIコマンドの出力では比較を行い、結果をUnified差分ファイルで
出力します。しかし、TortoiseSVNはこれを使用しているわけではありません。TortoiseSVNは
TortoiseMerge(または、任意の差分表示プログラム)でフルテキストファイルの差分を視覚的に表
示します、そのため、CLIで直接相当するものはありません。
TortoiseSVN で、バージョン管理下であってもなくても、任意の 2 ファイルを比較することができま
す。TortoiseSVN は、単に2つのファイルを選択した差分プログラムに渡し、どこに差分があるかを
比較させます。
E.2.6. ログの表示
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 スイッチを使
用してください。
E.2.7. 変更をチェック
svn status -v PATH
or
svn status -u -v PATH
状態チェックの初期状態では、作業コピーに対してのみ行います。リポジトリをチェック をクリッ
クすると、更新時にどのファイルが変更されるかリポジトリもチェックしますが、これには -u ス
イッチが必要です。
バージョン管理外のファイルを表示にチェックがあると、TortoiseSVN
は作業コピーの階層にある
バージョン管理外のファイルやフォルダーも(無視ルールを考慮して)表示します。svn status コ
マンドはバージョン管理外のフォルダー以下は検索しないため、この特殊な機能は直接対応する
Subversion コマンドがありません。
E.2.8. リビジョングラフ
リビジョングラフは 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.
E.2.9. リポジトリブラウザー
svn info URL_of_WC
svn list [-r rev] -v URL
213
コマンドラインインターフェ
イスのクロスリファレンス
リポジトリブラウザーでトップレベルに表示されるリポジトリのルートを決めるのに svn info を使
用できます。このレベル以上へは 上 へ行けません。またこのコマンドは、リポジトリブラウザーに
表示されるロック情報を返します。
svn list は URL とリビジョンで指定した、ディレクトリの内容をリスト表示します。
E.2.10. 競合の編集
このコマンドには、同等の CLI がありません。競合したファイルを見て、どの行を使用するか整理
するのに、TortoiseMerge や、その他の3画面差分・マージツールを起動します。
E.2.11. 解決済み
svn resolved PATH
E.2.12. 名前変更
svn rename CURR_PATH NEW_PATH
E.2.13. 削除
svn delete PATH
E.2.14. 変更の取り消し
svn status -v PATH
第一段階として、作業コピー内で変更の取り消しが行える項目を決定するよう、状態チェックを行い
ます。一覧を確認し、BASE に対するファイルの比較、取り消す項目の選択を行えます。
OK をクリックすると、その場で Subversion の変更の取り消し(revert)が実行されます。ファイル
選択のチェックボックスをすべてデフォルト状態のままにすると、作業コピーの再帰的な(-R)変更
の取り消しが実行されます。ファイルの選択を外した場合、コマンドラインで個別にパスを指定した
形で、変更の取り消しが実行されます。
svn revert [-R] PATH...
E.2.15. クリーンアップ
svn cleanup PATH
E.2.16. ロックの取得
svn status -v PATH
214
コマンドラインインターフェ
イスのクロスリファレンス
第一段階として、作業コピー内でロックできる項目を決定するよう、状態チェックを行います。ロッ
クしたい項目を選択できます。
svn lock -m "LockMessage" [--force] PATH...
LockMessage には、ロックメッセージエディットボックスの内容を記述してください。空でもかまい
ません。
ロックを奪う にチェックが付いている場合、--force スイッチを使用してください。
E.2.17. ロックの解除
svn unlock PATH
E.2.18. ブランチ・タグ
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
ん。
にはログメッセージエディットボックスの内容を記述してください。空でもかまいませ
E.2.19. 切り替え
svn info URL_of_WC
svn switch [-r rev] URL PATH
E.2.20. マージ
svn merge [--dry-run] --force From_URL@revN To_URL@revM PATH
マージのテスト は、--dry-run スイッチ付きの merge と同じ動作をします。
svn diff From_URL@revN To_URL@revM
215
コマンドラインインターフェ
イスのクロスリファレンス
Unified diff はマージ処理されるものを差分で表示します。
E.2.21. エクスポート
svn export [-r rev] [--ignore-externals] URL Export_PATH
この形式はバージョン管理外フォルダーからアクセスし、エクスポート先に指定フォルダーを使用し
ます。
作業コピーを別の場所にエクスポートするのに、Subversion
相当するコマンドラインが存在しません。
ライブラリを使用ません。そのため、
TortoiseSVN が行うのは、操作の進行を表示しながら、新しい場所に全ファイルをコピーすることで
す。バージョン管理外ファイル/フォルダーも、オプションでエクスポートできます。
どちらの場合でも、外部参照を除外する がチェックされていれば、--ignore-externals スイッチを
使用してください。
E.2.22. 再配置
svn switch --relocate From_URL To_URL
E.2.23. ここにリポジトリを作成
svnadmin create --fs-type fsfs PATH
E.2.24. 追加
svn add PATH...
フォルダーを選択すると、TortoiseSVN はまず、追加できる項目を再帰的に検索します。
E.2.25. インポート
svn import -m LogMessage PATH URL
LogMessage
ん。
にはログメッセージエディットボックスの内容を記述してください。空でもかまいませ
E.2.26. 注釈履歴
svn blame -r N:M -v PATH
svn log -r N:M PATH
注釈情報を参照するのに TortoiseBlame を使用する場合、ツールチップにログメッセージを表示す
るのに、ファイルのログも必要です。注釈をテキストファイルで参照する場合は、この情報は必要あ
りません。
216
コマンドラインインターフェ
イスのクロスリファレンス
E.2.27. 無視リストに追加
svn propget svn:ignore PATH > tempfile
{tempfileを編集し無視する項目を追加してください}
svn propset svn:ignore -F tempfile PATH
svn:ignore プロパティは複数行の値をとることがあるため、ここでは、直接コマンドラインで指定
するのではなく、テキストファイルで変更する方法を示します。
E.2.28. パッチを作成
svn diff PATH > patch-file
TortoiseSVN は、作業コピーと BASE リビジョンを比較して、unified差分形式のパッチファイルを作
成します。
E.2.29. パッチの適用
パッチと作業コピーが同じリビジョンでない場合、パッチの適用は困難な作業です。幸いなこと
に、Subversionには該当する機能がありませんが、TortoiseMergeを使用sるうことができます。
217
付録F 実装の詳細
この付録には TortoiseSVN の機能を実装する上での、議論の詳細が納められています。
F.1. アイコンオーバーレイ
すべてのファイルやフォルダーは、Subversion
ライブラリが報告する
Subversion
の状態値を持っています。コマンドラインクライアントでは、1
文字のコードで表示します
が、TortoiseSVN ではアイコンオーバーレイでグラフィカルに表示します。オーバーレイアイコンの
数は非常に制限されているので、オーバーレイアイコンごとに複数の状態値を持つこともありえま
す。
競合 オーバーレイアイコンは、更新や切替の結果でローカルの変更とリポジトリからダウンロード
した変更が競合した場合の、競合状態を表示するのに使用します。操作が完了できない時に陥る、妨
害状態を表すときにも表示します。
変更 オーバーレイアイコンは、ローカルで変更がある変更状態や、ローカルの変更にリポジトリか
らの変更点をマージしたマージ状態、ファイルが削除されて、同名の異なるファイルに置き換わった
置換状態を表示するのに使用します。
削除
オーバーレイアイコンは、削除するようスケジュールした
削除状態や、見つからな
い 紛失状態の場合に表示されます。通常、紛失ファイルは表示できませんが、紛失ファイルがある
はずの親フォルダーに表示します。
バージョン管理に 追加 されるファイルやフォルダーには + 記号がつきます。
Subversion 内 オーバーレイアイコンは、通常状態のファイルや、まだ状態が分からないファイル
に表示します。これは、TortoiseSVN が状態を取得するバックグラウンドプロセスを用いているため
で、それはオーバーレイアイコンを更新する数秒前かもしれません。
要ロックオーバーレイは、 svn:needs-lock プロパティが設定されているファイルに表示されます。
ローカルの作業コピーでファイルにロックされている場合、ロック
ます。
オーバーレイアイコンが使われ
無視
オーバーレイアイコンは、常に無視するパターンに含まれていたり、親フォルダーに
svn:ignore プロパティが設定されていたりするために 無視 状態になった項目を表すのに使用しま
す。このオーバーレイはオプションです。
218
実装の詳細
バージョン管理外 オーバーレイは、バージョン管理外 状態の項目を表すのに使用します。これは
バージョン管理下にあるフォルダー内の、バージョン管理外の項目です。このオーバーレイはオプ
ションです。
Subversion の状態が none(作業コピーにない項目)の場合はオーバーレイを表示しません。無視
や バージョン管理外 のオーバーレイを無効にした場合は、そのファイルにもオーバーレイを表示し
ません。
ファイルは Subversion 状態を1つしか持ちません。例えば、ファイルをローカルで変更し、その
ファイルを同時に削除するようマークをつけることができます。Subversion は状態値を1つ返しま
す。この場合、削除です。この優先順は、Subversion で定義しています。
TortoiseSVN が再帰的な状態を表示する場合(デフォルト設定)、各フォルダーには、自身の状態と
以下のすべての子ファイルの状態を反映させたオーバーレイが表示されます。ひとつにまとめたオー
バーレイを表示するのに、前述の優先順位が使用されます。この際、もっとも優先順が高いのは、競
合状態です。
実はシステムで使用できるアイコンのすべてを見ることはありません。Windows
で使用できるオー
バーレイの数は 15 個に制限されているからです。Windows は 4 個使用し、残りの 11 個を他のアプ
リケーションで使用できるようにしています。TortoiseCVS も使用していると、使用できるオーバー
レイスロットが足らなくならないように、TortoiseSVN は「Good Citizen (TM)」 に徹し、オーバー
レイを他のアプリケーションが使用できるように制限しているのです。
Tortoise クライアントには他のバージョン管理システム向けのものもあるため、オーバーレイアイ
コンの表示を共有するコンポーネントを作成しました。ここでは技術的な細部は重要ではありません
が、知っておいてほしいのは、共有コンポーネントによってすべての Tortoise クライアントが同じ
オーバーレイを使用することができ、 複数の Tortoise クライアントをインストールしたとき、オー
バーレイの最大数である11個を超えずに使うことができる点です。もちろん、若干の欠点もありま
す。すべての Tortoise クライアントが同じオーバーレイを使用するため、作業コピーが使用してい
るバージョン管理システムをオーバーレイアイコンで見分けることができません。
• 通常、変更、競合 は常に読み込み・表示されます。
• 削除 は可能ならばロードしますが、スロットが足りなければ 変更 にフォールバックします。
• 読み取り専用 は可能ならばロードしますが、スロットが足りなければ 通常 にフォールバックしま
す。
• ロックは可能ならばロードしますが、スロットが足りなければ 通常 にフォールバックします。
• 追加 は可能ならばロードしますが、スロットが足りなければ 変更 にフォールバックします。
219
付録G 言語パックとスペルチェッカー
標準のインストーラーは英語のみをサポートしていますが、個別に言語パックやスペルチェック辞書
をダウンロードし、インストールすることができます。
G.1. 言語パック
TortoiseSVNのユーザーインターフェイスはたくさんの言語に翻訳されています。翻訳状況ページ
[http://tortoisesvn.net/translation_status_dev.html]からご希望の言語パックをダウンロードす
ることができます。まだ言語パックが用意されていない言語ならば、チームに参加して翻訳をしてみ
ましょう ;-)
各言語パックは、.msiインストーラーとしてパッケージ化されています。インストールプログラムを
実行し、指示に従うだけです。インストールが完了したら、翻訳版が使用できるようになります。
ドキュメントもさまざまな言語に翻訳されています。ウェブサイトのサポートページ
[http://
tortoisesvn.net/support.html]から翻訳されたマニュアルをダウンロードすることができます。
G.2. スペルチェッカー
TortoiseSVN にはコミットログメッセージをチェックするようスペルチェッカーが含まれています。
プロジェクト言語が、自分のネイティブ言語でない場合に特に便利です。スペルチェッカーは
OpenOffice [http://openoffice.org] や Mozilla [http://mozilla.org] と同じ辞書を使用します。
インストーラーは自動で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 はどの辞書を使用するかを以下のルールで決定し
ます。
220
用語集
BASE リビジョン
作業コピー にあるファイルやフォルダーの現在のベースリビジョン
で、最後にチェックアウト、更新、コミットを実行したときの、
ファイルやフォルダーのリビジョンです。 BASE リビジョンは、通常
は HEAD リビジョンと同じではありません。
FSFS
Subversion が持つリポジトリ用のファイルシステムバックエンドで
す。ネットワークフォルダー上で使用することができます。1.2以降
のリポジトリのデフォルトです。
GPO
グループポリシーオブジェクト。
HEAD リビジョン
リポジトリにあるファイルやフォルダーの最新リビジョンです。
SVN
Subversion のよく使われる省略表現。
「svnserve」リポジトリサーバーで使われる、 Subversion カスタム
プロトコルの名前。
インポート
単一のリビジョンで、フォルダー階層の内容をリポジトリにイン
ポートする Subversion のコマンドです。
エクスポート
このコマンドは、作業コピーのようにバージョン管理下のフォル
ダーをコピーしますが、 .svn は作成しません。
クリーンアップ
Subversion book から引用します。「作業コピーの再帰的なクリーン
アップ(ロックの解除、未完操作の回復)を行います。 作業コピー
がロックされています というエラーが出続ける場合、このコマンド
を実行し、古くなったロックを削除し、作業コピーをまた使えるよ
うにします。」ここで言う ロック とは、ファイルシステムのロック
を指しており、リポジトリのロックではないことに注意してくださ
い。
コピー
Subversion リポジトリでは、単一ファイルやツリー全体のコピーを
作成できます。これは、領域を消費しないように、オリジナルへの
リンクに少し似ている 「簡易コピー」 で実装されています。コピー
の作成ではコピー内に履歴を保存します。そのためコピーされる前
についても追跡できます。
コミット
ローカルの作業コピーの変更点をリポジトリに渡し、リポジトリの
リビジョンを新しく作成するのに使用する Subversion のコマンドで
す。
チェックアウト
空のディレクトリに、リポジトリからバージョン管理下のファイル
をダウンロードし、ローカルの作業コピーを作成する Subversion の
コマンドです。
パッチ
作業コピーの変更がテキストファイルのみである場合、 Subversion
の Diff コマンドを使用すると、変更内容を Unified 差分ファイル
として単一ファイルに出力することができます。この種のファイル
はよく「パッチ」と呼ばれており、他の誰か(やメーリングリス
ト)にメールで送ったり、他の作業コピーに適用したりすることが
できます。コミットのアクセス権を持たない人は、変更を作成し、
パッチファイルをコミット権限を持つ人に送ることができます。ま
た、変更に自信がない場合、他の人にパッチを送ってレビューして
もらうこともできます。
ブランチ
バージョン管理システムでよく使用される用語で、ある時点で開発
が2つの独立したパスに分岐したことをと表します。メインの開発
221
用語集
ラインからブランチを作成すれば、メインラインを不安定にせずに
新機能の開発を行うことができます。また、今後バグフィックスの
みを行うための安定版リリースのブランチを作成すれば、新機能の
開発は不安定なトランクで行うことができます。 Subversion のブラ
ンチは、「簡易コピー」 として実装されています。
プロパティ
ディレクトリやファイルのバージョン管理をするのに加えて、
Subversion はバージョン管理されたメタデータを追加できます。こ
れは、バージョン管理下のディレクトリやファイルごとに「プロパ
ティ」として参照されます。プロパティには、レジストリキーと同
じように、それぞれ名前と値があります。
Subversion
に
は、
svn:eol-style
のような内部で使用する特殊な
プロパティがいくつかあります。
TortoiseSVN
にも
tsvn:logminsize のような特殊なプロパティがあります。任意の名
前と値を持つプロパティの追加もできます。
マージ
リポジトリに追加された変更を、ローカルで行った変更を壊さない
ように、作業コピーに追加するプロセスです。時には自動的に調整
できず、作業コピーが競合と呼ばれる状態になります。
作業コピーを更新する際に、自動的にマージが行われます。また、
TortoiseSVN のマージコマンドを使用して、別のブランチにある変
更を指定してマージすることもできます。
リビジョン
変更セットをコミットするたびに、新しい「リビジョン」がリポジ
トリに作成されます。各リビジョンは、履歴の決まった時点のリポ
ジトリツリーの状態を表します。過去にさかのぼる場合は、リビ
ジョン N のような形でリポジトリを調べられます。
言い換えるとリビジョンは、リビジョンが作成された時に行われた
変更を示しています。
リビジョンプロパティ
(revprop)
ファイルがプロパティを持てるように、リポジトリの各リビジョン
もプロパティを持つことができます。リビジョンが作成されるとき
に、 svn:date svn:author svn:log といった特殊なリビジョンプロ
パティが自動的に作成され、それぞれコミット日時、コミットした
人、ログメッセージを表しています。これらのプロパティは編集で
きますが、バージョン管理できません。そのため変更は永続的で元
に戻せません。
リポジトリ
データを集中して格納し保守する場所。複数のデータベースやファ
イルをネットワーク上に分散して置くこともでき、ネットワークに
出ずに直接アクセスできる場所に置くこともできます。
ログ
ファイルやフォルダーのリビジョンの歴史を表します。「履歴」と
も呼びます。
ロック
バージョン管理下の項目のロックを取得すると、その作業コピーを
除いて、ロックが解除されるまでリポジトリにコミット不可の印が
付きます。
作業コピー
ローカルの「サンドボックス」で、バージョン管理ファイルに対し
て作業を行う場所です。また通常ローカルのハードディスクに記録
されています。リポジトリからの「チェックアウト」で作業コピー
を作成し、「コミット」で変更点をリポジトリに反映します。
再配置
サーバー上の異なるディレクトリに移動したり、ドメイン名が変更
されたりして、リポジトリが移動した場合、作業コピーを「再配
置」すれば、作業コピーのリポジトリのURLが新しい場所を指すよう
になります。
222
用語集
【注意】このコマンドは、作業コピーが指している同じリポジトリ
の同じ場所を指し、そのリポジトリが移動されてしまったときのみ
に使用してください。その他の場合には、代わりに「切り替え」コ
マンドを使用する必要があります。
切り替え
ちょうど「特定リビジョンへ更新」が履歴上の別の位置へ、作業コ
ピーの時間ウィンドウを変更するように、「切り替え」はリポジト
リの別の位置へ、作業コピーの場所ウィンドウを変更します。トラ
ンクとブランチの違いが少ない時、それぞれの作業する際に役に立
ちます。その2つの間で作業コピーを切り替えると、差異のある
ファイルのみが転送されます。
削除
バージョン管理下のファイルを削除(してコミット)すると、リポ
ジトリ内のそのコミットを行ったバージョン以降、その項目はもう
存在しなくなります。しかしもちろん、それ以前のリポジトリのリ
ビジョンには、まだ存在していますから、まだそれにアクセスでき
ます。必要なら削除した項目をコピーし、履歴を含め完全に「復
活」できます。
変更の取り消し
作業コピーを最後に更新したとき、 Subversion はそれぞれのファイ
ルの「当時の」 コピーをローカルに保持しています。変更を行った
後で、その変更を取り消したい場合は、「変更の取り消し」 コマン
ドを使用して当時のコピーに戻せます。
履歴
ファイルやフォルダーのリビジョンの歴史を表します。「ログ」と
も呼びます。
差分
「差分の表示」の略。どのような変更が行われたのか正確に見たい
ときに便利です。
更新
リポジトリから作業コピーへ最新の変更点を取得するコマンド。作
業コピーの変更点に、他の人が行った変更をマージします。
注釈履歴
このコマンドはテキストファイル専用で、それぞれの行が最後に変
更された時の、リポジトリのリビジョンと作者を注釈表示します。
私たちの GUI の実装は TortoiseBlame と呼ばれ、リビジョン番号の
上にマウスを置くと、コミット日時やログメッセージも表示しま
す。
競合
リポジトリの変更がローカルにマージされる際、時には同じ行に変
更がある場合があります。この場合、 Subversion はどちらを使用す
るか自動的に決定できません。これを競合と呼びます。それ以降の
変更をコミットする前には、ファイルを手作業で編集し競合を解決
しなければなりません。
競合の解決
作業コピーのファイルが、マージ後に競合状態になったままになっ
た場合、人間がエディター(または TortoiseMerge)で競合を整理
しなければなりません。このプロセスは「競合の解決」と言われて
います。競合したファイルを解決済みにすると、コミットできるよ
うになります。
追加
ファイルやディレクトリをリポジトリに追加する Subversion コマン
ドです。新しい項目は、コミットした際にリポジトリに追加されま
す。
223
索引
シンボル
その場でインポート, 28
アイコン, 45
アクセス, 18
インストール, 1
インポート, 27
ウィンドウズのプロパティ, 46
ウェブサイト, 21
ウェブビュー, 137
エクスプローラー, xi
エクスポート, 129
オーバーレイ, 45, 218
オーバーレイの優先度, 218
キーワード, 82
キーワード展開, 82
クライアントフック, 163
クリーン, 79
クリーンアップ, 81
グラフ, 124
グループポリシー, 198, 199
コピー, 100, 121
コマンドライン, 202, 209, 209
コマンドラインクライアント, 211
コミット, 32
コミットを元に戻す, 194
コミットメッセージ, 52, 193
コミットモニター, 176
コンテキストメニュー, 23
コンテキストメニューエントリ, 199
サウンド, 138
サーバーの移動, 130
サーバーサイドアクション, 121
サーバービューアー, 121
サーバー側フックスクリプト, 20
ショートカット, 196
ステータス, 45, 47
スペルチェッカー, 220
タグ, 73, 100
チェックアウト, 29
チェックアウトリンク, 21
チェックイン, 32
ツリーの競合, 41
デプロイ, 198
ドメインコントローラ, 198
ドラッグハンドラ, 25
ドラッグ&ドロップ, 25
ネットワークフォルダー, 18
バグ追跡, 131
バグ追跡システム, 131, 132
バックアップ, 20
バージョン, 198
バージョン抽出, 179
バージョン管理, xi
バージョン管理の削除, 197
バージョン管理外, 130, 197
バージョン管理外の「作業コピー」, 129
バージョン管理外のファイル・フォルダー, 75
パターンマッチ, 76
パッチ, 116
ファイルのコピー, 73
ファイルのバージョン番号, 179
ファイルの移動, 73
ファイルを比較, 195
ファイル名の変更, 73
フォルダーの比較, 195
フック, 20
フックスクリプト, 20, 163
ブランチ, 73, 100
プラグイン, 187
プロキシサーバー, 153
プロジェクトプロパティ, 85
プロジェクトモニター, 176
ベンダプロジェクト, 195
マージ, 105
リビジョン範囲, 105
2つのツリー, 107
マージの競合, 111
マージツール, 72
マージ追跡, 110
マージ追跡ログ, 61
モニター中のプロジェクト, 176
リビジョン, 13, 124
リビジョンの比較, 69
リビジョングラフ, 124
リビジョンプロパティ, 62
リポジトリ, 7, 27
リポジトリ URL の変更, 130
リポジトリから分離, 197
リポジトリへのファイル追加, 27
リポジトリビューアー, 137
リポジトリブラウザー, 121
リポジトリ作成, 17
リモートコミット, 176
リリースとしてマーク, 100
リンク, 21
レジストリ, 170
ログ, 52
ログや作者の編集, 62
ログキャッシュ, 160
ログメッセージ, 52, 193
ロック, 112
ロールバック, 194
一時ファイル, 27
不完全なチェックアウト, 29
作成, 17
TortoiseSVN, 17
作業コピー, 11
作業コピーの作成, 29
作業コピーの状態, 45
共通プロジェクト, 195
再編成, 193
再配置, 130
224
索引
切り替え, 103
削除, 77, 77
取り消し, 79
右クリック, 23
右ドラッグ, 25
名前変更, 78, 121, 193
変更, 47
変更のエクスポート, 69
変更の取り消し, 79, 194
変更を元に戻す, 194
変更リスト, 50
変更点, 195
変更点の取得, 39
変更点の表示, 45
変更点の送信, 32
外部リポジトリ, 98
外部参照, 98, 195
展開, 76
履歴, 52
差分, 67, 116
差分ツール, 72
差分比較, 50
常に無視する, 139
新規ファイルのバージョン管理, 73
更新, 39, 193
更新チェック, 198
最大化, 27
最新バージョンのチェック, 198
機能の無効化, 199
比較, 68
注釈, 118
注釈履歴, 118
無視, 75
特殊なファイル, 29
画像の差分, 71
移動, 78, 193
移動したサーバー, 130
空のメッセージ, 193
競合, 10, 41
絞り込み, 62
統計, 64
翻訳, 220
自動化, 202, 208, 209, 209
解決, 41
言語パック, 220
設定, 138
認証, 26
認証キャッシュ, 26
読み取り専用, 112
課題追跡システム, 131, 187
賞賛, 118
辞書, 220
追加, 73
部分的なチェックアウト, 29
除外パターン, 139
auto-props, 84
C
CLI, 211
COM, 179, 187
COM SubWCRev インターフェイス, 184
F
FAQ, 192
G
GPO, 198
I
IBugtraqProvider, 187
M
Microsoft Word, 72
msi, 198
R
revprops, 62
S
SUBST ドライブ, 151
Subversion book, 7
Subversion のプロパティ, 82
SubWCRev, 179
SVN_ASP_DOT_NET_HACK, 199
T
TortoiseIDiff, 71
TortoiseSVN プロパティ, 85
TortoiseSVNリンク, 21
U
UNC パス, 18
Unified差分ファイル, 116
URL の変更, 130
URL ハンドラ, 208
V
ViewVC, 137
VS2003, 199
W
WebSVN, 137
Windowsシェル, xi
A
ASP プロジェクト, 199
225