名前

svn diff — 二つのパスの間の相違点を表示します。

用法

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

説明

ふたつのパスの間の違いを表示します。 svn diffには 三つの使い方があります:

svn diff [-r N[:M]] [--old OLD-TGT] [--new NEW-TGT] [PATH...]OLD-TGTNEW-TGTの間の違いを表示します。 もしPATHがあればOLD-TGTNEW-TGTに相対的なものとして扱われ、出力される 相違点はそのようなパスのみに限定されます。 OLD-TGTNEW-TGT は作業コピーパスであるか URL[@REV] であるかです。 OLD-TGT のデフォルトは 現在の作業コピーで、 NEW-TGTのデフォルトは OLD-TGTになります。 N のデフォルトは BASE ですが、もし OLD-TGTが URL であれば HEADになります。 Mのデフォルトは現在の作業バージョン ですが、もし NEW-TGTが URL であれば HEADになります。 svn diff -r NOLD-TGTのリビジョンを Nに設定します。 svn diff -r N:MNEW-TGTのリビジョンを Mに設定します。

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 と作業コピーを比較します。

(no --revision)

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

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

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

別名

di

変更対象

なし

リポジトリへのアクセス

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

スイッチ

--revision (-r) REV
--old OLD-TARGET
--new NEW-TARGET
--extensions (-x) "ARGS"
--non-recursive (-N)
--diff-cmd CMD
--notice-ancestry
--username USER
--password PASS
--no-auth-cache
--non-interactive
--no-diff-deleted
--config-dir DIR

BASEリビジョンと作業コピーを比較します。(svn diff の一番よくある使い方):

$ svn diff COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 4404)
+++ COMMITTERS	(working copy)

作業コピーの変更を以前のリビジョンと比較する方法:

$ svn diff -r 3900 COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 3900)
+++ COMMITTERS	(working copy)

リビジョン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	(revision 3000)
+++ COMMITTERS	(revision 3500)
…

リビジョン3000とリビジョン3500を範囲指定で比較( この場合は一つのURLのみを渡せばいい):

$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk/COMMITTERS
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 3000)
+++ COMMITTERS	(revision 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	(revision 3000)
+++ COMMITTERS	(revision 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
>