svn - two - tortoise merge
¿Qué sucede para confirmar los registros en una sucursal después de la fusión? (4)
Buenas respuestas ... Si también desea conocer los archivos registrados y, potencialmente, el nombre de la rama, agrupe la opción -v [--verbose] con -g [--use-merge-history].
ejemplo:
svn log -vg
El resultado tendrá la ruta completa de los archivos registrados (incluso la rama fusionada), así como un mensaje (desde ''revision_url'') para los archivos agregados en la revisión con la combinación.
Guión:
- El programador crea una rama para el proyecto ''foo'' llamada ''my_foo'' en la revisión 5
- El programador realiza múltiples cambios en varios archivos mientras trabaja en la función ''my_foo''.
- Al final de cada paso importante, por ejemplo, agregando varias funciones nuevas a una clase, el programador realiza un
svn commit
en los archivos apropiados, por lo tanto, lossvn commit
a la rama - Después de varias semanas y muchos commits más tarde (cada commit tiene un registro de commit que describe lo que hizo), el programador fusiona la rama nuevamente en el trunk:
#Assume the following is being done from inside a working copy of the trunk:
svn merge -r 5:15 file:///path/to/repo/branches/my_foo
Hazzah! ¡ha fusionado todos sus cambios de nuevo en el maletero! Hay mucho regocijo y consumo de Mountain Dew.
Ahora digamos que otro programador viene una semana más tarde y actualiza su copia de trabajo de la revisión 5 a la revisión 15. "Guau", dicen. "Me pregunto qué ha cambiado desde la revisión 5". El programador luego hace un svn status
en su copia de trabajo y obtienen algo como esto:
------------------------------------------------------------------------ r15 | programmer1 | 2010-03-20 21:27:04 -0400 (Sat, 20 Mar 2010) | 1 line Merging Version 2.0 Changes into trunk ------------------------------------------------------------------------ r5 | programmer2 | 2010-02-15 10:59:55 -0500 (Mon, 15 Feb 2010) | 1 line Added assets/images/tumblr_icon.png to trunk
¿Qué diablos pasó con todas las notas que el otro programador puso con todas sus confirmaciones en su rama? ¿Aquellos que no son detenidos durante una fusión? ¿Estoy loco o simplemente olvidándome de algo?
Pruebe svn log -g
para incluir el historial de fusión almacenado desde Subversion 1.5.
TortoiseSVN tiene la casilla de verificación "Incluir revisiones fusionadas" en la parte inferior del cuadro de diálogo "Mostrar registro" para incluir los comentarios enviados a las sucursales.
La respuesta está desactualizada , ahora que tenemos svn log -g
.
No, no estás loco. Así es como funciona, desafortunadamente.
Lo mejor que puede hacer es incluir en el mensaje de confirmación para fusionar la url de rama y el número de revisión, de modo que se pueda buscar manualmente el registro de revisión para esa rama. (Los datos todavía están allí, por supuesto).
Sin embargo, no sabe cuáles de los cambios lo han convertido en el tronco y cuáles no.
Si no ha habido cambios o hay pocos cambios en el tronco, podría ser una opción realizar una fusión inversa (fusionar de tronco a rama) y luego reemplazar el tronco con la rama. Este tipo de razonamiento también se puede realizar en subcarpetas individuales (por ejemplo: reemplace la subcarpeta de implementación del analizador XML desde la rama, guarde el resto). Reemplazar carpetas (con svn delete, svn copy) mantendrá el historial de revisión.
Para los archivos que se agregaron recientemente durante la fusión, su historial de revisión se puede copiar desde la rama, si utilizó el comando svn copy. Sin embargo, no estoy seguro si el comando de fusión incluye soporte para esto.
Puede ser interesante saber si hay una herramienta para svn que haga una "rebase" (como en git o mercurial). Eso crearía compromisos individuales para cada cambio en la rama. Por otro lado, tal vez los compromisos individuales son demasiado desordenados.
La mejor recomendación que puedo dar es utilizar una buena interfaz de usuario, como Trac, que facilite la inspección del historial de revisión, para que pueda ver lo que sucedió en la sucursal.