これで完璧!svn リビジョン番号の確認方法

これで完璧!Subversion リビジョン番号の確認方法と活用の詳細ガイド

はじめに:なぜリビジョン番号が重要なのか?

ソフトウェア開発やドキュメント管理において、バージョン管理システム(VCS)は不可欠なツールです。特に、長年多くのプロジェクトで利用されてきたSubversion(SVN)は、そのシンプルさゆえに今でも現役で活躍しています。SVNにおけるバージョン管理の根幹をなすのが、「リビジョン番号」です。

リビジョン番号は、リポジトリ(バージョン管理されるデータが格納されている場所)に加えられた変更のたびに、自動的に1つずつ増加する通し番号です。これは、例えるならば、歴史の教科書における「何年何月に何があった」という記録の、「何年何月」にあたるものです。この番号があるからこそ、私たちは過去の任意の時点の状態を正確に再現したり、ある時点から別の時点までにどのような変更があったのかを追跡したりすることができます。

あなたが開発者であろうと、デザイナーであろうと、あるいは単にSVNを使っているユーザーであろうと、リビジョン番号を正確に把握し、それを活用する方法を知っていることは、作業効率を劇的に向上させ、トラブルを未然に防ぎ、そして発生した問題を迅速に解決するために非常に重要です。

  • 「あの機能が壊れたのは、いつの変更からだろう?」
  • 「このドキュメントの最終版はどれだっけ?」
  • 「自分の作業コピーは、リポジトリの最新の状態からどれくらい遅れているんだろう?」
  • 「前回のリリースで使ったソースコードのリビジョンは何番だったか?」

これらの疑問に答える鍵となるのが、リビジョン番号です。リビジョン番号を自在に確認できるようになることは、SVNを使いこなすための第一歩と言えるでしょう。

この記事では、SVNのリビジョン番号について、その基本的な概念から、様々な状況での確認方法(コマンドライン、GUIツール、Webブラウザ)、確認したリビジョン番号をどのように活用するか、さらにはよくある疑問やトラブルシューティングまで、約5000語をかけて徹底的に解説します。この記事を読めば、あなたはSVNのリビジョン番号に関するエキスパートになれるはずです。

さあ、リビジョン番号の世界へ飛び込みましょう。

第1章:リビジョン番号の基礎知識

SVNのリビジョン番号を確認する方法を学ぶ前に、まずはリビジョン番号そのものについて正しく理解しましょう。

1.1 リビジョン番号とは何か?

SVNのリビジョン番号は、リポジトリ全体の状態を指し示す一意の識別子です。リポジトリに対して何らかの変更(ファイルの追加、削除、編集、ディレクトリ構造の変更など)をコミット(登録)するたびに、新しいリビジョン番号が生成されます。この番号は常に整数であり、最初のコミットがリビジョン1となり、以降、コミットのたびに2, 3, 4… と単調に増加していきます。

例えば、あなたがファイルを一つ追加してコミットしたとします。このとき、リポジトリの最新リビジョンが100だったとすると、コミット成功後に生成される新しいリビジョンは101となります。このリビジョン101は、リビジョン100の状態に、あなたが追加したファイルを含めた状態全体を指します。

1.2 SVNにおけるリビジョン番号の役割

リビジョン番号は、SVNにおいて極めて重要な役割を担います。

  • 履歴の記録と追跡: 各リビジョンは、リポジトリが過去の特定の時点においてどのような状態であったかを示します。リビジョン番号を辿ることで、プロジェクトの変更履歴を正確に追跡できます。
  • 状態の特定と再現: 特定のリビジョン番号を指定することで、過去の任意の時点でのリポジトリ全体、あるいはその一部(ファイルやディレクトリ)の状態を正確に再現できます。これは、バグが混入したリビジョンを特定したり、過去のリリース時点のコードに戻ったりする場合に役立ちます。
  • 差分の比較: 二つの異なるリビジョン番号を指定することで、その間にどのような変更があったのか(ファイルの追加、削除、内容の変更など)を比較できます。
  • 並行開発の支援: 複数の開発者が同時に作業していても、コミットによって新しいリビジョンが生成されるため、それぞれの変更が履歴として記録され、後からマージ(結合)する際にどのリビジョン間の差分を扱うかを明確にできます。

1.3 HEADリビジョン、BASEリビジョン、WORKINGリビジョン

リビジョン番号に関連して、SVNではいくつかの特別な概念が登場します。特に重要なのが「HEAD」「BASE」「WORKING」です。これらは、リポジトリや作業コピーの状態を指し示すために使われます。

  • HEADリビジョン:

    • これはリポジトリの最新のリビジョン番号を指します。常にリポジトリ内で最も大きなリビジョン番号です。
    • あなたがこれからコミットする変更は、このHEADリビジョンを基にして行われます。
    • 他の開発者がコミットを行うと、HEADリビジョンは更新されます。
    • しばしば、単に「HEAD」と表記されます。
  • BASEリビジョン:

    • これは、あなたの「作業コピー」(ローカルコンピュータ上のファイル群)が、リポジトリから最後にチェックアウトまたは更新された時点のリビジョン番号を指します。
    • あなたの作業コピー内の各ファイルやディレクトリは、通常、このBASEリビジョンに基づいています。
    • svn update コマンドを実行して作業コピーを最新の状態にすると、BASEリビジョンは更新されます。
    • しばしば、単に「BASE」と表記されます。
  • WORKINGリビジョン:

    • これは、あなたの作業コピー上のファイルの状態を指します。厳密にはリポジトリのリビジョン番号そのものではなく、ローカルでの変更(編集中のファイルなど)を含んだ、まだコミットされていない状態を概念的に示す言葉です。
    • これは特定のリビジョン番号で表されるものではなく、svn status コマンドなどで作業コピーの状態を確認する際に出てくる概念です。svn status は、作業コピーのWORKING状態とBASEリビジョンの状態、あるいはリポジトリのHEADリビジョン(-u オプション使用時)との差分を表示します。

これらの概念は、特に作業コピーの状態や、ローカルの変更とリポジトリの状態との関係を理解する上で重要になります。リビジョン番号を確認する際には、単に番号だけでなく、それがHEADを指しているのか、BASEを指しているのか、あるいは特定の過去の状態を指しているのかを意識することが大切です。

これで、リビジョン番号の基本的な考え方と、関連する重要な概念について理解できたかと思います。次に、いよいよ具体的なリビジョン番号の確認方法を見ていきましょう。

第2章:リビジョン番号を確認する基本的な方法(コマンドライン編)

SVNを利用する上で最も強力で柔軟な方法の一つが、コマンドラインインターフェース(CLI)を使うことです。多くのSVNクライアントは内部的にCLIコマンドを実行しており、CLIを理解することはSVNのより深い理解につながります。ここでは、リビジョン番号を確認するために頻繁に使用されるCLIコマンドを詳しく解説します。

SVNのコマンドは、通常 svn <サブコマンド> [オプション] [対象] の形式で実行します。対象はファイルやディレクトリのパス、あるいはリポジトリのURLです。

2.1 svn info コマンド:最も手軽なリビジョン情報源

svn info コマンドは、指定したパスまたはURLに関する様々な情報を表示します。これには、リビジョン番号に関する情報も含まれます。

目的:
* 作業コピーの特定ファイル/ディレクトリ、または作業コピー全体が、リポジトリのどのリビジョンに基づいているか(BASEリビジョン)を知りたい。
* リポジトリ上の特定パスの最新リビジョン(HEADリビジョン)を知りたい。
* ファイルやディレクトリが最後に変更されたリビジョン(Last Changed Rev)を知りたい。
* その他のリポジトリ関連情報(URL、リポジトリルート、UUIDなど)を知りたい。

構文:

bash
svn info [対象]
svn info [オプション] [対象]

[対象] を省略した場合、カレントディレクトリ(現在コマンドを実行している場所)が対象となります。作業コピー内のパスを指定することも、リポジトリのURLを直接指定することも可能です。

主要オプション:

  • -r <リビジョン番号> または --revision <リビジョン番号>: 特定のリビジョンでの情報を表示します。通常、svn info は対象のHEADリビジョン(URLの場合)またはBASEリビジョン(作業コピーの場合)の情報を表示しますが、このオプションを使うことで過去の特定時点の情報を見ることができます。
  • -R または --recursive: ディレクトリを指定した場合に、そのディレクトリ以下のすべてのサブディレクトリやファイルについても再帰的に情報を表示します。

出力例と解説:

作業コピーのルートディレクトリで svn info を実行した場合の出力例を見てみましょう。

