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

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

リビジョンログダイアログは、ログメッセージをすべて取得して表示します。表示は 3 画面に分けられています。

しかしそれよりも多くのことを行います。プロジェクトの履歴情報取得できるような、コンテキストメニューを用意しています。

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

図 4.15. リビジョンログダイアログ

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


いろいろな場所からログダイアログを表示できます。

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

  • プロパティページから

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

リポジトリが利用できない場合、オフラインモード項 で説明する、オフラインにしますか? ダイアログを目にすることになります。

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

上部ペインには、そのリビジョンで何が行われたかをまとめた アクション 列があります。4 つのアイコンが、それぞれ 1 列ずつ表示されます。

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

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

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

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

追加情報の取得

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

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


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

作業コピーとの比較

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

作業中の BASE との比較と注釈

選択したリビジョンと作業中の BASE にあるファイルの注釈をとり、差分ツールを使って注釈レポートを比較できます。詳細は、注釈履歴の差分項 をご覧ください (ファイルのみ)。

unified diff で変更表示

選択したリビジョンで行った変更点を、Unified-Diff ファイル (GNU patch 形式) で表示します。これには文脈内の数行で変更点のみ表示します。視覚的なファイル比較よりも読むのが大変ですが、すべての変更を一度にコンパクトな形式で確認できます。

前のリビジョンとの比較

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

前のリビジョンとの比較と注釈

ファイルを選択できるように、「変更されたファイル」ダイアログを表示します。選択したリビジョンと直前のリビジョンの注釈をとり、ビジュアル差分ツールを使って結果を比較できます (フォルダのみ)。

リビジョンを保存...

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

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

選択したファイルを、ファイルタイプに応じた規定のビューアか選択したプログラムで開きます。(ファイルのみ)

注釈履歴...

選択したリビジョン以降のファイルの注釈を取得します。(ファイルのみ)

リポジトリの閲覧

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

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

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

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

選択したリビジョンに作業コピーを更新します。時間をさかのぼり、作業コピーを過去の状態にしたり、リポジトリにさらにコミットが行われており、作業コピーを一度に更新したい場合に便利です。1 ファイルだけでなく、作業コピー全体のディレクトリを更新するのが最善です。そうでなければ作業コピーに矛盾が生じ、変更をコミットできなくなってしまいます。

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

このリビジョンへ元に戻す

以前のリビジョンに変更を戻します。既にいくつか変更を行っており、本当にリビジョン N へ戻したい場合、あなたの求めるものがこのコマンドです。変更の取り消しは作業コピーで行われますので、変更をコミットするまでこの操作はリポジトリに影響を 与えません。これは、ファイル・フォルダを以前のリビジョンに置き換えて、選択したリビジョン以降の変更を すべて 取り消してしまうことに注意してください。ローカルで変更している場合、このコマンドはその変更を作業コピーにマージします。

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

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

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

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

このリビジョンにおける変更を元に戻す

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

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

内部的に起こっていることは、ひとつのリビジョンに対して逆マージを Subversion が実行し、以前のコミットの効果を元に戻すということです。

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

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

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

チェックアウト...

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

エクスポート...

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

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

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

リビジョン属性の表示

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

クリップボードにコピー

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

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

入力したテキストでログメッセージを検索できます。入力したログメッセージと、Subversion が作成した動作概要 (下部ペインに表示) も検索範囲になります。大文字小文字は区別しません。

図 4.17. 2 リビジョン選択時の上部ペインコンテキストメニュー

2 リビジョン選択時の上部ペインコンテキストメニュー


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

リビジョンを比較

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

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

リビジョンの注釈履歴

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

Unified Diff 形式で差分を表示

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

クリップボードにコピー

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

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

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

2 つ以上のリビジョンを選択 (通常 CtrlShift を押しながら選択) すると、 コンテキストメニューにリビジョンの範囲を指定してすべての変更を取り消す項目が現れます。これがリビジョンのグループを一度に元に戻す、簡単な方法です。

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

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

図 4.18. ログダイアログ下部ペインのコンテキストメニュー

ログダイアログ下部ペインのコンテキストメニュー


