svn logコマンドリファレンス:オプション一覧と詳細解説

svn log コマンドリファレンス:オプション一覧と詳細解説

Subversion (SVN) は、ソフトウェア開発におけるバージョン管理システムとして広く利用されています。その中でも svn log コマンドは、リポジトリの変更履歴を確認するための最も重要なツールの一つです。コミットログは、プロジェクトの進化を理解し、問題の追跡や過去のバージョンへのアクセスを可能にします。本記事では、svn log コマンドのオプションを網羅的に解説し、様々なシナリオにおける効果的な使い方を詳細に説明します。

基本的な使い方

svn log コマンドの最もシンプルな使い方は、対象となるリポジトリのパスを指定することです。

bash
svn log REPOSITORY_PATH

これにより、指定されたリポジトリの最新のコミットログが表示されます。もし作業コピー内でコマンドを実行する場合は、リポジトリのパスを省略できます。

bash
svn log

この場合、作業コピーが関連付けられているリポジトリのログが表示されます。

オプション一覧と詳細解説

svn log コマンドは、様々なオプションを提供しており、目的に応じてログ出力をカスタマイズできます。以下に主要なオプションとその詳細な解説を示します。

1. --revision (または -r):リビジョン範囲の指定

-r オプションを使用すると、特定のコミットリビジョンまたはリビジョン範囲のログのみを表示できます。様々な指定方法があります。

  • 単一リビジョン:

    bash
    svn log -r 123 REPOSITORY_PATH

    リビジョン番号123のコミットログが表示されます。
    * リビジョン範囲:

    bash
    svn log -r 100:200 REPOSITORY_PATH

    リビジョン番号100から200までのコミットログが表示されます(100と200を含む)。
    * 特定のリビジョンから最新まで:

    bash
    svn log -r 100:HEAD REPOSITORY_PATH

    リビジョン番号100から最新のリビジョンまでのコミットログが表示されます。 HEAD はリポジトリの最新リビジョンを表します。
    * 最初のリビジョンから特定のリビジョンまで:

    bash
    svn log -r 1:100 REPOSITORY_PATH

    最初のリビジョン (通常は1) からリビジョン番号100までのコミットログが表示されます。
    * 特定の日付:

    bash
    svn log -r "{2023-10-26}:{2023-10-27}" REPOSITORY_PATH

    2023年10月26日から2023年10月27日までのコミットログが表示されます。日付は {} で囲む必要があります。日付の形式は YYYY-MM-DD です。日付と時間を指定することも可能です。例えば、{2023-10-26 10:00:00}:{2023-10-26 17:00:00} のように指定できます。
    * キーワード BASE:

    bash
    svn log -r BASE REPOSITORY_PATH

    作業コピーのベースリビジョン(最後に更新されたリビジョン)のコミットログが表示されます。
    * キーワード HEAD:

    bash
    svn log -r HEAD REPOSITORY_PATH

    リポジトリの最新リビジョンのコミットログが表示されます。これは -r HEAD を省略した場合と同じです。
    * キーワード COMMITTED:

    bash
    svn log -r COMMITTED REPOSITORY_PATH

    作業コピーの項目が最後に変更されたリビジョンのコミットログが表示されます。
    * キーワード PREV:

    bash
    svn log -r PREV REPOSITORY_PATH

    作業コピーのベースリビジョンの直前のリビジョンのコミットログが表示されます。

2. --quiet (または -q):変更されたパスの表示抑制

-q オプションを使用すると、ログメッセージのみが表示され、変更されたファイルやディレクトリのリストは表示されません。大規模な変更セットが含まれるログを簡潔に確認したい場合に便利です。

bash
svn log -q REPOSITORY_PATH

3. --verbose (または -v):変更されたパスの詳細表示

-v オプションを使用すると、ログメッセージに加えて、各コミットで変更されたファイルやディレクトリのリストが表示されます。さらに、各ファイルに対して行われた変更の種類(追加、修正、削除など)も表示されます。

bash
svn log -v REPOSITORY_PATH

-v オプションは、-q オプションとは対照的に、詳細な変更履歴を把握したい場合に役立ちます。

4. --limit:表示するログエントリの数の制限

--limit オプションを使用すると、表示するログエントリの数を制限できます。

bash
svn log --limit 10 REPOSITORY_PATH

