変更・コミットのたびに、変更点をログメッセージに残しておくべきです。これを見れば、あとからどんな変更をなぜ行ったのかがわかりますし、開発プロセスの詳細なログにもなります。
リビジョンログダイアログは、ログメッセージをすべて取得して表示します。表示は 3 画面に分けられています。
上部ペインには、ファイル・フォルダへの変更のコミットごとのリビジョンを表示します。この概要には日付時間、そのリビジョンをコミットした人、ログメッセージの先頭が含まれています。
青く表示している行は、何かがこの開発ラインに (おそらくブランチから) コピーされてきたことを示しています。
中央ペインには、選択したリビジョンの全ログメッセージを表示します。
下部ペインには、選択したリビジョンで変更したファイル・フォルダの一覧を表示します。
しかしそれよりも多くのことを行います。プロジェクトの履歴情報取得できるような、コンテキストメニューを用意しています。
いろいろな場所からログダイアログを表示できます。
TortoiseSVN のコンテキストサブメニューから
プロパティページから
更新が終わった進行ダイアログから。前回の更新から変更のあったリビジョンのみ、ログダイアログに表示します。
上部ペインには、そのリビジョンで何が行われたかをまとめた アクション 列があります。4 つのアイコンが、それぞれ 1 列ずつ表示されます。
ファイルやディレクトリにそのリビジョンで変更がある場合、変更 アイコンが第一列に表示されます。
ファイルやディレクトリがそのリビジョンで追加された場合、追加 アイコンが第二列に表示されます。
ファイルやフォルダがそのリビジョンで削除された場合、削除 アイコンが第三列に表示されます。
ファイルやフォルダがそのリビジョンで置換された場合、置換 アイコンが第四列に表示されます。
ログダイアログの上部ペインには、より詳細な情報にアクセスするコンテキストメニューがあります。このメニューにはファイルでしか現れないものと、フォルダにしか現れないものがあります。
作業コピーと選択したリビジョンを比較します。デフォルトの差分ツールは、TortoiseSVN と共に提供されている TortoiseMerge です。フォルダに対するログダイアログの場合、変更のあったファイルを一覧表示し、個々のファイルそれぞれに対し変更点の検査ができます。
選択したリビジョンで行った変更点を、Unified-Diff ファイル (GNU patch 形式) で表示します。これには文脈内の数行で変更点のみ表示します。視覚的なファイル比較よりも読むのが大変ですが、すべての変更を一度にコンパクトな形式で確認できます。
選択したリビジョンを過去のリビジョンと比較できます。作業コピーとの比較と同じように動作します。
選択したリビジョンと作業 BASE のファイルの注釈をとり、差分ツールを使って注釈レポートを比較できます。詳細は、注釈履歴の差分項 をご覧ください (ファイルのみ)。
選択したリビジョンと以前のリビジョンの注釈をとり、差分ツールを使って結果を比較できます (フォルダのみ)。
選択したリビジョンのファイルを保存し、古いバージョンのファイルを取得します。
選択したファイルを、ファイルタイプに応じた規定のビューアか選択したプログラムで開きます。(ファイルのみ)
選択したリビジョン以降のファイルの注釈を取得します。(ファイルのみ)
選択したファイルやフォルダを検査するため、リポジトリブラウザを選択したリビジョンで開きます。
選択したリビジョンからブランチ・タグを作成します。タグを作成し忘れていたり、そのリリースに入れるはずだったすでにコミットした変更を取得するのに便利です。
選択したリビジョンに作業コピーを更新します。作業コピーを過去の状態に時間をさかのぼるのに便利です。1 ファイルだけでなく、作業コピー全体のディレクトリを更新するのが最善です。そうでなければ作業コピーに矛盾が生じ、変更をコミットできなくなってしまいます。
選択したリビジョンの変更を取り消します。作業コピーの変更が取り消されるので、この操作はリポジトリ全体には影響を及ぼしません! そのリビジョンのみの変更を元に戻すということに注意してください。以前のリビジョンで作業コピーのファイル全体を置き換えるわけではありません。他に関係ない変更をおこなってから、以前の変更を元に戻すのに便利です。ローカルで変更する場合は、このコマンドは作業コピーに変更をマージします。
以前のリビジョンに変更を戻します。既にいくつか変更を行っており、本当にリビジョン N へ戻したい場合、このコマンドが必要です。繰り返しますが、変更の取り消しは作業コピーで行われますので、変更をコミットするまでこの操作はリポジトリに影響を 与えません。これは、ファイル・フォルダを以前のリビジョンに置き換えて、選択したリビジョン以降の変更を すべて 取り消してしまうことに注意してください。ローカルで変更している場合、このコマンドはその変更を作業コピーにマージします。
異なる作業コピーにあるリビジョンを選択し、マージを行います。フォルダ選択ダイアログにより、マージ結果の作業コピーを選択できますが、確認ダイアログはなく、また動作チェックもできません。変更していない作業コピーを用い、選択したリビジョンをマージするのに失敗したら変更を取り消すのがうまい方法です! これはあるブランチから別のブランチへ、選択したリビジョンをマージするのに便利です。
選択したリビジョンを選択したフォルダに、改めてチェックアウトします。URL とリビジョンを確認するダイアログが現れるので、チェックアウトする場所を選択してください。
選択したファイルやフォルダを、リビジョンを選んでエクスポートできます。URL とリビジョンを確認するダイアログが現れるので、エクスポートする場所を選択してください
以前行ったコミットのログメッセージや作者を編集できます。どのように行うかは、ログメッセージや作者の変更項 をご覧ください。
選択したリビジョンのログ詳細をクリップボードにコピーできます。これにはリビジョン番号、著者、日時、ログメッセージ、変更した項目の一覧がコピーされます。
入力したテキストでログメッセージを検索できます。入力したログメッセージと、Subversion が作成した動作概要 (下部ペインに表示) も検索範囲になります。大文字小文字は区別しません。
同時に 2 つのリビジョンを (Ctrl を押しながら) 選択すると、コンテキストメニューの内容が変わり、以下の機能だけになります。
選択した 2 つのリビジョンを視覚差分ツールで比較します。デフォルトの差分ツールは、TortoiseSVN と共に提供されている TortoiseMerge です。
これをフォルダに対して行った場合、さらに変更のあったファイルを一覧表示するダイアログを表示し、diff のオプションを指定できます。リビジョン比較ダイアログについては、フォルダの比較項 をご覧ください。
2 つのリビジョンの注釈をとり、視覚差分ツールを使って比較できます。詳細は、注釈履歴の差分項 をご覧ください。
選択した 2 つのファイルの差分を、Unified-Diff ファイルで表示します。ファイルとフォルダで動作します。
前述したように、ログメッセージをクリップボードにコピーします。
前述したように、ログメッセージを検索します。
2 つ以上のリビジョンを選択 (通常 Ctrl や Shift を押しながら選択) すると、 コンテキストメニューにリビジョンの範囲を指定してすべての変更を取り消す項目が現れます。これがリビジョンのグループを一度に元に戻す、簡単な方法です。
また、前述のとおり、選択したリビジョンを別の作業コピーにマージできます。
ログダイアログの下部ペインにもコンテキストメニューがあり、以下を行えます。
選択したファイルの選択したリビジョンの差分を表示します。このコンテキストメニューは、ファイルに 変更 がある時のみ有効です。
選択したファイルの、選択したリビジョンとその前のリビジョンの注釈をとり、視覚差分ツールで比較できます。詳細は、注釈履歴の差分項 をご覧ください。
選択したファイルを、ファイルタイプに応じた規定のビューアか選択したプログラムで開きます。
このリビジョンの選択したファイルへの変更を、元に戻します。
選択した項目の Subversion 属性を表示します。
選択した 1 ファイルのリビジョンログを表示します。
そのファイルがまだ古いバージョンの場合、選択したリビジョンのファイルを保存します。
私たちが変更と言ったり差分と言ったりしていることに、お気づきのことと思います。では差分とはなんでしょうか?
Subversion は、2 つの異なるものを表すのにリビジョン番号を使用します。一般的にリビジョンはその時点でのリポジトリの状態を表しますが、そのリビジョンで作成されたチェンジセットを表すのにも使用します。例えば 「r1234 で完了」 と言ったときには、r1234 でコミットした実装した機能 X の変更と言う意味になります。どの意味で使用しているかをはっきりさせるために、2 つの用語を使い分けています。
リビジョン N とリビジョン M を選択すると、その2つのリビジョンの 差分 をコンテキストメニューで表示するようになります。Subversion 用語で、これは diff -r M:N となります。
リビジョン N を選択した場合、そのリビジョンで行った 変更 をコンテキストメニューで表示するようになります。Subversion 用語で、これは diff -r N-1:N や diff -c N となります。
下部ペインには、選択したリビジョンで変更したすべてのファイルを表示しています。そのため、常に 変更 をコンテキストメニューで表示できます。
ログダイアログは以下のような理由で、すべての変更を常に表示するわけではありません。
For a large repository there may be hundreds or even thousands of changes and fetching them all could take a long time. Normally you are only interested in the more recent changes. By default, the number of log messages fetched is limited to 100, but you can change this value in → (TortoiseSVN ダイアログ設定 1項),
コピー/名前の変更が発生したら止める チェックボックスにチェックがあると、リポジトリのどこか別の場所にコピーされたファイルやフォルダがあった時点でログの表示が停止します。これはブランチ (やタグ) を参照するときに、ブランチのルートで停止するので便利です。また、ブランチのみの変更を素早く表示できます。
通常、このオプションにチェック付けないままにしておきたいのではないでしょうか。TortoiseSVN はチェックボックスの状態を記憶していますので、あなたのお好みの通りになります。
マージダイアログからログ参照ダイアログを表示すると、このチェックボックスは、デフォルトでは常にチェックされています。これはマージがブランチの変更を調べるためで、ブランチのルートを越えて戻るようなことは、このインスタンスでは理解できません。
Subversion は現在、名前の変更をコピー・削除で行います。そのため、このオプションにチェックがついていると、ファイルやフォルダの名前を変更している所でログの表示が停止するということに注意してください
ログメッセージをもっと見たい場合は、 をクリックして次の 100 件のログメッセージを取得してください。必要なだけ繰り返せます。
このボタンの隣に、前回使用したオプションを記憶している、マルチファンクションボタンがあります。三角をクリックすると他のオプションを指定できます。
リビジョンの範囲を指定する場合、 を使用してください。ダイアログが表示されるので、開始リビジョンと終了リビジョンを指定してください。
最新リビジョンからリビジョン 1 へ すべての ログメッセージが見たければ、 を押してください。
Subversion 1.5 以降では、属性を利用してマージ情報を保持しています。これにより、マージでの変更点の詳細な履歴を得られます。例えば、ブランチで新機能を開発し、ブランチをトランクにマージした場合、たとえブランチでの開発で 1000 コミットしたとしても、トランクでのその機能の開発には、1 コミットしかしていないことになってしまいます。
コミットにマージが含まれるリビジョンの詳細を見る場合、マージされたリビジョンを含める チェックボックスを使用してください。これによりログメッセージを再取得しますが、マージされたリビジョン由来のログメッセージの挿入も行います。マージされたリビジョンは、別ツリーで変更されているので、灰色で表示します。
もちろん、マージは決して単純ではありません! ブランチでの機能開発中、メインラインコードと同期を取り続けるために、トランクからたびたび行わなければならないでしょう。そのため、ブランチのマージ履歴には、別レイヤのマージ履歴が含まれていることでしょう。ログダイアログでは、異なるレイヤをインデントレベルで表します。
時には、一度入力したログメッセージを変更したいこともあるでしょう。綴り間違いがあったり、またメッセージを改善、その他の理由で変更したくなるかもしれません。また、コミットした作者を変更した区なるかもしれません。認証のセットアップ方法を忘れてしまったとか……
Subversion では、リビジョンのログメッセージや作者をいつでも変更できます。しかしその変更を元に戻せない (この変更はバージョン管理外になります) ので、デフォルトではこの機能は無効になっています。これを有効にするには、pre-revprop-change フックをセットアップする必要があります。この手順の詳細については、Subversion Bookの Hook Scripts をご覧ください。(訳注 日本語では フックスクリプトをご覧ください) Windows マシンでのフックの実装については、フックスクリプト項 をご覧ください。
一度、サーバに必要なフックをセットアップしてしまえば、任意の作者とログメッセージを変更できます。ログダイアログの上部ペインでコンテキストメニューを使用してください。
Subversion のリビジョン属性はバージョン管理されないため、そういった属性 (例: svn:log コミットメッセージ属性) を変更すると、以前の値を 完全に 上書きしてしまいます。
興味あるログメッセージを表示するよう限定するなら、何百もあるリストをスクロールするよりも、ログダイアログの上端にあるフィルタコントロールを使用したほうがいいです。開始終了日のコントロールで日付の範囲をしてください。検索ボックスで入力した部分文字列を持つメッセージだけを表示できます。
検索アイコンをクリックして、検索したい情報を選択してください。また正規表現モードも選択できます。通常はシンプルなテキスト検索があれば十分でしょうが、もっと柔軟な検索語句を指定したい場合、正規表現を使用できます。ボックスの上にマウスを持っていくと、正規表現の使い方のヒントをツールチップで表示します。オンラインドキュメントやチュートリアルは http://www.regular-expressions.info/ にもあります。
このフィルタは、すでに取得したメッセージにのみ効果があることに注意してください。リポジトリからメッセージをダウンロードするような動作はしません。
また、下部ペインのパス名を、変更されたパスで無関係なものは表示しない チェックボックスでフィルタできます。関係するパスは、ログを表示するのに使用するパスを含んでいます。フォルダのログを取得する場合、そのフォルダ以下のログを取得することを意味しています。ファイルに対しては、その 1 ファイルのみであることを意味しています。チェックボックスは 3 状態をとります。すべてのパスを表示する、または無関係なものを灰色にする、無関係なものを完全に隠すです。
時には運用手順として、ログメッセージを特定のフォーマットにする必要があるかもしれません。これは変更点を説明するテキストが、上部ペインに表示する短縮サマリに表示されないということです。tsvn:logsummary 属性を使用して、上部ペインに表示しているログメッセージの一部を抽出できます。この属性の使い方は、TortoiseSVN のプロジェクト属性項 をご覧ください。
ログダイアログの ボタンはリビジョンについての興味深い情報を表示します。作業者が何人いるのか、コミットは何回行われているのか、週ごとの進行、その他といった情報です。これで、誰ががんばり屋で誰がなまけ者か一目で分かります。;-)
このグラフは、プロジェクト内のどのユーザがアクティブかを、単純なヒストグラム、積み重ねヒストグラム、円グラフで表します。
少数の主要な作者と、多数のこまかな協力者がいるところでは、小さなセグメントが多くなり、グラフが読みにくくなります。グラフの下にあるスライダを使用してしきい値 (全コミットにおけるパーセンテージ) を設定し、活動状況がしきい値以下の人を その他 カテゴリにします。
このページでは、コミット回数 と 作者から、プロジェクトの活動状況をグラフで表示します。これによりプロジェクトがいつ活動していたか、そのとき誰が作業したかといった判断材料になるでしょう。
複数の作者がいる場合、グラフの線がたくさん表示されます。ここで 2 通りの表示があります。通常 は、作者の活動状況ごとに表示し、積み重ね は、作者の活動状況を積み重ねて表示します。後者では、グラフを読みやすくするため、線が交差するのを避けますが、作者ごとに表示した方が見やすいでしょう。
デフォルトでは、分析する際、ユーザ名の大文字と小文字を区別します。そのため、PeterEgan と PeteRegan というユーザは別人として扱われます。しかし多くの場合、ユーザ名の大文字と小文字を区別しておらず、時々混同して入力されます。つまり、DavidMorgan と davidmorgan を同一として扱うということです。作者名の大文字/小文字を区別しない チェックボックスを使用して、どのように扱うかを制御してください。
この統計はログダイアログと同じ期間をカバーするのに注意してください。1 リビジョンしか表示していないときには、統計には大した情報は現れません。
サーバに到達せず、ログキャッシュを有効にしている場合、ログダイアログやリビジョングラフはオフラインモードで利用できます。これはキャッシュからのデータを使用し、作業を継続できますが、おそらく最新でも完全でもありません。
新しいログメッセージを取得するためサーバを再チェックする場合、単純に F5 で表示を更新できます。ログキャッシュを使用する場合 (デフォルトで有効)、新しいログメッセージがあるかリポジトリをチェックし、新しいもののみを取得します。ログキャッシュがオフラインモードだった場合、オンラインモードにしようともします。
ログキャッシュを使用しており、メッセージの内容や作者を変更したい場合、Shift-F5 や Ctrl-F5 で表示しているメッセージをサーバから再取得し、ログキャッシュを更新できます。これは現在表示しているメッセージにしか効果はなく、そのリポジトリのキャッシュ全体が無効になるわけではないことに注意してください。