2010-07-17 18 views
11

Ich weiß, dass ein Unterschied zwischen zwei Tags die "Dateien" auflistet, die zwischen diesen beiden Tags durch die folgende Methode geändert wurden.Subversion: Wie finden Sie die Unterschiede zwischen zwei Tags?

svn diff tag1 tag2 |grep Index: 

Gibt es eine Eigenschaft in Subversion oder eine Technik Revisionsnummern, um herauszufinden, welche diese Dateien verursacht zu ändern (d Unterschiede zwischen tag1 Version der Datei und tag2 Version derselben Datei)?

Thx Vandana

Antwort

12

Sie können zunächst die Revisionen der Tags finden:

svn info http://svn.twig-project.org/tags/RELEASE_0_9_7 | grep 'Last Changed Rev' 
Last Changed Rev: 331 

svn info http://svn.twig-project.org/tags/RELEASE_0_9_8 | grep 'Last Changed Rev' 
Last Changed Rev: 343 

Sie sind wirklich nicht für eine diff suchen, sind Sie für ein Protokoll suchen. Führen Sie ein ausführliches Protokoll zwischen diesen Revisionen durch, und Sie erhalten die Commits einschließlich geänderter Dateien.

svn log -v -q -r 331:343 http://svn.twig-project.org/trunk 

------------------------------------------------------------------------ 
r332 | fabien | 2010-06-12 18:30:02 +0200 (Sat, 12 Jun 2010) 
Changed paths: 
    M /trunk/CHANGELOG 
    M /trunk/lib/Twig/Environment.php 
------------------------------------------------------------------------ 
r333 | fabien | 2010-06-12 18:45:04 +0200 (Sat, 12 Jun 2010) 
Changed paths: 
    M /trunk/CHANGELOG 
    M /trunk/lib/Twig/Environment.php 
+0

Es gibt ein Problem mit dieser Version: Wenn Sie Stamm von R331 kopieren, die (zum Beispiel) r367 schafft, können Sie das Changelog von r367 haben, nicht R331 als –

+0

erwartet nimmt diese eine lineare Geschichte ohne Zweige. –

2

Wenn Sie möchten wissen, welche Dateien zwischen zwei Tags in einer Arbeitskopie verwenden geändert wurden:

svn merge --dry-run URL_TAG_1 URL_TAG_2 
2

Wenn Sie eine Liste von Änderungen möchten, die von einem Tag zum anderen verschmolzen werden könnten, Sie können es mit dem folgenden erzeugen:

svn mergeinfo --show-revs eligible URL_TAG_1 URL_TAG_2 
2

Das folgende Shell-Skript nimmt eine Quelle und ein DEST und zeigt in Change SOURCE, die nicht in DEST verschmolzen.

Also, die ursprüngliche Frage zu beantworten:

svnincoming ^/tags/TAG1 ^/tags/TAG2 

oder Veränderungen im Kofferraum, um zu sehen, die nicht in die Arbeitskopie Zweig zusammengeführt hat:

cd /working/copy/ 
svnincoming ^/trunk 

Das svnincoming Skript:

#!/bin/sh -e 

SOURCE="$1" 
DEST="${2:-.}" 

if [ "$SOURCE" = "" ]; then 
    echo "Usage: `basename $0` SOURCE[@REV] [DEST[@REV]]" 
    echo "List revisions eligible for merging from SOURCE to DEST (or '.', if omitted)." 
    exit 1 
fi 

svn mergeinfo --show-revs eligible "$SOURCE" "$DEST" | sed 's/^/-/' | xargs -d '\n' svn log "$SOURCE" 
+0

fyi - Ich versuche dieses Skript und bekomme "svn: E155010: Der Knoten '/path/to/working/copy/^tags/V2.2.821' wurde nicht gefunden." – Hippyjim

+0

@Hippyjim: Geben Sie unbedingt '^/tags' ein, nicht nur'^tags'. Oder verwenden Sie einen alten Subversion-Client? (Die Caret-Notation benötigt 1.6 oder höher.) Sie können auch versuchen, das Caret durch Ihre URL "Repository-Root" zu ersetzen (wie durch "svn info" angezeigt), was äquivalent ist. –

1

Seit SVN version 1.9 haben Sie --log Option für svn mergeinfo:

svn mergeinfo --log --show-revs eligible SOURCE TARGET 
Verwandte Themen