Inicio > SVN > SVN MERGE

SVN MERGE

Cuando trabajamos en un software que evoluciona, normalmente, cada nueva versión es guardada en una branche de svn.

A veces, los ciclos de desarrollos estan superpuestos, entonces mientras la versión 1.1 esta siendo entregada al cliente, la 1.2 empieza su desarrollo con nuevas evoluciones. Y no falta el error en la 1.1 que es detectado y corregido justo después que otros trabajan en la 1.2. En ese caso, los commits que se enviaron a la 1.1, deben ser incluidos en la 1.2 para que el error no se siga produciendo en la nueva versión.

Listar los commits a fusionar


No siempre sabemos la cantidad de commits que faltan sobre la nueva branche. Para tener un estado de ellos podemos hacer:


jmortega@jomaora:~/miproyecto/1.2$ svn mergeinfo http://subversion.miproyecto.com/miproyecto/branches/1.1 --show-revs eligible
r113374
r113450
r113452
r113586

La lista obtenida son los número de commit que hacen falta en la versión 1.2. En los trabajos donde intervienen muchas personas, hay dos opciones… o tu hiciste alguno de esos commits en la 1.1, o te pidieron que fusionaran todo lo que los otros olvidaron de hacer (Yo no soy tan buena gente, jeje).

Simular la fusion


Si sólo quieres integrar tu commit (suppongamos que es el 113450), sólo debes hacer


jmortega@jomaora:~/miproyecto/1.2$ svn merge -c 113450 http://subversion.miproyecto.com/miproyecto/branches/1.1 --dry-run
--- Fusion de r113450 dans 'src':
_U    src
--- Fusion de r113450 dans 'src/archivo1.jsp':
U     src/home.jsp
--- Fusion de r113450 dans 'src/js':
A     src/js/jquery
A     src/js/jquery/jquery.noconflict.js
--- Fusion de r113450 dans 'src/stylesheets/plantilla.xsl':
G     src/stylesheets/plantilla.xsl

La opción –dry-run nos permite de simular como será la fusión, sin que los archivos vayan a ser modificados de verdad en la copia local. Esto nos permite ver cuales son los archivos que serán modificados. En la salida del comando, tenemos que para la revisión 113450:

  • el directorio src fue actualizado en sus propiedades svn
  • el archivo src/home.jsp actualizado en texto (es decir que nuevas líneas fueron agregadas)
  • que el directorio jquery fue agregado al proyecto con un archivo js dentro
  • que la plantilla xsl fue fusionada. Es decir, que localmente este archivo tenía modificaciones, a las que fueron agregadas los cambios que vienen de la revisión, sin que se haya producido conflicto (ouf!)

Por supuesto existe el caso en el que estas fusiones terminan en conflicto (modificaciones locales y de la versión predecesora sobre la misma línea de código). En ese caso, hay que resolverla de la misma manera que se resuelve cuando hay conflictos por un svn up.

Fusionar


Si estás seguro de las fusiones que se van a hacer, quitamos el –dry-run del comando anterior y la fusión se ejecuta.
Luego hay que commitear para que la revision quede insertada en la nueva branche.

Variantes svn merge

  • Si tienes que fusionar todos las revisiones de los demás:

svn merge http://subversion.miproyecto.com/miproyecto/branches/1.1

  • Si sólo se quieren fusionar un grupo de revisiones

svn merge -r 113374:113452 http://subversion.miproyecto.com/miproyecto/branches/1.1

Desde la revisión 113374 hasta la 113452

  • Desde una revisión hasta la última

svn merge -r 113374:HEAD http://subversion.miproyecto.com/miproyecto/branches/1.1

  • Fusionar solamente las propiedades svn pero no los cambios textuales

svn merge -c 113374 http://subversion.miproyecto.com/miproyecto/branches/1.1 --record-only

Supresión de una revisión

A veces, por accidente, un svn commit puede partir antes de tiempo con archivos que tienen modificaciones locales, pero que no queremos que se encuentren en el repositorio. Por ejemplo cuando vamos a utilisar un archivo con las rutas de los archivos a enviar (ver post https://jomaora.wordpress.com/2011/11/23/usos-utiles-de-cut-en-linux/), pero olvidamos el –targets y oups!, enviamos más de la cuenta.

En ese caso, svn merge puede ayudarnos. Supongamos que el número de revisión es el 112897

jmortega@jomaora:~/miproyecto/1.2$ svn merge -c -112897 http://subversion.miproyecto.com/miproyecto/branches/1.2
--- Fusion inverse de r112897 dans '.' :
_U   src
--- Fusion inverse de r112897 dans 'src/' :
D    src/version_detail.jsp
U    src/home.jsp

Este comando nos da como salida, que las propiedades del directorio src fueron modificadas (revertidas), el archivo version_detail.jsp fue suprimido (lo que permite de inferir que en la revision 112897 éste fue agregado) y el home.jsp es también actualizado.

No olvidar hacer un commit, para que los cambios de la revision 112897 desaparezcan de la branche.

Categorías:SVN Etiquetas: ,
  1. Aún no hay comentarios.
  1. 18 julio, 2012 a las 21:45

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Hype Driven Development

coz' geeks love new stuff !

My experiments with SCRUM

Site to discuss Agile (Scrum, XP, etc) concepts and ideas.

CommitStrip

Mi propia cheatsheet...

Chris Aniszczyk's (zx) diatribe

work. life. open source. diatribes.

GermanTrevi

repositorio de mi mente...

A %d blogueros les gusta esto: