2010-03-26 16 views
37

Escenario:¿Qué sucede para confirmar los registros en una sucursal después de la fusión?

  1. programador crea una rama de 'foo' llamada 'my_foo' proyecto en la revisión 5
  2. programador hace varios cambios en varios archivos mientras trabaja en la función 'my_foo'.
  3. Al final de cada paso importante, dicen añadiendo varias funciones nuevas a una clase, el programador hace un svn commit en los archivos necesarios para ello, ellos cometen a la rama
  4. Después de varias semanas y muchos se compromete más adelante (cada confirmación tener una registro de confirmación que describe lo que hizo), el programador se funde la rama en el tronco:
 

#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 llega una semana después 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 entonces hace un svn status en su copia de trabajo y se ponen 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 otro programador puso en con todos sus comete en su rama? ¿Aquellos que no son detenidos durante una fusión? ¿Estoy loco o simplemente olvidándome de algo?

Respuesta

9

Answer is outdated, 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. (La información todavía está allí, por supuesto).

Sin embargo, no sabe cuáles de los cambios han llegado al tronco y cuáles no.

Si no ha habido cambios o ha habido 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 de la rama, guarde el resto). Reemplazar carpetas (con svn delete, svn copy) mantendrá el historial de revisiones.

Para los archivos que se agregaron recientemente durante la fusión, su historial de revisión puede copiarse 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 hace que sea fácil inspeccionar el historial de revisiones, para que pueda ver lo que sucedió en la sucursal.

+0

Excelente información, gracias. Pregunta de seguimiento: Una vez que una rama se ha fusionado al tronco, ¿no debería eliminarse ya que ya no es necesaria? ¿O debería mantenerse para siempre? Si elimino una rama, ¿todos los datos de compromiso/revisión van con ella? –

+1

Diría que elimine la rama lo antes posible (es decir, cuando todo se haya fusionado o se haya vuelto obsoleto) para evitar confusiones/confusión. Puede recuperar la rama más tarde, si es necesario (creando una nueva rama como copia de una revisión anterior). Nada en Subversion se borra. – Thilo

+0

Entonces, si alguien quisiera ver las confirmaciones de una sucursal eliminada, tendría que verificar la marca y luego hacer un registro de svn. ¿O pueden hacer algo con svn log directamente? –

41

Pruebe svn log -g para incluir el historial de combinación que se almacena desde Subversion 1.5.

+7

+1 esta es la respuesta que necesitamos los usuarios de Google. –

+0

+1 Absolutamente. Sin embargo, debe tenerse en cuenta que si la fusión reemplazó el archivo, las revisiones en el medio no aparecerán en el registro. (Para identificar los archivos reemplazados, lo verá como "R" en el 'svn log --verbose' de la revisión de combinación). Me volví loco al tratar de entender por qué faltaban las revisiones * en el medio *. – scraimer

13

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 confirmados en las ramas.

+0

¿Hay algo especialmente que hacer para tener commits en el tronco con svn merge? – Cirelli94

2

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 

La salida tendrá la ruta completa del comprobado en los archivos (incluso la rama fusionada), así como (de 'revision_url') mensaje para archivos añadidos en la revisión con la fusión.

Cuestiones relacionadas