Path: .
URL: http://svn.example.com/myproject/trunk
Relative URL: ^/trunk
Repository Root: http://svn.example.com/myproject
Repository UUID: a1b2c3d4-e5f6-7890-1234-567890abcdef
Revision: 12345 <-- 作業コピーのBASEリビジョン
Node Kind: directory
Schedule: normal
Last Changed Author: yourname
Last Changed Rev: 12345 <-- このディレクトリが最後に変更されたリビジョン
Last Changed Date: 2023-10-27 10:30:00 +0900 (金, 27 10月 2023)

  • Path:: 情報が表示されているローカルのパス。. はカレントディレクトリを意味します。
  • URL:: このローカルパスがマッピングされているリポジトリ上のURL。
  • Relative URL:: リポジトリルートからの相対URL。^/ はリポジトリルートを指します。
  • Repository Root:: この作業コピーが関連付けられているリポジトリのルートURL。
  • Repository UUID:: リポジトリを一意に識別するID。
  • **Revision:**: これこそが、この作業コピー(または指定したパス)が最後に更新されたリビジョン、すなわちBASEリビジョンです。 ここでは 12345 です。
  • Node Kind:: 対象がファイルかディレクトリかなど。
  • Schedule:: スケジュール情報(normal, add, deleteなど)。
  • Last Changed Author:: このパスが最後に変更されたコミットを行ったユーザー名。
  • **Last Changed Rev:**: このパス(ファイルまたはディレクトリ)が最後に変更されたコミットのリビジョン番号です。 作業コピー全体 (.) の場合、BASEリビジョンと同じになることが多いですが、個別のファイルに対して実行すると、そのファイル固有の最終変更リビジョンが表示されます。上の例では作業コピーのルートなので、BASEリビジョンと同じ 12345 です。
  • Last Changed Date:: 最後の変更が行われた日時。

特定のファイル (src/main.c) に対して svn info を実行した場合:

Path: src/main.c
URL: http://svn.example.com/myproject/trunk/src/main.c
Relative URL: ^/trunk/src/main.c
Repository Root: http://svn.example.com/myproject
Repository UUID: a1b2c3d4-e5f6-7890-1234-567890abcdef
Revision: 12345 <-- 作業コピー全体はリビジョン12345に基づいている
Node Kind: file
Schedule: normal
Last Changed Author: anotheruser
Last Changed Rev: 12300 <-- このファイル自体が最後に変更されたリビジョンは12300
Last Changed Date: 2023-10-25 15:00:00 +0900 (水, 25 10月 2023)
Text Last Updated: 2023-10-27 10:00:00 +0900 (金, 27 10月 2023) <-- ローカルでの最終更新日時 (未コミットの可能性あり)
Checksum: 7e7c7b7a767574737271706f6e6d6c6b

この例では、作業コピー全体はリビジョン 12345 の状態に基づいていますが、ファイル src/main.c 自体がリポジトリ上で最後に変更されたのはリビジョン 12300 であることがわかります。これは、リビジョン 12300 以降のリビジョン 12301 から 12345 までのコミットでは、このファイルは変更されなかったことを意味します。

リモートリポジトリ上の特定のURLの最新リビジョン(HEADリビジョン)を知りたい場合は、作業コピーがなくてもURLを指定して実行できます。

bash
svn info http://svn.example.com/myproject/trunk

出力例:

Path: trunk
URL: http://svn.example.com/myproject/trunk
Relative URL: ^/trunk
Repository Root: http://svn.example.com/myproject
Repository UUID: a1b2c3d4-e5f6-7890-1234-567890abcdef
Revision: 12350 <-- リモートリポジトリのHEADリビジョン
Node Kind: directory
Last Changed Author: someonewhojustcommitted
Last Changed Rev: 12350 <-- このURLが指すパスが最後に変更されたリビジョン
Last Changed Date: 2023-10-27 11:00:00 +0900 (金, 27 10月 2023)

この場合、Revision:Last Changed Rev: はどちらもリモートのHEADリビジョンである 12350 を示しています。

特定のリビジョンでの情報を取得したい場合 (-r オプション):

bash
svn info -r 10000 http://svn.example.com/myproject/trunk/src/main.c

これは、リビジョン 10000 時点の src/main.c ファイルの情報(そのリビジョンが存在したか、存在したなら最後に変更されたリビジョンなど)を表示します。

svn info は非常に多機能で、リビジョン番号だけでなく、SVNに関する様々な基本的な情報を得るための最初のコマンドとして非常に役立ちます。

2.2 svn status コマンド:作業コピーの状態とリモートの差分

svn status コマンドは、作業コピー内のファイルやディレクトリが、そのBASEリビジョンに対してどのような状態にあるか(変更されているか、追加されたか、削除されたかなど)を表示します。通常はリビジョン番号そのものは表示しませんが、-u または --show-updates オプションを使うと、作業コピーがリポジトリのHEADリビジョンに対してどの程度遅れているか(または進んでいるか)を表示し、関連するリビジョン番号を確認できます。

目的:
* 作業コピーでローカルにどのような変更が行われているかを知りたい。
* 作業コピーがリポジトリの最新状態(HEADリビジョン)と比べて、どれくらい進んでいるか/遅れているかを知りたい。
* ローカルの変更と、リポジトリの最新状態の両方を確認し、更新やコミットの準備をしたい。

構文:

bash
svn status [対象]
svn status [オプション] [対象]

[対象] は作業コピー内のパスを指定します。省略すると、カレントディレクトリ以下の作業コピー全体が対象となります。

主要オプション:

  • -u または --show-updates: リポジトリの最新状態(HEADリビジョン)を作業コピーと比較し、作業コピーが更新によって受け取る変更や、作業コピーからコミットされる変更に関する情報を表示します。このオプションを使うと、リポジトリのHEADリビジョンも表示されます。
  • -v または --verbose: 各ファイルのステータスに加えて、リビジョン情報(通常はBASEリビジョン)や最終変更情報を表示します。

出力例と解説:

通常の svn status の出力例:

M src/main.c <-- main.c はローカルで変更されている
A src/new_feature.h <-- new_feature.h は新しく追加された
D old_file.txt <-- old_file.txt は削除された
? temp/log.txt <-- log.txt は未バージョン管理ファイル

この出力ではリビジョン番号は表示されません。各行の最初の列の文字(M, A, D, ? など)がファイルの状態を示します。

-u オプションを付けて svn status を実行した場合の出力例:

bash
svn status -u

M src/main.c
A src/new_feature.h
D old_file.txt
* 12350 src/another_file.c <-- リモートで変更あり(更新が必要)
Status against revision: 12350 <-- リポジトリのHEADリビジョン

  • 出力の最後に表示される Status against revision: 12350 が、あなたが比較対象として指定した、またはデフォルトで使われたリポジトリのHEADリビジョン番号です。
  • * マークが付いている行(* 12350 src/another_file.c)は、リモートリポジトリ(HEADリビジョン 12350)では変更されているが、あなたの作業コピーにはまだ反映されていないファイルを示します。つまり、svn update を実行するとこれらの変更が作業コピーに取り込まれます。その横に表示されている 12350 は、そのファイルがリモートのHEADリビジョンまで追いつくために必要な、リモートでの変更のリビジョン(この場合はHEADリビジョンそのもの)を示唆しています。

-v オプションを付けて svn status を実行した場合の出力例:

bash
svn status -v

M 12300 12345 yourname src/main.c <-- M: 変更あり, 12300: ファイルのLast Changed Rev, 12345: 作業コピーのBASEリビジョン, yourname: Last Changed Author
A - 12345 yourname src/new_feature.h <-- A: 追加, -: 新規なのでLast Changed Revなし, 12345: 作業コピーのBASEリビジョン
D 12000 12345 yourname old_file.txt <-- D: 削除予定, 12000: 削除前のLast Changed Rev, 12345: 作業コピーのBASEリビジョン
? - - - temp/log.txt

-v オプションでは、ローカルの状態(M, A, D など)に加えて、作業コピー上の各ファイルに関する詳細情報が表示されます。3列目の数字(例: 12345)が、その作業コピー全体またはファイルがチェックアウト/更新された時点のBASEリビジョンです。2列目の数字(例: 12300)は、そのファイル自体のLast Changed Rev(そのファイルがリポジトリ上で最後に変更されたリビジョン)です。

svn status -u -v のようにオプションを組み合わせることも可能で、より詳細な状態とリモートとの差分を一度に確認できます。

svn status は、コミットや更新を行う前に必ず実行すべきコマンドの一つであり、作業コピーの状態と、必要に応じてリモートリポジトリのHEADリビジョンとの関係を把握するために非常に有用です。

2.3 svn log コマンド:変更履歴からリビジョン番号を確認する

svn log コマンドは、リポジトリや作業コピーの変更履歴を表示します。各履歴エントリには、その変更が行われたリビジョン番号、著者、日時、コミットメッセージが含まれます。特定のリビジョンでの変更内容を確認したり、リビジョン番号を遡って原因を調査したりする際に必須のコマンドです。

