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_PATH2023年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 log
は svn: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リポジトリの変更履歴を最大限に活用することができるでしょう。