Diese Dokumentation wurde zur Beschreibung der Serie 1.6.x von Subversion erstellt. Falls Sie eine unterschiedliche Version von Subversion einsetzen, sei Ihnen dringend angeraten, bei http://www.svnbook.com/ vorbeizuschauen und stattdessen die zu Ihrer Version von Subversion passende Version dieser Dokumentation heranzzuiehen.

Name

svn diff (di) — Anzeige der Unterschiede zwischen zwei Revisionen oder Pfaden.

Aufruf

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]

Beschreibung

Anzeige der Unterschiede zwischen zwei Pfaden. Sie können svn diff wie folgt verwenden:

  • Verwenden Sie nur svn diff, um lokale Änderungen in einer Arbeitskopie anzuzeigen.

  • Anzeige der Änderungen an TARGETs in REV zwischen zwei Revisionen. Alle TARGETs können entweder nur Pfade in der Arbeitskopie oder nur URLs sein. Falls TARGETs Pfade in der Arbeitskopie sind, ist der Standardwert von N BASE und M die Arbeitskopie; falls TARGETs URLs sind, muss N angegeben werden, und der Standardwert von M ist HEAD. Die Option -c M ist äquivalent zu -r N:M, wobei N = M-1. Die Verwendung von -c -M bewirkt den umgekehrten Fall: -r M:N, wobei N = M-1.

  • Anzeige der Unterschiede zwischen OLD-TGT in OLDREV und NEW-TGT in NEWREV. Sind PATHs angegeben, sind sie relativ zu OLD-TGT und NEW-TGT, und die Ausgabe wird auf Unterschiede für diese Pfade beschränkt. OLD-TGT und NEW-TGT können Pfade in der Arbeitskopie sein oder URL[@REV]. Der Standardwert von NEW-TGT ist OLD-TGT, falls nicht angegeben. -r N setzt den Standardwert von OLDREV auf N; -r N:M setzt den Standardwert von OLDREV auf N und NEWREV auf M.

svn diff OLD-URL[@OLDREV] NEW-URL[@NEWREV] ist die Kurzform für svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV].

svn diff -r N:M URL ist die Kurzform für svn diff -r N:M --old=URL --new=URL.

svn diff [-r N[:M]] URL1[@N] URL2[@M] ist die Kurzform für svn diff [-r N[:M]] --old=URL1 --new=URL2.

Falls TARGET ein URL ist, können die Revisionen N und M entweder mir der Option --revision (-r) oder in der Notation @ angegeben werden, wie vorher beschrieben.

Falls es sich bei TARGET um einen Pfad in der Arbeitskopie handelt, besteht das Standardverhalten (sofern die Option --revision (-r) nicht angegeben wird) darin, die Unterschiede zwischen der Basisversion und der Arbeitskopie von TARGET auszugeben. Wird in diesem Fall jedoch die Option --revision (-r) angegeben, bedeutet das:

--revision N:M

Der Server vergleicht TARGET@N und TARGET@M.

--revision N

Der Client vergleicht TARGET@N mit der Arbeitskopie.

Wird die alternative Syntax verwendet, vergleicht der Server URL1 und URL2 in Revision N bzw. M. Wird entweder N oder M ausgelassen, wird der Wert HEAD angenommen.

Standardmäßig ignoriert svn diff die Herkunft von Dateien und vergleicht lediglich den Inhalt der beiden Dateien. Falls Sie --notice-ancestry verwenden, wird die Herkunft der Pfade beim Vergleich der Revisionen berücksichtigt (d.h., falls Sie svn diff auf zwei Dateien gleichen Inhalts jedoch unterschiedlicher Herkunft anwenden, wird es dargestellt, als sei der gesamte Inhalt entfernt und wieder hinzugefügt worden).

Optionen

--change (-c) ARG
--changelist ARG
--depth ARG
--diff-cmd CMD
--extensions (-x) ARG
--force
--new ARG
--no-diff-deleted
--notice-ancestry
--old ARG
--revision (-r) ARG
--summarize
--xml

Beispiele

Vergleich von BASE und Ihrer Arbeitskopie (eine der beliebtesten Anwendungen von svn diff):

$ svn diff COMMITTERS 
Index: COMMITTERS
===================================================================

--- COMMITTERS	(Revision 4404)
+++ COMMITTERS	(Arbeitskopie)

Betrachten der Änderungen in der Datei COMMITTERS, Revision 9115:

$ svn diff -c 9115 COMMITTERS 
Index: COMMITTERS
===================================================================

--- COMMITTERS	(Revision 3900)
+++ COMMITTERS	(Arbeitskopie)

Die Änderungen in der Arbeitskopie mit einer älteren Revision vergleichen:

$ svn diff -r 3900 COMMITTERS 
Index: COMMITTERS
===================================================================

--- COMMITTERS	(Revision 3900)
+++ COMMITTERS	(Arbeitskopie)

Vergleich von Revision 3000 mit Revision 3500 unter Verwendung der @-Syntax:

$ 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)
…

Vergleich von Revision 3000 mit Revision 3500 unter Verwendung der Bereichsschreibweise (in diesem Fall wird nur ein URL angegeben):

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

--- COMMITTERS	(Revision 3000)
+++ COMMITTERS	(Revision 3500)

Vergleich der Revision 3000 mit Revision 3500 aller Dateien in trunk unter Verwendung der Bereichsschreibweise:

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

Vergleich der Revision 3000 mit Revision 3500 von nur drei Dateien in trunk unter Verwendung der Bereichsschreibweise:

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

Falls Sie eine Arbeitskopie haben, können Sie die Unterschiede ermitteln, ohne die langen URLs einzugeben:

$ svn diff -r 3000:3500 COMMITTERS 
Index: COMMITTERS
===================================================================

--- COMMITTERS	(Revision 3000)
+++ COMMITTERS	(Revision 3500)
…

Verwendung von --diff-cmd CMD --extensions (-x), um Argumente direkt an das externe diff-Programm zu übergeben:

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

Schließlich können Sie die Option --xml zusammen mit der Option --summarize verwenden, um die Änderungen zwischen den Revisionen, nicht jedoch den Inhalt des eigentlichen Diffs, in XML anzusehen:

$ svn diff --summarize --xml http://svn.red-bean.com/repos/test@r2 \
           http://svn.red-bean.com/repos/test
<?xml version="1.0"?>
<diff>
<paths>
<path
   props="none"
   kind="file"
   item="modified">http://svn.red-bean.com/repos/test/sandwich.txt</path>
<path
   props="none"
   kind="file"
   item="deleted">http://svn.red-bean.com/repos/test/burrito.txt</path>
<path
   props="none"
   kind="dir"
   item="added">http://svn.red-bean.com/repos/test/snacks</path>
</paths>
</diff>