この例では、最新の10件のコミットログのみが表示されます。 --limit オプションは、膨大な数のログエントリから必要な情報を見つけやすくするために役立ちます。

5. --stop-on-copy:コピー元までの追跡停止

--stop-on-copy オプションは、コピー操作が行われた時点でログの追跡を停止します。通常、svn log はファイルまたはディレクトリの履歴をコピー元まで遡って表示しますが、--stop-on-copy オプションを使用すると、コピー元となったリビジョン以降の履歴は表示されません。

bash
svn log --stop-on-copy REPOSITORY_PATH/path/to/file

このオプションは、特定のファイルの直接的な変更履歴のみに関心があり、コピー元の履歴まで追跡する必要がない場合に便利です。

6. --incremental:Subversion形式の出力

--incremental オプションを使用すると、ログ出力がSubversionの内部形式で表示されます。これは主にSubversionの開発者や、他のツールで解析するためにログ情報をプログラムで処理する場合に利用されます。

bash
svn log --incremental REPOSITORY_PATH

通常のエンドユーザーが直接使用する機会は少ないオプションです。

7. --xml:XML形式での出力

--xml オプションを使用すると、ログ出力がXML形式で表示されます。これにより、ログ情報を解析して他のシステムに統合したり、カスタムレポートを作成したりすることが容易になります。

bash
svn log --xml REPOSITORY_PATH

XML形式の出力は、プログラムによる処理に適しています。例えば、スクリプトを使用して特定の情報を抽出したり、データベースにログ情報を格納したりすることができます。

8. --use-merge-history:マージ情報の利用

--use-merge-history オプションは、マージ操作に関する情報をログに含めるかどうかを制御します。デフォルトでは、svn log はマージ操作を考慮してログを表示します。つまり、特定のファイルが他のブランチからマージされた場合、マージ元のブランチのログも表示されることがあります。

--use-merge-history オプションを省略した場合、または --use-merge-history を明示的に指定した場合、マージ情報が考慮されます。一方、--no-use-merge-history オプションを使用すると、マージ情報は無視され、指定されたパスの直接的な変更履歴のみが表示されます。

bash
svn log --use-merge-history REPOSITORY_PATH

bash
svn log --no-use-merge-history REPOSITORY_PATH

マージ情報を含めるかどうかは、追跡したい情報の種類によって選択する必要があります。

9. --search:ログメッセージの検索

--search オプションを使用すると、ログメッセージに特定の文字列が含まれているコミットのみを表示できます。

bash
svn log --search "bug fix" REPOSITORY_PATH

この例では、ログメッセージに “bug fix” という文字列が含まれているコミットのみが表示されます。 --search オプションは大文字と小文字を区別します。

10. --show-revprops:リビジョンプロパティの表示

--show-revprops オプションを使用すると、コミットに関連付けられたリビジョンプロパティを表示できます。リビジョンプロパティは、コミットに関する追加情報(例えば、課題追跡システムのチケット番号など)を格納するために使用されます。

bash
svn log --show-revprops REPOSITORY_PATH

デフォルトでは、svn logsvn:author, svn:date, svn:log のリビジョンプロパティを表示します。 --show-revprops オプションに特定のプロパティ名を指定することもできます。

bash
svn log --show-revprops "my:ticket" REPOSITORY_PATH

この例では、my:ticket という名前のリビジョンプロパティのみが表示されます。すべてのリビジョンプロパティを表示するには、--show-revprops "*"を使用します。

11. --no-diff-added:追加された行の差分表示を抑制

--no-diff-addedオプションは、-vオプションと一緒に使用すると、差分出力から追加された行の表示を抑制します。これにより、変更された行と削除された行に焦点を当ててレビューできます。

bash
svn log -v --no-diff-added REPOSITORY_PATH

12. --diff-copyfrom:copyfrom元との差分表示

-vオプションと一緒に使用すると、-v オプションで表示されるファイル一覧に、コピー元ファイルとの差分も表示します。 コピー元からの変更点を把握したい場合に便利です。

bash
svn log -v --diff-copyfrom REPOSITORY_PATH

13. --diff-ignore-space-change:空白の変更を無視

-vオプションと一緒に使用すると、差分出力において空白の変更を無視します。インデントなどの空白のみの変更を無視して、実質的な変更点のみを確認したい場合に役立ちます。

bash
svn log -v --diff-ignore-space-change REPOSITORY_PATH

14. --diff-unified:unified diff形式での出力行数指定