目的:
* 指定したファイル、ディレクトリ、またはリポジトリ全体にどのような変更が行われてきたか、その履歴を知りたい。
* 過去の特定のコミットのリビジョン番号、コミット者、日時、メッセージを知りたい。
* 特定のリビジョン範囲での変更を知りたい。

構文:

bash
svn log [対象]
svn log [オプション] [対象]

[対象] を省略した場合、カレントディレクトリ(作業コピー内であれば作業コピーのこの場所、そうでなければリポジトリルート)が対象となります。ファイル、ディレクトリ、URLを指定できます。

主要オプション:

  • -r <リビジョン範囲> または --revision <リビジョン範囲>: 表示する履歴のリビジョン範囲を指定します。
    • 例: -r 100:200 (リビジョン100から200までの履歴)
    • 例: -r HEAD:100 (HEADリビジョンから100までの履歴 – SVNのログは新しい順に表示されるため、通常は大きいリビジョン番号を先に指定します)
    • 例: -r 123 (リビジョン123のコミット情報のみ)
    • 特別なキーワードも使用できます: HEAD (最新), BASE (作業コピーの基準), COMMITTED (直前のコミット), PREV (直前のコミットの直前)
  • -l <件数> または --limit <件数>: 表示するログエントリの最大件数を指定します。最新のN件だけ見たい場合に便利です。
  • -v または --verbose: 各リビジョンで変更されたパス(ファイルやディレクトリ)も表示します。
  • --diff: 各リビジョンでの変更内容(差分)をログに含めて表示します。非常に冗長になる可能性があるため、注意が必要です。
  • --summarize: 各リビジョンの変更パスを、状態(追加、削除、変更など)を示す文字とともに簡潔に表示します。-v より情報量は少ないですが、変更されたファイルの一覧を見るのに便利です。
  • --oneline: 各ログエントリを1行にまとめて表示します。リビジョン番号とメッセージの最初の数文字などをざっと確認したい場合に便利です。
  • --search <キーワード>: コミットメッセージや著者名などから、指定したキーワードを含むログエントリを検索します。(バージョン1.8以降)

出力例と解説:

単純な svn log の出力例:

bash
svn log

“`

r 12350 | someonewhojustcommitted | 2023-10-27 11:00:00 +0900 (金, 27 10月 2023) | 1 line

Fix: resolved issue in authentication module.

r 12345 | yourname | 2023-10-27 10:30:00 +0900 (金, 27 10月 2023) | 5 lines

Feature: Implemented user profile page.

  • Added src/profile.c
  • Updated src/main.c
  • Added tests/profile_test.c

r 12300 | anotheruser | 2023-10-25 15:00:00 +0900 (水, 25 10月 2023) | 2 lines

Refactor: Improved data processing logic.

Also fixed a minor bug in calculation.

… (さらに古い履歴が続く)
“`

各ログエントリは -------- 区切り線で区切られています。
* r 12350: r の後に続く数字がリビジョン番号です。ここでは 12350 が最新のコミットのリビジョンです。
* someonewhojustcommitted: コミットを行ったユーザー名(著者)。
* 2023-10-27 11:00:00 +0900: コミット日時。
* 1 line / 5 lines: コミットメッセージの行数。
* その後に続くのがコミットメッセージ本文です。

-l オプションで最新の数件だけ表示:

bash
svn log -l 3

最新の3件のコミットログが表示されます。

特定のファイル (src/main.c) の履歴だけを表示:

bash
svn log src/main.c

このコマンドは、ファイル src/main.c に対して行われた変更を含むコミットの履歴のみを表示します。svn info src/main.c で表示される Last Changed Rev は、このログの先頭(最新)のリビジョン番号と一致するはずです。

-r オプションでリビジョン範囲を指定:

bash
svn log -r 12000:12300

リビジョン12000から12300までのコミット履歴が表示されます。新しい順に表示されるため、12300、12299、…、12000 の順になります。

-v オプションで変更パスも表示:

bash
svn log -r 12345 -v

“`

r 12345 | yourname | 2023-10-27 10:30:00 +0900 (金, 27 10月 2023) | 5 lines
Changed paths:
A /trunk/src/profile.c (from /trunk/src/profile.c:12344) <– A: 追加
M /trunk/src/main.c <– M: 変更
A /trunk/tests/profile_test.c (from /trunk/tests/profile_test.c:12344) <– A: 追加

Feature: Implemented user profile page.

  • Added src/profile.c
  • Updated src/main.c
  • Added tests/profile_test.c

“`

-v オプションを使うと、Changed paths: のセクションが追加され、そのコミットでどのようなファイルやディレクトリが、どのように変更されたか(A=追加, M=変更, D=削除, R=置換, AD=追加後に削除など)がリストアップされます。これは、特定のリビジョンで何が変更されたのかを詳細に確認したい場合に非常に役立ちます。

svn log は、SVNのリビジョン番号を追跡し、プロジェクトの歴史を理解するための最も重要なコマンドと言えるでしょう。リビジョン番号を手がかりに、いつ、誰が、なぜその変更を行ったのかを知ることができます。

2.4 その他のコマンドでのリビジョン番号表示

svn info, svn status, svn log がリビジョン番号確認の中心となるコマンドですが、SVNの他のコマンドも実行結果としてリビジョン番号を表示することがあります。

  • svn checkout <URL> [ローカルパス]: リポジトリから作業コピーをチェックアウトする際に、チェックアウトされたリビジョン(HEADリビジョン、または指定したリビジョン)が表示されます。
    bash
    svn checkout http://svn.example.com/myproject/trunk myproject_wc

    出力例:
    ... (ファイルを受信中) ...
    Checked out revision 12350. <-- チェックアウトされたリビジョン

  • svn update [対象]: 作業コピーをリポジトリのHEADリビジョン、または指定したリビジョンに更新する際に、更新後のリビジョンが表示されます。
    bash
    svn update

    出力例:
    Updating '.':
    A src/another_file.c <-- 新たに追加されたファイル
    Updated to revision 12350. <-- 更新後のリビジョン

  • svn commit -m "コミットメッセージ": 作業コピーの変更をリポジトリにコミットする際に、新しく生成されたリビジョン番号が表示されます。
    bash
    svn commit -m "Added user profile feature."

    出力例:
    Adding src/profile.c
    Sending src/main.c
    Adding tests/profile_test.c
    Transmitting file data ...done.
    Committed revision 12351. <-- コミットによって生成された新しいリビジョン番号

これらのコマンドは、直接リビジョン番号を確認することが主目的ではありませんが、操作の結果として現在対象となっているリビジョン番号を知る上で役立ちます。特に svn commit 後の出力は、自分の変更がリポジトリに登録され、新しい歴史の1ページが刻まれたことを示す重要な情報です。

第3章:リビジョン番号を確認する基本的な方法(GUIツール編)

SVNの操作はコマンドラインだけでなく、直感的なGUIツールを使っても行うことができます。GUIツールは視覚的に分かりやすく、特にSVNに慣れていないユーザーにとって便利です。ここでは、最も広く使われているSVNクライアントの一つであるTortoiseSVNを例に、GUIツールでのリビジョン番号確認方法を解説します。TortoiseSVNはWindows用のツールですが、他のOSにも同様の機能を持つGUIクライアントは存在します(例: Mac用 Versions, SmartSVNなど)。基本的な考え方は同じです。

3.1 TortoiseSVNの概要

TortoiseSVNは、Windowsのエクスプローラーと統合される形で機能を提供するフリーのSVNクライアントです。ファイルやフォルダを右クリックすることでSVN関連のメニューが表示され、視覚的な操作でコミット、更新、ログ表示などを行うことができます。

3.2 作業コピーやファイルのリビジョン情報確認 (Info)

作業コピー内のファイルやフォルダのリビジョン情報を確認するには、対象を右クリックして表示されるコンテキストメニューから操作します。

操作手順:

  1. リビジョン情報を確認したいファイルまたはフォルダを選択します。
  2. 右クリックします。
  3. 表示されたコンテキストメニューから TortoiseSVN を選択します。
  4. さらに表示されたサブメニューの中から Info を選択します。

表示される情報:

