名前

svn diff — 二つのパスやリビジョン間の差分を表示します。

書式

diff [-c M | -r N[:M]] [TARGET[@REV]...]
diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] [PATH...]
diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]

説明

二つのパス間の差分を表示します。svn diffには、以下の使い方があります。

作業コピーの手元の変更を表示するには、ただ svn diff' としてください。

REV の二つのリビジョン間に現れる、TARGET にされた変更を表示します。TARGET はすべて作業コピーのパスか、すべて URL です。TARGET が作業コピーのパスの場合、N のデフォルト値は BASE で、M のデフォルトは作業コピーです。URL の場合、N は指定せねばならず、M のデフォルト値は HEAD です。「-c M」 オプションは、N = M-1 の状態の 「-r N:M」 と等価です。「-c -M」 は逆 (N = M-1 の状態の 「-r M:N」) になります。

OLDREV にある OLD-TGT と、NEWREV にある NEW-TGT の差分を表示します。PATH を与えた場合、OLD-TGTNEW-TGTPATH からの相対パスとなり、差分の出力もそこからに制限されます。OLD-TGTNEW-TGT は、作業コピーのパスか URL[@REV] になります。指定しないと、NEW-TGT のデフォルトは OLD-TGT です。「-r N」 とすると OLDREV のデフォルトは N になり、-r N:M とすると OLDREV のデフォルトは N で、NEWREV のデフォルトは M になります。

svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV] の省略表現

svn diff -r N:M URLsvn diff -r N:M --old=URL --new=URL の省略表現です。

svn diff [-r N[:M]] URL1[@N] URL2[@M]svn diff [-r N[:M]] --old=URL1 --new=URL2 の省略表現です。

TARGET が URL の場合、リビジョン N とリビジョン M は、--revision で与えられるか、既に述べたように 「@」 記法で指定されたものになります。

TARGET が作業コピーのパスの場合、 --revision オプションは以下の意味になります。

--revision N:M

サーバは TARGET@NTARGET@M を比較します。

--revision N

クライアントは TARGET@N と作業コピーを比較します。

(--revision なし)

クライアントは TARGET のベースリビジョンと作業コピーを比較します。

別の構文を使うと、サーバはそれぞれリビジョン NM にある URL1URL2 を比較します。もし NM が省略されれば、 HEAD の値が使われます。

デフォルトでは、svn diff はファイルの系統を無視し、単に比較対象になっている二つのファイルの内容を比較するだけです。--notice-ancestry を使うとリビジョンを比較する際に、問題になっているパスの系統が考慮されます (つまり、同じ内容を持ってはいるが異なる系統を持つ、二つのファイルに対して svn diff を実行すると、ファイル全体が一度削除され、もう一度すべてが追加されたような結果を得ることになります)。

別名

di

変更対象

なし

リポジトリアクセス

相違点を知るのに必要な場合は発生します。ただし作業コピーの BASE リビジョンを取得する場合以外。

オプション

--revision (-r) ARG
--change (-c) ARG
--old ARG
--new ARG
--non-recursive (-N)
--diff-cmd CMD
--extensions (-x) "ARGS"
--no-diff-deleted
--notice-ancestry
--summarize
--force
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

BASE リビジョンと作業コピーを比較します (svn diff のもっとも使われる使用法です)。

$ svn diff COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS        (リビジョン 4404)
+++ COMMITTERS        (作業コピー)

COMMITTERS ファイルのリビジョン 9115 との変更を表示します。

$ svn diff -c 9115 COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS        (リビジョン 3900)
+++ COMMITTERS        (作業コピー)

作業コピーの変更を、以前のリビジョンと比較する方法にはこのようにします。

$ svn diff -r 3900 COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS        (リビジョン 3900)
+++ COMMITTERS        (作業コピー)

リビジョン 3000 とリビジョン 3500 を 「@」 構文を使って比較します。

$ svn diff http://svn.collab.net/repos/svn/trunk/COMMITTERS@3000 http://svn.collab.net/repos/svn/trunk/COMMITTERS@3500
Index: COMMITTERS
===================================================================
--- COMMITTERS        (リビジョン 3000)
+++ COMMITTERS        (リビジョン 3500)
…

リビジョン 3000 とリビジョン 3500 を範囲指定で比較 (この場合は一つの URL のみを渡す) します。

$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk/COMMITTERS
Index: COMMITTERS
===================================================================
--- COMMITTERS        (リビジョン 3000)
+++ COMMITTERS        (リビジョン 3500)

範囲指定を使って trunk にある、すべてのファイルのリビジョン 3000 と リビジョン 3500 を比較します。

$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk
          

範囲指定を使って trunk にある、三つのファイルのみリビジョン 3000 と リビジョン 3500 を比較します。

$ svn diff -r 3000:3500 --old http://svn.collab.net/repos/svn/trunk COMMITTERS README HACKING
          

作業コピーがある場合、長い URL を指定しないで差分を取得できます。

$ svn diff -r 3000:3500 COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS        (リビジョン 3000)
+++ COMMITTERS        (リビジョン 3500)

--diff-cmd CMD -x を使って、外部 diff プログラムに直接引数を渡します。

$ svn diff --diff-cmd /usr/bin/diff -x "-i -b" COMMITTERS 
Index: COMMITTERS
===================================================================
0a1,2
> This is a test
>