2009-08-03 23 views
18

Tengo 2 repositorios. Como el código troncal estaba en un repositorio, que estaba protegido, hice un checkout y luego lo registré en el otro repositorio (ya que los usuarios no tenían permiso para el primer protegido).diff SVN en 2 repositorios diferentes

Ahora el problema es que ambos repositorios se han trabajado y deseamos finalmente fusionar el código/rama en el segundo desprotegido con el protegido. Pero, habrá conflictos en estos.

¿Hay alguna manera de averiguar el diferencial para las 2 ramas del repositorio? Además, si hay cambios en el espacio en blanco, ¿cómo los ignoro?

Respuesta

23

no sé de una característica integrada de la subversión que permitiría a esto, pero se podría crear una comprobación completa de ambos repositorios y utilizar la utilidad de línea de comandos de diferencias para comparar los dos copias de trabajo:

diff -w -u -r -N WorkingCopy1 WorkingCopy2

-w ignorar re todos los espacios -u de usar el formato diff unificado (como la subversión) -r para recursiva -N para permitir que nuevos archivos aparecen en el parche

No es sin duda el método más rápido, pero podría ser aceptable para un proceso de una sola vez . También puede crear un parche redirigiendo la salida a un archivo diff -w -u -r -N WorkingCopy1 WorkingCopy2 > wc1-to-wc2.patch

Si está ejecutando Windows, Win32 construye de diff y el parche se puede encontrar aquí: http://gnuwin32.sourceforge.net/packages/diffutils.htm

+0

Me gusta la idea. Si la cantidad de conflictos en el archivo esperados es pequeña, también podría hacer rsync -av --ignore = '. Svn' en ambas direcciones (primero con -n, indicador de ejecución en seco y luego sin) – bobah

+1

Sugerir agregar --exclude = " svn " ... o .git .hg ... etc por ejemplo: diff -w -u -r -N --exclude =" sVN" WorkingCopy1 WorkingCopy2 – ideasman42

+0

si usted quiere conseguir realmente los frutos secos:. diff - w -u -r -N -x '* .pyc' --exlude = ". svn" WorkingCopy1 WorkingCopy2 | vim - –

3

Puede usar una herramienta como kdiff3 para simplemente comparar copias de trabajo extraídas de ambos repositorios. (Simplemente apúntelo en los dos directorios y comparará recursivamente todos los archivos en ellos.)

1

Probablemente lo más simple es verificar ambas ramas y usar una herramienta como winmerge (que le permitirá ignorar espacios y hacer un multi comparar)

+0

ventajas de utilizar una herramienta como WinMerge o kdiff3 son lado- comparación por lado y navegación interactiva (y también fusión, si usted tiene la necesidad). – apollodude217

1

Copiar el segundo repositorio en el primer uso de algo a lo largo del siguiente en una copia de trabajo del primer repositorio:

svn cp svn://url/to/the/second/repo branches/second_repo 

el registro y hacer una fusión regular a partir de la nueva rama en el tronco.

En esta explicación se supone que utiliza el diseño de repositorio svn más común (branches /, tags/y/trunk como directorios de nivel superior) y puede ser necesario adaptar el comando de copia.

También tenga en cuenta que algunas GUI para SVN también admiten este modo de copia. En SmartSVN, el comando se llama "Copiar desde la URL".

5

La mejor herramienta para hacer esta fusión puede ser git-svn.Si la URL de los dos repositorios son $ URL 1 y $ URL2, a continuación, tratar:

 
$ git svn clone $URL1 svn1 
$ git svn clone $URL2 svn2 
$ cd svn1 
$ git fetch ../svn2 
$ git diff FETCH_HEAD master 

para ignorar los cambios de espacio en blanco, use git diff -w

1

Las siguientes obras pero lenta:

SVN diff [url] [url]

27
svn diff [email protected] [email protected] 

Ejemplo:

svn diff --old=http://svn.whatever.com/trunk/[email protected] --new=http://svn.whatever.com/branch/[email protected] 

Esto le permite especificar tanto las ramas como los números de revisión para ambos archivos. Sé que funciona porque lo acabo de ejecutar.

+3

Esta es la respuesta correcta. –

+0

+1 ordenado; aplausos, y todo desde la línea de comandos sin necesidad de extras. – Rob

+0

obteniendo 'svn: Lo sentimos, se ha llamado a svn_client_diff4 de una manera que aún no es compatible' con ningún maestro de ayuda? –

0

Si está en Linux también se podría utilizar "funden" herramienta ... Se hace gran diff, y se puede hacer fácilmente una fusión ...

Cuestiones relacionadas