-vオプションと一緒に使用すると、unified diff形式での出力行数を指定できます。デフォルトは3行ですが、このオプションで任意の行数を指定できます。より多くの文脈を含んだ差分を確認したい場合に便利です。

bash
svn log -v --diff-unified=5 REPOSITORY_PATH

15. --no-diff-deleted:削除された行の差分表示を抑制

--no-diff-deletedオプションは、-vオプションと一緒に使用すると、差分出力から削除された行の表示を抑制します。これにより、追加された行と変更された行に焦点を当ててレビューできます。

bash
svn log -v --no-diff-deleted REPOSITORY_PATH

16. --targets:ターゲットファイルのリストファイル指定

--targets オプションは、追跡するファイルをリストしたファイルを指定することで、そのリストに含まれるファイルのみのログを表示します。複数のファイルについてログを確認したい場合に便利です。

bash
svn log --targets targets.txt REPOSITORY_PATH

targets.txt には、ファイルパスを1行に1つずつ記述します。

17. --depth:検索深度の指定

--depth オプションは、操作を再帰的に行うかどうかを指定します。指定できる値は empty, files, immediates, infinity です。empty は対象ディレクトリのみ、files は対象ディレクトリのファイルのみ、immediates は対象ディレクトリのファイルと直下のディレクトリのみ、infinity は対象ディレクトリ以下すべてを意味します。

bash
svn log --depth immediates REPOSITORY_PATH

18. --username--password:認証情報の指定

リポジトリへのアクセスに認証が必要な場合は、--username--password オプションを使用してユーザー名とパスワードを指定できます。

bash
svn log --username myuser --password mypassword REPOSITORY_PATH

ただし、パスワードをコマンドラインに直接記述することはセキュリティ上のリスクがあるため、可能な限り避けるべきです。代わりに、Subversionの認証キャッシュを使用するか、--password オプションを省略してパスワードの入力を促す方が安全です。

実践的な例

以下に、svn log コマンドの様々なオプションを組み合わせた実践的な例を示します。

例1:特定の日付範囲における、特定ファイルの変更履歴をXML形式で出力する。

bash
svn log -r "{2023-10-20}:{2023-10-27}" --xml REPOSITORY_PATH/path/to/file.txt

この例では、2023年10月20日から2023年10月27日までの期間における path/to/file.txt ファイルの変更履歴をXML形式で出力します。

例2:ログメッセージに “performance” という単語が含まれる、最新の5件のコミットを表示する。

bash
svn log --search "performance" --limit 5 REPOSITORY_PATH

この例では、ログメッセージに “performance” という単語が含まれる最新の5件のコミットを表示します。

例3:特定のリビジョンにおける、変更されたファイルのリストと、各ファイルの変更内容を表示する。

bash
svn log -v -r 150 REPOSITORY_PATH

この例では、リビジョン150におけるコミットで変更されたファイルのリストと、各ファイルの具体的な変更内容(追加、修正、削除など)を表示します。

例4:あるディレクトリの直下にあるファイルに対して、マージ履歴を無視してログを出力する。

bash
svn log --no-use-merge-history --depth files REPOSITORY_PATH/some/directory

この例では、some/directory ディレクトリにあるファイルに関して、マージ履歴を無視したログを出力します。--depth filesオプションによってファイルのみが対象となります。

まとめ

svn log コマンドは、Subversionリポジトリの変更履歴を調査するための強力なツールです。様々なオプションを組み合わせることで、特定のニーズに合わせてログ出力をカスタマイズできます。本記事で解説したオプションを理解し、適切に活用することで、Subversionリポジトリの変更履歴を効果的に分析し、プロジェクトの進化を深く理解することができるでしょう。

特に、以下の点を意識して svn log コマンドを活用することをお勧めします。

  • 目的を明確にする: どのような情報を知りたいのかを明確にし、必要なオプションを選択する。
  • リビジョン範囲を絞り込む: 不要な情報を排除するために、-r オプションで適切なリビジョン範囲を指定する。
  • 出力を整形する: -v-q--xml などのオプションを使用して、目的に合った形式でログを出力する。
  • 検索機能を活用する: --search オプションを使用して、特定のキーワードを含むコミットを効率的に見つける。

これらの点を意識することで、svn log コマンドをより効果的に活用し、Subversionリポジトリの変更履歴を最大限に活用することができるでしょう。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール