2010-07-17 13 views
11

Sé que una diferencia entre dos etiquetas enumera los "archivos" que se han cambiado entre esas dos etiquetas mediante el siguiente método.Subversion: ¿Cómo encontrar las diferencias entre dos etiquetas?

svn diff tag1 tag2 |grep Index: 

¿Hay alguna característica en Subversion o alguna técnica para averiguar los números de revisión que causaron esos archivos para cambiar (es decir las diferencias entre la versión tag1 de la versión del archivo y la etiqueta 2 del mismo archivo)?

Thx Vandana

Respuesta

12

Usted puede encontrar primero las revisiones de las etiquetas:

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 

Usted no está realmente en busca de un diff, que busca un registro. Haga un registro detallado entre esas revisiones y obtendrá las confirmaciones, incluidos los archivos modificados.

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

Hay un problema con esta versión: si copia tronco de R331 que crea (por ejemplo) R367, tendrá el registro de cambios de R367, no R331 como se esperaba –

+0

Esto supone un lineal historia sin ramas. –

2

Si quieres saber qué archivos se han cambiado entre dos etiquetas utilizar en una copia de trabajo:

svn merge --dry-run URL_TAG_1 URL_TAG_2 
2

Si desea una lista de revisiones que podrían fusionarse de una etiqueta a otra, se puede generar con el siguiente:

svn mergeinfo --show-revs eligible URL_TAG_1 URL_TAG_2 
2

el siguiente script toma una fuente y una DEST, y muestra los conjuntos de cambios en FUENTE que no se ha fusionado en DEST.

Por lo tanto, para responder a la pregunta original:

svnincoming ^/tags/TAG1 ^/tags/TAG2 

O para ver los cambios en el tronco que no se ha fusionado en la rama copia de trabajo:

cd /working/copy/ 
svnincoming ^/trunk 

El guión 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 - Intento este script y obtengo "svn: E155010: No se encontró el nodo '/path/to/working/copy/^tags/V2.2.821'." – Hippyjim

+0

@Hippyjim: asegúrese de escribir '^/tags', no solo'^tags'. ¿O tal vez estás usando un antiguo cliente de Subversion? (La notación de intercalación requiere 1.6 o posterior). También puede intentar reemplazar el símbolo de intercalación con su URL "Raíz de repositorio" (como se muestra por 'svn info'), que es equivalente. –

1

Desde SVN version 1.9 tienes --log opción para svn mergeinfo:

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