ログダイアログの下部ペインにもコンテキストメニューがあり、以下を行えます。

変更の表示

Show changes made in the selected revision for the selected file.

変更の注釈

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

unified diff での表示

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

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

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

注釈履歴...

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

このリビジョンにおける変更を元に戻す

このリビジョンの選択したファイルへの変更を、元に戻します。

属性の表示

選択した項目の Subversion 属性を表示します。

ログの表示

選択した 1 ファイルのリビジョンログを表示します。

マージログの取得

選択した 1 ファイルに対して、マージされた変更を含めリビジョンログを表示します。詳細は マージ追跡機能項 をご確認ください。

リビジョンを保存...

そのファイルがまだ古いバージョンの場合、選択したリビジョンのファイルを保存します。

ティップ

私たちが変更と言ったり差分と言ったりしていることに、お気づきのことと思います。では差分とはなんでしょうか?

Subversion は、2 つの異なるものを表すのにリビジョン番号を使用します。一般的にリビジョンはその時点でのリポジトリの状態を表しますが、そのリビジョンで作成されたチェンジセットを表すのにも使用します。例えば 「r1234 で完了」 と言ったときには、r1234 でコミットした実装した機能 X の変更と言う意味になります。どの意味で使用しているかをはっきりさせるために、2 つの用語を使い分けています。

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

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

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

詳細なログメッセージの取得

ログダイアログは以下のような理由で、すべての変更を常に表示するわけではありません。

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

  • コピー/名前の変更が発生したら止める チェックボックスにチェックがあると、リポジトリのどこか別の場所にコピーされたファイルやフォルダがあった時点でログの表示が停止します。これはブランチ (やタグ) を参照するときに、ブランチのルートで停止するので便利です。また、ブランチのみの変更を素早く表示できます。

    通常、このオプションにチェック付けないままにしておきたいのではないでしょうか。TortoiseSVN はチェックボックスの状態を記憶していますので、あなたのお好みの通りになります。

    マージダイアログからログ参照ダイアログを表示すると、このチェックボックスは、デフォルトでは常にチェックされています。これはマージがブランチの変更を調べるためで、ブランチのルートを越えて戻るようなことは、このインスタンスでは理解できません。

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

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

このボタンの隣に、前回使用したオプションを記憶している、マルチファンクションボタンがあります。三角をクリックすると他のオプションを指定できます。

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

最新リビジョンからリビジョン 1 へ すべての ログメッセージが見たければ、すべて表示 を押してください。

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

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

フォルダのログを表示する際、強調されたリビジョンは、そのフォルダの近辺にある最大のリビジョンになります。これには作業コピーのクロールが必要です。クロールは別スレッドで実行するため、ログ表示に遅延は起こりませんが、フォルダの強調結果に特定のフォルダが現れないことがあります。

マージ追跡機能

Subversion 1.5 以降では、属性を利用してマージ情報を保持しています。これにより、マージでの変更点の詳細な履歴を得られます。例えば、ブランチで新機能を開発し、ブランチをトランクにマージした場合、たとえブランチでの開発で 1000 コミットしたとしても、トランクでのその機能の開発には、1 コミットしかしていないことになってしまいます。

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

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

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

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

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

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

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

Subversion では、必要に応じてリビジョン属性をいつでも変更できます。しかし、その変更を元に戻せない (この変更はバージョン管理外になります) ので、デフォルトではこの機能は無効になっています。有効にするには、pre-revprop-change フックをセットアップしなければなりません。この手順の詳細については、Subversion Book の Hook Scripts をご覧ください。(訳注 日本語では フックスクリプトをご覧ください) Windows マシンでのフックの実装については、サーバ側フックスクリプト項 をご覧ください。

一度、必要なフックをサーバにセットアップしてしまえば、任意のリビジョンに対して、作者とログメッセージ (もしくはその他のリビジョン属性) を変更できます。ログダイアログの上部ペインからコンテキストメニューを使用してください。中央ペインのコンテキストメニューを使用しても、ログメッセージを編集できます。

警告

Subversion のリビジョン属性はバージョン管理されないため、そういった属性 (例: svn:log コミットメッセージ属性) を変更すると、以前の値を 完全に 上書きしてしまいます。

