2009-10-13 17 views
34

Tenía una rama privada a la que hice un montón de commits, luego la fusioné en trunk, e hice algunos pequeños retoques allí.SVN: Crear un diff para muchas revisiones

Ahora el mantenedor de troncales quiere una diferencia de todos mis cambios en caso de que necesitemos una reversión.

¿Cómo puedo crear esto? Si necesita números de sus ejemplos, se supone que

224446

era mi principal de revisión en el que se fusionaron en el tronco,

224453 y 224462

eran mis correcciones menores, y tengo un sinnúmero de cambios cuando en mi rama privada.

Solución (a través de Martin)

svn diff -r 224452:224453 > ~/tmp/diff.1 
svn diff -r 224462:224463 > ~/tmp/diff.2 
svn up -r224446 
patch < ~/tmp/diff.1 -p0 
patch < ~/tmp/diff.2 -p0 
svn diff -r 224445 > ~/tmp/changes.patch 

luego enviarlo por correo ~/tmp/changes.patch a nuestro mantenedor tronco para su custodia.

+2

no caso de que la segunda línea de ser 'svn diff -r 224461 : 224462> ~/tmp/diff.2'? – Muhd

Respuesta

31

Un procedimiento posible sería para hacer esto:

  1. crear diffs para 224.453 y 224.462 (por ejemplo por svn diff -r 224452:224453 > diff1.patch).
  2. el registro de salida 224446 (svn up -r224446)
  3. aplicar los diferenciales (por ejemplo patch -p0 -i diff1.patch)
  4. crear un diff de que contra 224445 (svn diff -r 224445 > diff2.patch)
7

Una opción sería crear una rama en 224446, luego combinar en 224453 y 224462. Luego tomar una diferencia entre eso y 224445 en la línea externa. Eso debería ser todos los cambios en uno, y se pueden crear como un archivo de parche caso de que necesite:

# Branch from your initial checkin 
svn cp svn://xyz/[email protected] svn://xyz/branches/foo 

# Check it out 
svn checkout svn://xyz/branches/foo tmp 

# Merge in the two changes 
svn merge -c 224453,224462 svn://xyz/trunk tmp 

# Commit the changes 
svn commit tmp -m "Extra commits 224453 and 224462" 

# Diff the branch from mainline before original 
svn diff svn://xyz/[email protected] svn://xyz/branches/foo 

Esto es en gran parte la misma que la respuesta de Martin, sólo que con diferentes formas de aplicar los cambios y obtener la diffs. Tenga en cuenta que, aunque en este caso he confirmado los cambios, no es necesario, puede hacer svn diff svn://xyz/[email protected] tmp en lugar de los dos últimos comandos. Lo bueno de tenerlo en el repositorio es . Cualquiera puede aplicar la diferencia en reversa para hacerla retroceder, si fuera necesario.

+0

suena genial. No estoy muy familiarizado con SVN, ¿puedes publicar algunos comandos? –

+0

+1 para la solución de Jon. ¿Qué pasa cuando agrega otra revisión? Entonces todo el parche necesita ser regenerado. Los parches son buenos cuando no tienes acceso de confirmación. – cetnar

+1

Casi me pierdo la posdata de la solución de Jon; también puede omitir el paso svn cp y simplemente 'svn co svn: // xyz/trunk @ 224446 tmp'. Esto funciona incluso si no tiene permiso para alterar el repositorio directamente. –

Cuestiones relacionadas