Info ダイアログが開きます。このダイアログには、svn info コマンドの出力に相当する様々な情報が表示されます。

  • URL: このファイル/フォルダがリポジトリ上のどこに対応しているか。
  • Relative URL: リポジトリルートからの相対パス。
  • Repository Root: リポジトリのルートURL。
  • Repository UUID: リポジトリの一意なID。
  • Revision: 作業コピーのこのファイル/フォルダが基にしているBASEリビジョン番号です。 ファイルとフォルダでは意味合いが少し異なる場合があります(フォルダ全体のリビジョン vs ファイル個別のリビジョン)。
  • Node Kind: ファイルかディレクトリか。
  • Schedule: スケジュール状態(Normal, Add, Deleteなど)。
  • Last Changed Author: このファイル/フォルダが最後に変更されたコミットの著者。
  • Last Changed Rev: このファイル/フォルダがリポジトリ上で最後に変更されたリビジョン番号です。
  • Last Changed Date: 最後の変更が行われた日時。
  • Text Last Updated: ローカルでテキストファイルの内容が最後に変更された日時(未コミットのローカル変更がある場合など)。
  • Checksum: ファイルの内容のチェックサム(ファイルの内容が変わると変化します)。

特に重要なのは、「Revision」と「Last Changed Rev」です。
* フォルダに対してInfoを表示した場合、「Revision」はそのフォルダを含む作業コピー全体が最後に更新されたBASEリビジョンを示すことが多いです。
* ファイルに対してInfoを表示した場合、「Revision」は作業コピー全体またはそのファイルを含む親ディレクトリが更新されたBASEリビジョンを示し、「Last Changed Rev」はそのファイル自体がリポジトリ上で最後に変更されたリビジョンを示します。これはCLIの svn info 出力と同様です。

このダイアログから、作業コピーの状態とリポジトリ上の状態に関する基本的なリビジョン情報を手軽に確認できます。

3.3 変更履歴の確認 (Show log)

特定のファイルやフォルダの変更履歴を確認し、各コミットのリビジョン番号を確認するには、「Show log」機能を使います。

操作手順:

  1. 履歴を確認したいファイルまたはフォルダを選択します。
  2. 右クリックします。
  3. コンテキストメニューから TortoiseSVN を選択します。
  4. サブメニューから Show log を選択します。

表示される情報:

「Log Messages」ダイアログが開きます。このダイアログは、CLIの svn log コマンドの出力に相当する情報を、より視覚的に分かりやすく表示します。

  • 上部のリストビューに、対象の変更履歴が新しいリビジョンから順に一覧表示されます。
  • 各行には以下の情報が表示されます。
    • Revision: コミットが行われたリビジョン番号です。
    • Author: コミットを行ったユーザー名。
    • Date: コミット日時。
    • Message: コミットメッセージ。
  • リストビューで特定のリビジョンを選択すると、下部にそのリビジョンの詳細情報が表示されます。
    • Message: コミットメッセージ全文。
    • Changed Paths: そのコミットで変更されたファイルやディレクトリの一覧(CLIの svn log -v の出力に相当)。各パスの横には状態を示すアイコン(追加、変更、削除など)が表示されます。

ログダイアログの便利な機能:

  • フィルタリング: ツールバーの検索ボックスを使って、コミットメッセージ、著者、変更されたパスなどでログを絞り込むことができます。特定のリビジョン範囲を指定して表示することも可能です。
  • リビジョン範囲の指定: ダイアログ上部の「Revision Range」を設定することで、表示するリビジョンの範囲を制限できます。
  • 差分の表示: リストビューで2つのリビジョンを選択し、右クリックメニューから「Compare Revisions」などを選択すると、その2つのリビジョン間の差分をGUIツールで表示できます。これにより、特定のリビジョンで具体的に何が変わったのかをファイル単位で確認できます。
  • 特定の状態への更新/チェックアウト: リストビューで特定のリビジョンを選択し、右クリックメニューから「Update item to revision」を選択すると、作業コピーのその項目をそのリビジョンに戻すことができます(慎重に使う必要があります)。また、「Checkout to…」を選択すると、そのリビジョンでの状態を別の場所にチェックアウトできます。

Show log ダイアログは、過去のリビジョン番号を辿り、プロジェクトの変更履歴を調査するための非常に強力なツールです。特定のバグがいつ混入したか、ある機能がいつ追加されたかなどをリビジョン番号を手がかりに追跡できます。

3.4 リポジトリブラウザ (Repository Browser) での確認

作業コピーを持っていなくても、リポジトリの構造や履歴を確認したい場合があります。TortoiseSVNの「Repository Browser」機能を使うと、リポジトリのURLを指定して、まるでローカルのファイルエクスプローラーのようにリポジトリの内容を閲覧できます。

操作手順:

  1. Windowsエクスプローラーの何もない場所で右クリックします。
  2. コンテキストメニューから TortoiseSVN を選択します。
  3. サブメニューから Repo-Browser を選択します。
  4. 「URL of repository」フィールドに、閲覧したいリポジトリのURLを入力します。以前使ったURLはドロップダウンリストから選択できます。
  5. OKボタンを押します。認証が必要な場合は、ユーザー名とパスワードを入力します。

表示される情報:

「Repository Browser」ウィンドウが開きます。ウィンドウは通常、左側にディレクトリツリー、右側に選択したディレクトリの内容が表示されるという二ペイン構成になっています。

  • 左側のツリービューでディレクトリを選択すると、右側のペインにそのディレクトリに含まれるファイルやサブディレクトリが表示されます。
  • 右側のペインには、各項目に関する情報が表示されます。デフォルトでは、名前、リビジョン、著者、日時などが表示されます。
    • Revision: そのファイルまたはディレクトリのLast Changed Rev(リポジトリ上で最後に変更されたリビジョン番号)です。これは、その項目が表示されている時点(通常はHEADリビジョン)での情報です。
    • Author: 最後の変更を行った著者。
    • Date: 最後の変更が行われた日時。
  • 右側のペインでファイルやディレクトリを選択し、右クリックすると、その項目の履歴を見るために Show log を選択したり、その項目をローカルにチェックアウトしたり、内容を見たり(View)することができます。
  • ウィンドウ上部のツールバーにあるドロップダウンリストから、表示するリビジョンをHEAD以外の過去のリビジョンに変更することも可能です。例えば、リビジョン 10000 を選択すれば、リビジョン 10000 時点でのリポジトリの状態を閲覧できます。これにより、過去の特定リビジョンに存在したファイルやディレクトリ、その時点での最終変更リビジョンなどを確認できます。

Repository Browserは、作業コピーがない状況でリポジトリ全体の構造や、リモート上のファイル・ディレクトリの最新リビジョン(HEADリビジョンでのLast Changed Rev)や過去のリビジョンでの状態を確認するのに非常に便利です。

TortoiseSVNのようなGUIツールは、コマンドを覚える必要なく、視覚的な操作でリビジョン番号を含む様々なSVN情報を確認できるため、初心者だけでなく経験者にとっても効率的な作業を支援します。

第4章:リビジョン番号を確認する基本的な方法(Webブラウザ編)

SVNリポジトリは、適切に設定されていればWebブラウザを通じて内容を閲覧することも可能です。これは、リポジトリビューアと呼ばれるツールによって実現されます。リポジトリビューアは、SVNリポジトリのデータをHTML形式で表示し、ユーザーがWebブラウザ経由でファイルやディレクトリを閲覧したり、変更履歴(ログ)を確認したりできるようにします。代表的なリポジトリビューアとしては、ViewVCや、Trac、Redmine、GitLab (SVNサポートがある場合) などの統合型プロジェクト管理ツールに含まれるリポジトリ閲覧機能があります。

4.1 リポジトリビューアの概要

リポジトリビューアは、SVNサーバーソフトウェア(Apache HTTP Serverとmod_dav_svnなど)によって公開されたリポジトリURLにアクセスすることで利用できます。ユーザーは特別なクライアントソフトウェアをインストールする必要がなく、Webブラウザさえあればリポジトリの内容を閲覧できます。

4.2 ファイル/ディレクトリの閲覧とリビジョン確認

リポジトリビューアにアクセスすると、通常はリポジトリのルートディレクトリの内容が表示されます。

