変更差分を確認する(svn diff)

svn diffコマンドは2つのリビジョン間の差分を表示します。

最も単純な使い方は、次のように、オプションを何も指定せず、「svn diff」とだけ入力します。すると、前回更新を実行してリポジトリの内容を作業コピーに反映した時点から、その後に、作業コピーに加えた変更点が表示されます。

work10# svn diff
Index: index.html
===================================================================
--- index.html  (revision 1)
+++ index.html  (working copy)
@@ -5,5 +5,6 @@
 <body>
 <h1>Subversion入門</h1>
 <p>初回のリポジトリ登録</p>
+<p>2回目のコミット</p>
 </body>
 </html>

1行目は調査対象ファイルの名前を示しています。

3行目、4行目はそれぞれ、リポジトリのファイルのファイル名とリビジョン番号、および、その比較対象が作業コピーであることを示しています。

5行目でファイル内での相違点が存在する位置を示していて、次行以降に、相違点を含む部分の実際の内容が表示されます。
+から始まる行は変更によってファイルに追加された行。先頭に-の付いた行があれば、その行が削除されたことを意味します。
また、変更された行だけでなく、その周辺の情報も表示されます。

svn diffコマンドで表示されるのは、作業ディレクトリ内のファイルと、最後に更新した(svn updateした)時点でリポジトリにあったバージョンの相違点になります。(この操作を実行してもサーバーとの通信は発生しません。)

そのため、他のユーザーがファイル(上記例では「index.html」)に対する変更を既にリポジトリにコミットしている場合でも、この差分情報には他のユーザーによる変更点は表示されません。

自分がどのファイルを何のためにどのように変更したのか、変更内容を再確認したい場合にとても有用なコマンドです。

特定のリビジョン間の差分など

svn diffコマンドでは、作業コピーをリポジトリ内の特定のバージョンと比較した差分や、リポジトリ内の2つのバージョン間の差分を表示することもできます。

上述のとおり、svn diffコマンドの注意点として、単純に実行(オプション指定なしで実行)しただけではリポジトリに別のユーザーなどにより後からコミットされた変更点が表示されません。作業コピーをリポジトリ内の最新のリビジョンと比較するには、次のようにHEADキーワードを使用します。

work10# svn diff -r HEAD
Index: index.html
===================================================================
--- index.html  (revision 2)
+++ index.html  (working copy)
@@ -5,6 +5,6 @@
 <body>
 <h1>Subversion入門</h1>
 <p>初回のリポジトリ登録</p>
-<p>別のユーザーがコミット</p>
+<p>2回目のコミット</p>
 </body>
 </html>

比較対象として、特定のリビジョンや日時などを指定することもできます。

リビジョン識別子

識別子 意味
番号 リポジトリ内のリビジョン番号
日時 指定した日時以前でその日時に最も近いリビジョン
HEAD リポジトリに格納されている最新のリビジョン
BASE ファイルまたはディレクトリの作業コピーのベースになっているリビジョン(すなわち最後にチェックアウトまたはアップデートを実行した時点のリビジョン)
COMMITTED BASEと同じかそれ以前のリビジョンで、ファイルまたはディレクトリが最後に変更されたリビジョン
PREV COMMITTEDの直前のリビジョン

例えば、ファイルに対する作業を行う際は、実際に作業を始める前に、そのファイルに対する前回の作業での変更内容を確認しておくと役に立つ場合があります。そのためには、svn updateコマンドを実行した後、次のようにPREVキーワードを使って直前のリビジョンとの比較を行えば良いです。

work10# svn diff -r PREV
Index: index.html
===================================================================
--- index.html  (revision 1)
+++ index.html  (working copy)
@@ -5,5 +5,6 @@
 <body>
 <h1>Subversion入門</h1>
 <p>初回のリポジトリ登録</p>
+<p>別のユーザーがコミット</p>
 </body>
 </html>

上記までは全て作業コピーとの比較でしたが、特定のファイルの2つのリビジョンを比較することもできます。その場合は、次のように、-rオプションを使ってリビジョン範囲を指定します。

work10# svn diff -r 2:3

上記例では、リビジョン番号2と3の差分を表示させています。