2010-07-17 10 views
11

Je sais qu'un diff entre deux balises répertorie les 'fichiers' qui ont été changés entre ces deux balises par la méthode suivante.Subversion: Comment trouver les différences entre deux balises?

svn diff tag1 tag2 |grep Index: 

Y at-il dans la propriété Subversion ou une technique pour trouver des numéros de révision qui ont causé ces fichiers à modifier (i.e. différences entre la version tag1 de la version du fichier et tag2 du même fichier)?

Thx Vandana

Répondre

12

Vous pouvez trouver d'abord les révisions des tags:

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 

Vous cherchez pas vraiment pour une diff, vous êtes à la recherche d'un journal. Faites donc un journal détaillé entre ces révisions et vous obtiendrez les commits, y compris les fichiers modifiés.

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

Il y a un problème avec cette version: si vous copiez le tronc de R331 qui crée (par exemple) R367, vous aurez le changelog de R367, non R331 comme prévu –

+0

Cela suppose linéaire histoire sans branches. –

2

Si vous voulez savoir quels fichiers ont été modifiés entre deux balises utiliser dans une copie de travail:

svn merge --dry-run URL_TAG_1 URL_TAG_2 
2

Si vous voulez une liste des révisions qui pourraient être fusionnées d'une étiquette à l'autre, vous pouvez générer avec les éléments suivants:

svn mergeinfo --show-revs eligible URL_TAG_1 URL_TAG_2 
2

le script shell suivant prend une source et un DEST et montre changesets dans la source qui n'a pas été fusionnées en DEST.

Donc, pour répondre à la question initiale:

svnincoming ^/tags/TAG1 ^/tags/TAG2 

Ou voir des changements dans le tronc qui n'a pas été intégré dans la branche de copie de travail:

cd /working/copy/ 
svnincoming ^/trunk 

Le script svnincoming:

#!/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 - J'essaie ce script et je reçois "svn: E155010: Le noeud '/path/to/working/copy/^tags/V2.2.821' n'a pas été trouvé." – Hippyjim

+0

@Hippyjim: Veillez à taper '^/tags', pas seulement'^tags'. Ou peut-être utilisez-vous un ancien client Subversion? (La notation caret requiert la version 1.6 ou ultérieure.) Vous pouvez également essayer de remplacer le curseur par votre URL "Repository Root" (comme indiqué par 'svn info'), ce qui est équivalent. –

1

Depuis SVN version 1.9 vous avezOptionpour svn mergeinfo:

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