一般的な操作:

  1. Webブラウザのアドレスバーに、リポジトリビューアのURL(例: http://svn.example.com/viewvc/myproject/ または http://redmine.example.com/projects/myproject/repository)を入力してアクセスします。
  2. リポジトリのファイルやディレクトリが一覧表示されます。通常、ファイル名、サイズ、最終変更リビジョン (Last Changed Rev)、最終変更日時、最終変更著者、そしてコミットメッセージの最初の部分などが表示されます。
  3. ディレクトリ名をクリックすると、そのディレクトリの中身に移動します。
  4. ファイル名をクリックすると、通常はそのファイルの内容が表示されます。多くのビューアでは、特定のリビジョンを指定してファイルの内容を表示する機能もあります。

表示されるリビジョン情報:

  • ファイルやディレクトリの一覧表示で、各項目の横に表示される「Revision」や「Rev」といった列の番号が、その項目がリポジトリのHEADリビジョンにおいて最後に変更されたリビジョン番号(Last Changed Rev)です。
  • 特定のファイルの内容を表示したページでも、通常はそのファイルの内容が表示されているのがどのリビジョンか(HEADリビジョンであることが多い)と、そのファイルのLast Changed Revが表示されます。

4.3 変更履歴(ログ)の確認

リポジトリビューアには、通常、ファイルやディレクトリの変更履歴を確認する機能も備わっています。

一般的な操作:

  1. ファイルやディレクトリの一覧表示で、履歴を確認したい項目を選択します。
  2. 通常、その項目の横に「Log」「History」のようなリンクやボタンが表示されています。それをクリックします。
  3. その項目に対する変更履歴がリスト形式で表示されます。各エントリには、リビジョン番号、著者、日時、コミットメッセージなどが含まれます。
  4. 多くの場合、リスト上の特定のリビジョン番号をクリックすると、そのリビジョンでのその項目の状態を見たり、そのリビジョンと直前のリビジョンとの差分を見たりする機能が提供されています。

表示されるリビジョン情報:

  • ログ一覧表示で、各エントリに明確にリビジョン番号が表示されます。これにより、コマンドラインの svn log と同様に、指定した項目に対する過去のコミット履歴とそれぞれのリビジョン番号を追跡できます。

4.4 Webブラウザでのリビジョン確認の利点と注意点

利点:
* クライアントソフトウェアのインストールが不要。
* インターネット接続とブラウザがあれば、どこからでもリポジトリの内容を確認できる。
* SVNを知らない人でも比較的容易に閲覧できる。

注意点:
* 閲覧機能に限定されるため、コミットや更新といった操作はできません。
* 表示される情報や機能は、使用しているリポジトリビューアの種類やバージョン、設定によって異なります。
* 通常、ローカルの作業コピーの状態に関する情報は確認できません(作業コピーのBASEリビジョンなど)。確認できるのは、リポジトリ上の状態(HEADリビジョンや過去の特定リビジョン)のみです。

Webブラウザでのリビジョン確認は、特に他の人が行った変更の履歴を素早く確認したい場合や、プロジェクトの現在の状態を共有したい場合に便利です。開発チーム内で共有されているリポジトリビューアがあれば、GUIクライアントやCLIを使わなくても、最新のリビジョン番号や特定のファイルの最終変更リビジョンなどを手軽に確認できます。

第5章:様々な状況でのリビジョン番号確認

ここまで、基本的な確認方法(CLI、GUI、Web)を見てきました。これらの方法を組み合わせることで、様々な状況下で必要なリビジョン番号を正確に把握できます。ここでは、いくつかの具体的なシナリオを想定し、どのようなリビジョン番号を、どのコマンドや操作で確認するのが適切かを解説します。

5.1 作業コピー全体または一部のリビジョンを確認する

あなたが現在作業しているローカルのファイル群(作業コピー)が、リポジトリのどの時点の状態に基づいているかを知りたい場合です。また、作業コピー内の特定のファイルが最後にリポジトリから取得されたリビジョンを知りたい場合もあります。

  • 作業コピー全体のBASEリビジョンを知る:

    • CLI: 作業コピーのルートディレクトリまたはその中の任意のディレクトリで svn info . を実行します。出力の Revision: の値が、そのディレクトリを含む作業コピーのBASEリビジョンです。
    • GUI (TortoiseSVN): 作業コピーのルートフォルダを右クリックし、「TortoiseSVN」->「Info」を選択します。Infoダイアログの「Revision:」の値を確認します。
  • 作業コピー内の特定のファイルのBASEリビジョンを知る:

    • CLI: 対象ファイルのあるディレクトリ、またはその親ディレクトリで svn info <ファイル名> を実行します。出力の Revision: の値が、そのファイルを含む作業コピーの場所が基にしているリビジョンです。(これは作業コピー全体のBASEリビジョンと同じか、部分的な更新をしていなければ親ディレクトリのBASEリビジョンと同じです)
    • GUI (TortoiseSVN): 対象ファイルを右クリックし、「TortoiseSVN」->「Info」を選択します。Infoダイアログの「Revision:」の値を確認します。
  • 作業コピー内のファイルがリポジトリから最後に取得されたリビジョンを知る:

    • CLI: 対象ファイルに対して svn info <ファイル名> を実行します。出力の Revision: の値を確認します。これが、そのファイルが作業コピーに存在しているリビジョンです。
    • GUI (TortoiseSVN): 対象ファイルを右クリックし、「TortoiseSVN」->「Info」を選択します。Infoダイアログの「Revision:」の値を確認します。

これらの確認は、あなたの作業コピーが最新の状態か、あるいは特定の時点に基づいているかを判断する際に重要です。

5.2 リモートリポジトリの最新リビジョン(HEAD)を確認する

他の開発者がコミットを行った結果、リポジトリが現在どのリビジョン番号になっているか(HEADリビジョン)を知りたい場合です。

  • CLI:
    • 作業コピーがある場合: 作業コピー内の任意の場所で svn info --show-updates を実行します。出力の最後尾に表示される Status against revision: <リビジョン番号> の値がHEADリビジョンです。または、svn info <作業コピーのURL> を実行します。出力の Revision: の値がHEADリビジョンです。作業コピーのURLは svn info . の出力で確認できます。
    • 作業コピーがない場合: svn info <リポジトリのURL> を実行します。出力の Revision: の値がHEADリビジョンです。
  • GUI (TortoiseSVN):
    • 作業コピーがある場合: 作業コピーのフォルダを右クリックし、「TortoiseSVN」->「Check for modifications」を選択します。開いたダイアログの下部に「Repository URL at revision: <リビジョン番号>」のような形でHEADリビジョンが表示されます。または、「Repo-Browser」を開き、リポジトリのURLを指定して閲覧します。ブラウザ上部のドロップダウンリストに表示されているリビジョン(通常は最新)がHEADリビジョンです。
    • 作業コピーがない場合: エクスプローラーの任意の場所で右クリックし、「TortoiseSVN」->「Repo-Browser」を選択します。リポジトリのURLを指定して閲覧します。ブラウザ上部のドロップダウンリストに表示されているリビジョン(通常は最新)がHEADリビジョンです。
  • Webブラウザ (リポジトリビューア): リポジトリビューアのURLにアクセスします。表示されるファイルやディレクトリ一覧は通常HEADリビジョンに基づいています。多くのビューアでは、HEADリビジョン番号がどこかに表示されています。

HEADリビジョンを知ることは、作業コピーを最新の状態に更新する必要があるか、あるいは他の開発者の最新の変更を取り込む必要があるかを判断するために重要です。

5.3 過去の特定リビジョンでの状態を確認する

HEADリビジョンではなく、過去のある時点(例えば、特定の機能が完成したリビジョン、問題が発生する直前のリビジョンなど)でのファイルやディレクトリの状態を確認したい場合です。

  • CLI:
    • 特定のファイルの内容を確認: svn cat -r <リビジョン番号> <URLまたは作業コピー内のパス> を実行します。指定したリビジョンでのファイル内容が標準出力に表示されます。
    • 特定のディレクトリの内容(ファイル/ディレクトリ一覧)を確認: svn list -r <リビジョン番号> <URLまたは作業コピー内のパス> を実行します。指定したリビジョンでのディレクトリ内容が一覧表示されます。
    • 過去の特定リビジョンの状態をまとめてローカルに取得: svn checkout -r <リビジョン番号> <リポジトリのURL> <新しく作成するローカルパス> を実行します。これは既存の作業コピーをそのリビジョンに戻すのではなく、新しいディレクトリに過去のリビジョンの状態をチェックアウトするコマンドです。
    • 既存の作業コピーを過去のリビジョンに戻す: svn update -r <リビジョン番号> [対象パス] を実行します。これは、作業コピーを指定したリビジョンでの状態に巻き戻します。後でHEADに戻すには再度 svn update を実行します。注意して使う必要があります。
    • 特定の過去のコミット情報を確認: svn log -r <リビジョン番号> [対象] を実行します。そのリビジョンで行われたコミットの詳細(著者、日時、メッセージ、変更パスなど)が表示されます。
  • GUI (TortoiseSVN):
    • 特定のファイルの内容を確認: Show log ダイアログを開き、対象のリビジョンを選択します。下部の「Changed Paths」リストで対象ファイルを右クリックし、「View revision」を選択します。
    • 特定のディレクトリの内容を確認: Repo-Browser を開き、上部のリビジョンドロップダウンリストで対象のリビジョンを選択します。そのリビジョンでのリポジトリ状態が表示されます。
    • 過去の特定リビジョンの状態をまとめてローカルに取得: Repo-Browser で対象のディレクトリを選択し、リビジョンを指定した後、右クリックメニューから「Checkout…」を選択します。
    • 既存の作業コピーを過去のリビジョンに戻す: Show log ダイアログを開き、対象のリビジョンを選択します。リストビューでそのリビジョンを右クリックし、「Update item to revision」を選択します。
  • Webブラウザ (リポジトリビューア): 多くのリポジトリビューアで、URLにリビジョン番号を指定して過去の状態を閲覧する機能や、ログ表示から特定リビジョンでのファイル内容やディレクトリ内容にジャンプする機能があります。具体的な方法はビューアによって異なります。

過去のリビジョンを確認することは、バグの原因となった変更を探したり、特定のリリースで使用したソースコードの状態を確認したりする場合に不可欠です。

5.4 ファイルやディレクトリの「最終変更リビジョン」を確認する

特定のファイルやディレクトリが、リポジトリ上で最後に誰によって、いつ、どのリビジョンで変更されたかを知りたい場合です。これは、その項目に関する直近の変更履歴を素早く知りたい場合に役立ちます。

  • CLI:
    • svn info <ファイル名またはディレクトリ名> を実行します。出力の Last Changed Rev: の値が最終変更リビジョンです。
    • svn log -l 1 <ファイル名またはディレクトリ名> を実行します。最新のログエントリが表示され、そのリビジョン番号が最終変更リビジョンです。
  • GUI (TortoiseSVN):
    • 対象のファイルやフォルダを右クリックし、「TortoiseSVN」->「Info」を選択します。Infoダイアログの「Last Changed Rev:」の値を確認します。
    • 対象のファイルやフォルダを右クリックし、「TortoiseSVN」->「Show log」を選択します。ログダイアログのリストの先頭(一番上)のリビジョン番号が最終変更リビジョンです。
    • Repo-Browserでリポジトリを閲覧している場合、ファイルやディレクトリ一覧表示の「Revision」列に表示される値が最終変更リビジョンです(閲覧中のリビジョン、通常はHEADリビジョンにおける値)。
  • Webブラウザ (リポジトリビューア): ファイルやディレクトリの一覧表示で、各項目の横に表示される「Revision」や「Rev」列の値が最終変更リビジョンです。

最終変更リビジョンは、その項目に最近関わった開発者を特定したり、その項目に関する直近の変更履歴を深掘りする出発点として役立ちます。

5.5 リビジョン範囲を指定して情報を確認する

ある二つのリビジョン(例えば、前回のリリースリビジョンと現在の開発リビジョン)の間で、リポジトリ全体や特定のパスにどのような変更があったのかを知りたい場合です。

  • CLI:
    • リビジョン範囲内のコミット履歴を見る: svn log -r <開始リビジョン>:<終了リビジョン> [対象] を実行します。通常、開始リビジョンよりも終了リビジョンの方が大きくなります(例: 10000:12000)。新しい順に見たい場合は -r 12000:10000 のように指定します。
    • リビジョン範囲内での差分を確認する: svn diff -r <リビジョン1>:<リビジョン2> [対象] を実行します。これは、リビジョン1の状態とリビジョン2の状態の差分をunified diff形式で表示します。例えば、svn diff -r 10000:HEAD src/main.c は、リビジョン10000からHEADまでの間に src/main.c がどのように変更されたかを表示します。対象を省略するとリポジトリ全体(またはカレントディレクトリ以下の作業コピー)の差分が表示されます。
  • GUI (TortoiseSVN):
    • リビジョン範囲内のコミット履歴を見る: Show log ダイアログを開き、上部の「Revision Range」で開始リビジョンと終了リビジョンを指定します。
    • リビジョン範囲内での差分を確認する: Show log ダイアログを開き、差分を見たい2つのリビジョンを選択します(Ctrlキーを押しながらクリックで複数選択)。右クリックメニューから「Compare Revisions」を選択します。これにより、その2つのリビジョン間のファイルやディレクトリの差分を視覚的に確認できます。また、作業コピーと特定リビジョン(例えばHEAD)の差分を見たい場合は、作業コピーフォルダを右クリックし、「TortoiseSVN」->「Diff」->「Diff with URL」などを選択し、比較対象のリビジョンとURLを指定します。
  • Webブラウザ (リポジトリビューア): 多くのリポジトリビューアでは、リビジョン範囲を指定してログを表示したり、2つのリビジョン間の差分を表示したりする機能が提供されています。ログ一覧で特定のコミットをクリックして「View diff」のようなリンクを辿るのが一般的な方法です。

リビジョン範囲を指定した確認は、特定の期間に行われた作業内容をレビューしたり、あるバージョンから次のバージョンへの変更点をまとめたりする際に非常に有用です。

第6章:リビジョン番号確認の応用例と目的

リビジョン番号を確認できるようになることは、単に情報を得るだけでなく、その情報を活用することでSVNを使った開発や管理をより効果的に行うことにつながります。ここでは、リビジョン番号確認がどのように役立つのか、具体的な応用例とその目的を解説します。

6.1 問題発生時の原因特定

「昨日まで動いていた機能が、今日になったら動かなくなった!」 – このような問題が発生した場合、最初に疑うべきは「何が変更されたか」です。リビジョン番号は、この原因特定のための強力な手がかりとなります。

  • 目的: バグが混入したコミット(リビジョン)を特定する。
  • 活用方法:
    • 問題が発生する直前の正常なリビジョンと、問題が発生したと確認されたリビジョン(例: HEADリビジョンまたは作業コピーのBASEリビジョン)を特定します。
    • このリビジョン範囲を指定して svn log -r <正常なリビジョン+1>:HEAD -v を実行します。問題発生以降のすべてのコミット履歴と、それぞれのコミットで変更されたファイル一覧が表示されます。
    • 変更されたファイルリストやコミットメッセージを見て、怪しい変更が含まれているコミット(リビジョン)を絞り込みます。
    • さらに、絞り込んだリビジョンとその直前のリビジョンの間で svn diff -r <直前のリビジョン>:<怪しいリビジョン> [関連ファイル] を実行し、具体的な変更内容を確認します。
    • 二分探索(Bisect)のように、疑わしいリビジョン範囲の中間にあるリビジョンを作業コピーにチェックアウトまたは更新し、そこで問題が発生するかどうかを確認することを繰り返すことで、バグを導入したリビジョンを効率的に特定できます。svn update -r <中間リビジョン> コマンドや、GUIツールの「Update item to revision」機能がこの目的で使えます。

リビジョン番号を追跡することで、「いつ」「誰が」「どのような変更によって」問題を引き起こしたのかを明確にできます。

6.2 特定の状態への復旧

誤って重要なファイルを削除してコミットしてしまったり、過去のある時点の作業状態に戻って別のブランチを切って作業を続けたい、あるいは過去の特定のリビジョンをベースにリリース版を作成したい、といった場合があります。

  • 目的: 過去の任意のリビジョン番号が示すリポジトリの状態を再現する。
  • 活用方法:
    • 戻りたいリビジョン番号を svn log や他の方法で確認します。
    • そのリビジョン番号を指定して、新しい場所にチェックアウトします: svn checkout -r <リビジョン番号> <リポジトリのURL> <新しいパス>.
    • あるいは、現在の作業コピーをそのリビジョンに巻き戻します(ローカルの未コミット変更は消える可能性があるので注意が必要です!):svn update -r <リビジョン番号>.
    • もし直前のコミットを取り消したいだけであれば、そのコミットのリビジョン番号を特定し、その逆の変更を現在のHEADにマージする形で取り消すことができます。例えば、リビジョン12345のコミットを取り消したい場合、現在の作業コピーで svn merge -c -12345 <リポジトリURL> を実行し、その結果をコミットします。

リビジョン番号があれば、どんなに時間が経っていても、リポジトリに記録されている過去のあらゆる状態に確実に戻ることができます。

6.3 変更履歴の追跡

プロジェクトがどのように進捗してきたか、特定の機能がどのように開発されてきたか、誰がどの部分を主に担当しているかなどを知りたい場合があります。

  • 目的: プロジェクトや特定ファイルの変更履歴を、リビジョン番号、著者、日時、コミットメッセージとともに確認する。
  • 活用方法:
    • svn log [対象] コマンドやGUIツールの「Show log」機能を使って、対象の変更履歴を閲覧します。
    • -v オプションやGUIの「Changed Paths」を使って、各リビジョンでどのようなファイルが変更されたかを確認します。
    • リビジョン番号、著者、コミットメッセージを組み合わせることで、過去の作業内容を理解できます。
    • svn blame (または svn annotate) コマンドは、ファイルの各行がどのリビジョンで誰によって最後に追加/変更されたかを表示します。これもリビジョン番号を確認する上で非常に役立ちます。例: svn blame src/main.c

変更履歴の追跡は、プロジェクトの経緯を理解し、コードの担当者を特定し、今後の開発計画を立てる上で重要な情報源となります。

6.4 リリース管理

ソフトウェアやドキュメントを本番環境にデプロイしたり、顧客に提供したりする場合、どのバージョンの状態をリリースするのかを明確にする必要があります。

  • 目的: リリース対象となるプロジェクトの状態を、リビジョン番号で正確に指定する。
  • 活用方法:
    • テスト済みの安定した状態になったら、その時点のHEADリビジョンをリリースの「タグ」として利用します(SVNでは通常、/tags ディレクトリにそのリビジョンをコピーすることでタグを作成します)。この「タグ付けされたリビジョン」が、そのリリースの公式なリビジョン番号となります。
    • 例えば、HEADリビジョンが12345の状態でリリースする場合、/trunk (または /branches/release_1.0) を /tags/release_1.0 にコピーします。このコピー操作自体が新しいリビジョン(例: 12346)を生成しますが、タグ /tags/release_1.0リビジョン12345の状態を指すことになります。この12345がリリースの基準となるリビジョンです。
    • デプロイや提供時には、このタグに対応するURLまたは、タグが指すリビジョン番号 (12345) を指定してソースコードを取得します (svn checkout -r 12345 <URL> またはタグのURL svn checkout <タグのURL>)。

リビジョン番号をリリース管理に使うことで、どのビルドがどのソースコードの状態に基づいているかを明確にし、後から特定のリリース版のソースコードを正確に再現できるようになります。

6.5 開発者間の情報共有

開発チーム内でのコミュニケーションにおいて、「この機能はリビジョンXXXで実装された」「あのバグはリビジョンYYYの変更が原因らしい」といった情報共有が頻繁に行われます。

  • 目的: 特定の変更や状態を、開発チーム内で共通の認識を持つためにリビジョン番号を用いる。
  • 活用方法:
    • コミットメッセージにリビジョン番号を記載したり、タスク管理システム(Trac, Redmineなど)でチケットと関連するリビジョン番号をリンクさせたりします。
    • コードレビューの際に、特定のファイルパスとリビジョン番号(例: src/feature.c @ 12345)を指定して、議論の対象を明確にします。
    • 問題報告時には、「リビジョン12340では問題なかったが、リビジョン12350で問題が発生した」のように、リビジョン番号を使って問題の発生範囲を伝えます。

リビジョン番号は、開発チーム内でのコミュニケーションにおいて、特定の時点でのコードの状態や変更内容を指し示すための共通言語となります。

6.6 差分確認

ある時点と別の時点の間で何が変わったのかを確認したい場合です。これは、コードレビューやバージョン間の変更点リスト作成などに利用されます。

  • 目的: 二つの異なるリビジョン番号間の変更内容(差分)を確認する。
  • 活用方法:
    • 比較したい二つのリビジョン番号を特定します。
    • svn diff -r <リビジョン1>:<リビジョン2> [対象] コマンドを実行します。リビジョン1の状態からリビジョン2の状態への変更点がテキスト形式で表示されます。
    • GUIツールの「Compare Revisions」機能や、Webブラウザのリポジトリビューアの差分表示機能を利用して、視覚的に差分を確認します。

差分確認は、コードの品質を保ち、予期せぬ変更がないかを確認するために非常に重要です。リビジョン番号は、この比較を行うための明確な基準点となります。

第7章:よくある疑問とトラブルシューティング

SVNのリビジョン番号に関して、ユーザーはいくつかの疑問を抱いたり、予期せぬ状況に遭遇したりすることがあります。ここでは、そのようなよくある疑問とその解決策を解説します。

7.1 作業コピーのリビジョンがファイルごとに違うのはなぜ?

svn status -v の出力や、ファイルのInfoダイアログを見た際に、作業コピー全体のBASEリビジョン(svn info . のRevision)と、個々のファイルのRevision(またはLast Changed Rev)が異なることに気づくことがあります。また、作業コピー内のファイル間でRevisionが異なる場合もあります。

  • 理由:

    1. 部分的な更新 (Sparse Checkout / Partial Update): SVNでは、作業コピー全体を最新リビジョンに更新するのではなく、特定のディレクトリやファイルだけを更新することができます (svn update <パス>)。この場合、更新されなかったファイルやディレクトリは古いリビジョンのまま残るため、作業コピー内に複数のリビジョンが混在することになります。
    2. ファイルのLast Changed Rev: ファイルの Last Changed Rev は、そのファイル自体がリポジトリ上で最後に変更されたリビジョンです。これは、そのファイルが作業コピーに存在するリビジョン(Revision)とは異なります。例えば、作業コピー全体をリビジョン10000に更新しても、その中のファイルがリビジョン5000以降変更されていなければ、そのファイルのLast Changed Revは5000のままです。
    3. ローカルでの変更: 作業コピー内のファイルにローカルな変更(未コミットの編集)がある場合、そのファイルはBASEリビジョンやLast Changed Revとは異なる「WORKING」状態にあります。
  • 確認方法:

    • svn status -v を実行し、各ファイルのRevision (作業コピーのリビジョン) とLast Changed Rev を確認します。
    • svn info . で作業コピー全体のBASEリビジョンを確認します。
  • 解決策: 作業コピー全体をリポジトリのHEADリビジョンまたは特定の統一されたリビジョンにしたい場合は、作業コピーのルートで svn update または svn update -r <リビジョン番号> を実行します。

ファイルごとにリビジョンが異なること自体はSVNの通常の挙動であり、必ずしも問題ではありませんが、作業コピー全体の状態を把握する上でこの仕組みを理解しておくことは重要です。

7.2 svn update してもリビジョン番号が変わらない?

svn update を実行したのに、作業コピーのRevision(svn info . のRevision)が変わらない、あるいは特定のファイルが更新されない、という場合があります。

  • 理由:

    1. リモートリポジトリに新しい変更がない: 作業コピーのBASEリビジョンが既にリポジトリのHEADリビジョンと同じ場合、更新しても何も変更がないため、リビジョン番号は変わりません。
    2. ローカルの未コミット変更やロック: ローカルに未コミットの変更がある場合、それが原因でリモートの変更が正常に取り込めない、あるいはコンフリクト(衝突)が発生して更新が途中で止まっている可能性があります。また、何らかの理由でロックがかかっている可能性もゼロではありません。
    3. エラーが発生している: 更新中にエラーが発生し、処理が中断している可能性があります。
    4. 対象パスの指定: svn update <パス> のように特定のパスを指定した場合、そのパス以下の項目のみが更新され、作業コピー全体のリビジョンは変わらないことがあります(部分的な更新)。
  • 確認方法と解決策:

    • まず svn status -u を実行し、作業コピーがリモートのHEADリビジョンに対してどのような状態か、更新が必要な変更があるかを確認します。
    • 未コミットの変更がある場合は、コミットするか、あるいは必要に応じて元に戻します (svn revert)。
    • svn cleanup を実行して、可能性のあるロックなどを解除します。
    • エラーメッセージが表示されていないか確認します。表示されている場合は、そのメッセージに基づいて対処します。コンフリクトが発生している場合は、ファイルを編集してコンフリクトを解消し、svn resolved を実行する必要があります。
    • 作業コピー全体を更新したい場合は、作業コピーのルートディレクトリで svn update を実行しているか確認します。

更新がうまくいかない場合は、これらの手順を試してみてください。多くの場合、ローカルの未コミット変更やコンフリクトが原因です。

7.3 リビジョン番号が見つからない/エラーになる?

コマンドやGUIツールで特定のリビジョン番号を指定した際に、「リビジョンが見つからない」「指定されたリビジョンは存在しません」のようなエラーが表示されることがあります。

  • 理由:

    1. リビジョン番号の入力間違い: 単純な数字の入力ミス。
    2. 指定したリビジョンが存在しない: そのリポジトリに、指定したリビジョン番号のコミットが実際には存在しない。リポジトリの最初のコミットより小さい番号や、現在のHEADリビジョンより大きい番号を指定しているなどが考えられます。
    3. 対象パスとリビジョンの不整合: 指定したリビジョン番号では、対象のファイルやディレクトリが存在しなかった、あるいは別の場所に移動/コピーされた、といった可能性があります。特に、指定したリビジョンが対象パスが追加される前のリビジョンだったり、削除された後のリビジョンだったりする場合に起こりえます。
    4. リポジトリへの接続問題: リモートリポジトリを指定した場合、ネットワークの問題や認証情報の問題でリポジトリに接続できず、情報を取得できない場合があります。
  • 確認方法と解決策:

    • 入力したリビジョン番号が正しいか再確認します。
    • svn log -l 1 <URLまたはパス> を実行して、対象のHEADリビジョンを確認し、指定したリビジョン番号が妥当な範囲内にあるか確認します。
    • svn log -r <指定したリビジョン-1>:<指定したリビジョン+1> <URLまたはパス> のように、指定したリビジョン番号の前後数件のログを表示してみて、そのリビジョンが存在するか、そして対象パスがそのリビジョンでどのような状態だったかを確認します。
    • リポジトリのURLが正しいか、認証情報が正しいか、ネットワークに接続できているかを確認します。
    • 対象パスがそのリビジョンでどのように変化したかを知りたい場合は、svn log --follow [対象パス] コマンドを使うと、パスの履歴(コピーや移動を含む)を辿ることができます。

リビジョン番号に関するエラーは、指定した番号が実際に存在しないか、あるいは指定したパスがそのリビジョンで妥当な状態ではなかった場合に発生します。svn log コマンドで履歴を確認することが、問題を特定する上で最も有効です。

7.4 HEADリビジョンがいくつになっているか分からない?

作業コピーのBASEリビジョンは svn info . で分かりますが、リポジトリ全体の最新状態であるHEADリビジョンがいくつになっているかを知りたい場合があります。特に、他の開発者が頻繁にコミットしているような状況では、HEADリビジョンは刻々と変化します。

  • 確認方法:
    • 作業コピーがある場合: svn status -u を実行します。出力の最後に表示される Status against revision: <リビジョン番号> がHEADリビジョンです。
    • 作業コピーがある場合: svn info <作業コピーのURL> を実行します。出力の Revision: がHEADリビジョンです。作業コピーのURLは svn info . の出力で確認できます。
    • 作業コピーがない場合: svn info <リポジトリのURL> を実行します。出力の Revision: がHEADリビジョンです。
    • GUI (TortoiseSVN): 作業コピーのフォルダを右クリックし、「TortoiseSVN」->「Check for modifications」を選択します。ダイアログ下部に表示される「Repository URL at revision: <リビジョン番号>」を確認します。または、「Repo-Browser」を開き、リポジトリのURLを指定して閲覧します。ブラウザ上部のリビジョンドロップダウンリストで最新のリビジョンが選択されていることを確認し、その番号を見ます。
    • Webブラウザ (リポジトリビューア): リポジトリビューアのトップページやファイル一覧ページで、HEADリビジョン番号がどこかに表示されていることが多いです。

これらの方法を使えば、リモートリポジトリの最新状態であるHEADリビジョンをいつでも確認できます。

第8章:リビジョン番号とその他のID

バージョン管理システムでは、リビジョン番号以外にも様々なIDが使用されることがあります。SVNにおけるリビジョン番号と、他のVCS(特にGit)で使われるIDや、SVN独自の他のIDとの違いを理解しておくと、概念をより深く理解できます。

8.1 コミットハッシュ (Gitなど) とのリビジョン番号の違い

SVNのリビジョン番号は、コミットごとに単調に増加する単純な整数です(1, 2, 3, …)。これはリポジトリ全体に共通の番号であり、コミットの順番を示します。

一方、Gitのような分散型VCSでは、「コミットハッシュ」または「SHA-1ハッシュ」と呼ばれるIDが使われます。これは、各コミットの内容(ファイルの状態、親コミットのハッシュ、コミットメッセージ、コミット者、タイムスタンプなど)から計算される一意な文字列(例: a1b2c3d4e5f678901234567890abcdef12345678)です。

主な違い:

  • 生成方法: SVNリビジョンは単純な連番。Gitハッシュはコミット内容に基づく暗号学的ハッシュ。
  • 一意性: SVNリビジョンはリポジトリ内で一意な通し番号。Gitハッシュは(ほぼ確実に)全世界で一意。
  • 分散性: SVNリビジョンは集中型モデルのため単一の連番。Gitハッシュは分散型モデルのため、各ローカルリポジトリで独立して生成されるが、内容が同じコミットであれば同じハッシュになる。
  • 変更検知: Gitハッシュはコミット内容から計算されるため、ハッシュを見ればコミット内容が改ざんされていないことが検証できる。SVNリビジョン番号にはそのような検証機能はない(ファイル内容のチェックサムは別途存在する)。

SVNのリビジョン番号はシンプルで分かりやすい反面、Gitのハッシュのような強力な一意性や内容保証機能は持ちません。しかし、SVNの集中型モデルではこの単純な連番で十分、あるいはむしろ扱いやすい場合が多いと言えます。

8.2 UUID (Universally Unique Identifier) とリビジョン番号の違い

SVNのリポジトリには、リビジョン番号とは別に「UUID (Universally Unique Identifier)」が付与されます。UUIDは、リポジトリが作成された際に一度だけ生成される、全世界で一意であることが保証されたIDです(例: a1b2c3d4-e5f6-7890-1234-567890abcdef)。

  • UUIDの役割:

    • リポジトリそのものを一意に識別するために使用されます。
    • ある作業コピーがどのリポジトリに紐づいているかを判断する際に使われます。複数のリポジトリを扱っている場合に、誤ったリポジトリにコミットしたり更新したりするのを防ぐのに役立ちます。
  • リビジョン番号との違い:

    • UUIDはリポジトリ全体に一つだけ存在し、リポジトリの作成以降変わりません。
    • リビジョン番号はコミットごとに増加し、リポジトリの特定の状態を示します。

svn info コマンドやGUIツールのInfoダイアログで、リポジトリのUUIDを確認できます。これはリビジョン番号そのものではありませんが、作業コピーが意図したリポジトリに正しく関連付けられているかを確認する際に参照することがあります。

第9章:まとめ

この記事では、Subversion(SVN)におけるリビジョン番号の重要性から始まり、その基本的な概念、そしてコマンドライン、GUIツール(TortoiseSVN)、Webブラウザといった様々な方法での詳細な確認手順を解説しました。さらに、確認したリビジョン番号をバグの原因特定、状態復旧、リリース管理などの具体的なシナリオでどのように活用するか、そしてよくある疑問や関連する概念についても触れました。

リビジョン番号は、SVNを使ったバージョン管理の中心をなす概念です。コミットごとに単調増加するこの番号は、リポジトリの過去のあらゆる状態を指し示す一意のIDとなります。HEAD、BASE、WORKINGといった関連概念も理解することで、作業コピーとリポジトリの状態の関係をより正確に把握できます。

リビジョン番号を確認する主な方法は以下の通りです。

  • コマンドライン:
    • svn info: 作業コピーのBASEリビジョン、ファイルのLast Changed Rev、リモートのHEADリビジョンなどを確認。
    • svn status -u: 作業コピーとリモートHEADリビジョンの比較、HEADリビジョン番号の確認。
    • svn log: 変更履歴をリビジョン番号とともに確認。
    • svn checkout, svn update, svn commit: 操作結果としてリビジョン番号が表示される。
  • GUIツール (TortoiseSVN):
    • Infoダイアログ: 作業コピーやファイルのBASEリビジョン、Last Changed Revを確認。
    • Show logダイアログ: 変更履歴をリビジョン番号とともに視覚的に確認、フィルタリングや差分表示。
    • Repository Browser: リポジトリ全体の構造や、指定リビジョンでのファイル/ディレクトリのLast Changed Revを確認。
  • Webブラウザ (リポジトリビューア):
    • ファイル/ディレクトリ一覧: 各項目のLast Changed Revを確認。
    • ログ表示: 変更履歴をリビジョン番号とともに確認。

これらの方法を状況に応じて使い分けることで、あなたはSVNのリビジョン番号を自在に操れるようになります。そして、確認したリビジョン番号を基に、過去の変更点を追跡したり、特定の状態に戻したり、チームメンバーと正確な情報を共有したりといった、SVNのバージョン管理機能を最大限に活用できるようになります。

「このファイルはリビジョンXXで誰々が変更したらしい」「次のリリースはリビジョンYYの状態で行こう」といった会話が、あなたのプロジェクトで当たり前になるかもしれません。リビジョン番号を理解し、使いこなすことは、SVNを使った共同作業の効率と正確性を飛躍的に向上させる鍵です。

SVNは長い歴史を持つツールですが、その基本的な考え方と機能は非常に強力です。この記事で学んだリビジョン番号の確認方法と活用術を、ぜひあなたの日常のSVN作業に活かしてください。

今後もSVNを使い続ける中で、さらに高度な使い方や、特定の状況でのより効率的な方法が見つかるかもしれません。しかし、この記事で紹介した基本的な確認方法と応用例は、どのような状況にも対応するための基盤となるはずです。

SVNのリビジョン番号は、あなたのプロジェクトの歴史そのものです。その歴史を正確に読み解き、未来の成功につなげるために、リビジョン番号を積極的に活用していきましょう!

これで、あなたはSVNリビジョン番号確認のプロフェッショナルです!

コメントする

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

上部へスクロール