ログメッセージのフィルタリング

興味あるログメッセージを表示するよう限定するなら、何百もあるリストをスクロールするよりも、ログダイアログの上端にあるフィルタコントロールを使用したほうがいいです。開始終了日のコントロールで日付の範囲をしてください。検索ボックスで入力した部分文字列を持つメッセージだけを表示できます。

Click on the search icon to select which information you want to search in, and to choose regex mode. Normally you will only need a simple sub-string search, but if you need to more flexible search terms, you can use regular expressions. If you hover the mouse over the box, a tooltip will give hints on how to use the regex functions, or the sub-string functions. The filter works by checking whether your filter string matches the log entries, and then only those entries which match the filter string are shown.

Simple sub-string search works in a manner similar to a search engine. Strings to search for are separated by spaces, and all strings must match. You can use a leading - to specify that a particular sub-string is not found (invert matching for that term), and you can use ! at the start of the expression to invert matching for the entire expression. You can use quote marks to surround a string which must contain spaces, and if you want to search for a literal quotation mark you can use two quotation marks together as a self-escaping sequence. Note that the backslash character is not used as an escape character and has no special significance in simple sub-string searches. Examples will make this easier:

Alice Bob -Eve

searches for strings containing both Alice and Bob but not Eve

!Alice Bob

searches for strings which do not contain both Alice and Bob

!-Alice -Bob

do you remember De Morgan's theorem? NOT(NOT Alice AND NOT Bob) reduces to (Alice OR Bob).

"Alice and Bob"

searches for the literal expression 「Alice and Bob

""

searches for a double-quote anywhere in the text

"Alice says ""hi"" to Bob"

searches for the literal expression 「Alice says "hi" to Bob

Describing the use of regular expression searches is beyond the scope of this manual, but you can find online documentation and a tutorial at http://www.regular-expressions.info/.

このフィルタは、すでに取得したメッセージにのみ効果があることに注意してください。リポジトリからメッセージをダウンロードするような動作はしません。

You can also filter the path names in the bottom pane using the Show only affected paths checkbox. Affected paths are those which contain the path used to display the log. If you fetch the log for a folder, that means anything in that folder or below it. For a file it means just that one file. Normally the path list shows any other paths which are affected by the same commit, but in grey. If the box is checked, those paths are hidden.

時には運用手順として、ログメッセージを特定のフォーマットにする必要があるかもしれません。これは変更点を説明するテキストが、上部ペインに表示する短縮サマリに表示されないということです。tsvn:logsummary 属性を使用して、上部ペインに表示しているログメッセージの一部を抽出できます。この属性の使い方は、TortoiseSVN のプロジェクト属性項 をご覧ください。

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

ログのフォーマット変更は、subversion の属性にアクセスできることに依存しているため、チェックアウトした作業コピーを使用するときにだけ、結果を目にするでしょう。リモートから属性を取得するのは遅い操作ですので、作動中のこの機能をリポジトリブラウザから目にすることはないでしょう。

統計情報

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

統計ページ

このページでは自分で検討できるように、特定の期間やリビジョン番号で、最小・最大・平均といった数値を提供します。

「作者によるコミット」ページ

図 4.20. 「作者によるコミット」ヒストグラム

「作者によるコミット」ヒストグラム


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

図 4.21. 「作者によるコミット」円グラフ

「作者によるコミット」円グラフ


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

「日毎のコミット数」ページ

図 4.22. 「日毎のコミット数」グラフ

「日毎のコミット数」グラフ


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

複数の作者がいる場合、グラフの線がたくさん表示されます。ここで 2 通りの表示があります。通常 は、作者の活動状況ごとに表示し、積み重ね は、作者の活動状況を積み重ねて表示します。後者では、グラフを読みやすくするため、線が交差するのを避けますが、作者ごとに表示した方が見やすいでしょう。

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

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

オフラインモード

図 4.23. オフライン化ダイアログ

オフライン化ダイアログ


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

ここでは以下の 3 種のオプションがあります。

オフラインにする

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

常にオフライン

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

キャンセル

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

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

表示の更新

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

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