2011-01-24 14 views
29

En Subversion, creé una rama desde un tronco usando svn copy. De acuerdo con el SVN 1.5 manual, "Esta es la forma más fácil de" etiquetar "una revisión en su repositorio; simplemente svn copie esa revisión (generalmente HEAD) en su directorio de etiquetas".¿Cómo comparo una rama contra el tronco en subversión?

svn copy file:////svn/projectX/trunk file:///svn/projectX/branches/stefanl 

Entonces, hago mis modificaciones a la rama stefanl. Quiero enviar mis cambios al tronco, pero antes de hacerlo me gustaría ver una diferencia de los cambios.

¿Cómo puedo diferir la rama 'stefanl' contra la rama 'trunk'? Probé svn diff, pero no proporcionó más información:

% svn diff file:////svn/projectX/trunk file:///svn/projectX/branches/stefanl 
Property changes on: . 
___________________________________________________________________ 
Modified: svn:mergeinfo 
    Reverse-merged /trunk:r1699-1870 
+0

Eso debería funcionar. ¿Definitivamente ha realizado los cambios en su sucursal? ¿Estás preguntando si puedes diferir tu copia de trabajo contra una rama diferente? – Rup

+1

@Rup: he asignado mis cambios a la rama 'stefanl'. Ahora quiero fusionar la rama 'stefanl' en el maletero. Pero antes de hacerlo, quiero obtener una vista previa de los cambios. Pensé que 'svn diff' mostraría todas las diferencias entre el tronco y mi rama, pero no es así. –

+1

@Stevan: 'svn diff' * does * muestra las diferencias entre ramas cuando se usa así. El hecho de que no te muestre ninguno significa que no hay ninguno. Examine la salida de 'svn log -v file: /// svn/projectX' para ver qué sucedió, específicamente para ver en qué rama ha realizado los cambios que esperaba ver. –

Respuesta

6

Puede Unix diferencias para comparar directorios.

para encontrar los archivos que faltan:

diff -r svn/projectX/trunk svn/projectX/branches/stefanl | grep -i only 

Para saber cuáles son las diferencias entre los archivos:

diff -ru svn/projectX/trunk svn/projectX/branches/stefanl 

que tenía la misma pregunta y encontré la sugerencia de un hilo mail: http://svn.haxx.se/users/archive-2003-08/0538.shtml

+0

Sí, este. La clave que faltaba en la pregunta inicial era la bandera '-r' (recursiva). El indicador 'u' en el segundo ejemplo que se muestra aquí simplemente cambia el tipo de salida de diff. –

1

Gracias por la información chicos, agregaría algo para mejorar la legibilidad de los resultados diff. Si usó: SVN svn diff: // url: 9090/ramas/PRD_0002 svn: // url: 9090/ramas/TST_0003> svn_diff_filename.txt

También puede utilizar: findstr "Índice:" C: \ ruta \ svn_diff_filename .txt> svn_diff_file_list.txt

Eso le traerá una lista legible de archivos que tienen alguna diferencia.

Saludos, Kra.

1

Si está utilizando el complemento Subversivo con eclipse (other ide?) Cambie a la perspectiva de búsqueda del repositorio. En el panel de repositorios SVN simplemente haga clic con el botón derecho en cualquier elemento y seleccione la opción "Comparar ...". Debe ser intuitivo a partir de ahí.

46

Agregando a las respuestas anteriores (si se utiliza Tortoise SVN en Windows):

  • Haga clic derecho en cualquier carpeta. Desde el menú contextual, seleccione TortoiseSVN ->Repo-browser.
  • Ingrese su dirección de repos en el cuadro URL.
  • Ve a la primera carpeta que quieras comparar. Haga clic con el botón derecho y seleccione Marque para comparar.
  • Navega a la segunda carpeta. Haga clic derecho y seleccionar URL Comparar
+3

La pregunta no menciona Tortoise SVN o Windows, por lo que sería preferible una respuesta usando la línea de comando SVN. –

+0

Gracias Treb. Eso fue una adición útil a la conversación. – sjwarner

3

Sobre la base de las otras respuestas y un poco de investigación, escribí un guión que lo hace automáticamente.

#!/bin/bash 
url=$(svn info | grep ^URL: | sed -e 's,^URL: ,,') 
root=$(svn info | grep '^Repository Root:' | sed -e 's,.*Root: ,,') 
trunk=$root/trunk 
if [[ -n "$1" && ! -e "$1" ]] 
then 
    echo "What? svn diff \"$1\"? really?" 
    exit 
fi 
svn diff $url/$1 $trunk/$1 > trunk.diff 

Lo ejecuta justo debajo de la rama. Puede pasar una ruta (dir o archivo) y funcionará como se esperaba. Si no, entonces solo diferirá la rama y el tronco.

+0

Usar XML hace que sea mucho más confiable: 'svninfo() {svn info --xml | xmllint --xpath "$ 1" '/ text()' -; } ' – ceving

+0

Esto es bueno si la rama se creó desde la raíz del repositorio. Si la rama se creó a partir de un subdirectorio, esto no funcionará. Por lo tanto, es posible que desee modificar el script para tomar 2 argumentos y duplicar el primer argumento si solo se proporciona uno. –

1

Uso:

svn diff ^/trunkUrl/fileName ^/branchUrl/fileName 

esto le dará la diferencia entre un archivo en rama y el tronco.

Cuestiones relacionadas