2010-05-24 6 views
18

Tuvimos una rama de SVN recientemente que se había fusionado de nuevo a trunk, y se necesitaba algo más de trabajo en esa característica/área funcional. Sugerí usar la misma rama, pero me dijeron que no debías reutilizar una rama una vez que se haya integrado en el enlace troncal (se proporcionó una referencia en documentos SVN, no puedo encontrarla ahora). Eso sugiere que una rama es bastante inútil una vez que se fusiona con el tronco, por lo que mi pregunta es cuando ya no se necesita una rama, ¿debería simplemente eliminarse o guardarse?¿Qué se supone que debes hacer con las antiguas ramas de SVN?

Respuesta

17

Cuando integro una rama, la muevo de branches/ a branches/integrated/. Mantiene el branches/ limpio, por lo que es fácil encontrar el trabajo actual, pero también hace que sea fácil desenterrar las ramas antiguas para ver qué cambios se realizaron sin necesidad de realizar una gran cantidad de arqueología de revisión.

+1

Lo llamé ramas-cementerio. –

+1

He usado "ático". –

+2

Para entretenerme, también utilizo el comentario sobre la confirmación de 'Podaderas viejas podadas' –

1

Después de un período de tiempo cuando el proyecto termina, elimino ramas antiguas.

Puede reutilizar los nombres de las sucursales, pero ¿por qué? Los nombres son baratos. No llame "trabajo" a su sucursal, sino más específico, como "conversión de datos fase 1".

+0

¿Qué sucede si eliminas una rama y luego tratas de crear otra con el mismo nombre? en nuestro caso, tuvimos uno (pensé) un nombre específico como "conversión de datos", ¡sin saber que alguna vez tendríamos una fase 2! –

+0

Las ramas (la antigua que eliminó y la nueva que creó con el mismo nombre) son distintas y no comparten el historial de revisión. Solo tienen un nombre similar, pero también podrían haber recibido diferentes nombres a medida que obtienes el mismo efecto. –

+0

PUEDE reutilizar los nombres de las sucursales. Solo trato de no hacerlo. En su caso, yo haría "conversión de datos" y luego cuando descubrí que la fase dos tenía que pasar, que sea "conversión de datos fase 2". –

0

Recomendaría no eliminar ramas antiguas a menos que estén causando problemas. En realidad, no le ahorra espacio, y hace que sea más fácil mirar versiones antiguas si es necesario.

Reutilizar una rama después de que se haya fusionado con el tronco es casi seguro que es una mala idea.

+1

yup, reutilizar un nombre de rama es como reutilizar los calcetines de ayer – shfx

5

SVN 1.5 introdujo la propiedad "mergeinfo", que le permite reintegrar fácilmente ramas al tronco mientras admite actualizaciones de ramas repetidas. Esto le permite crear una bifurcación, actualizar periódicamente la bifurcación desde el enlace troncal y, finalmente, reintegrar la bifurcación al enlace troncal (svn merge --reintegrate). Esto es útil, por ejemplo, cuando se crea una rama para corregir un error o para desarrollar una funcionalidad.

La forma en que se implementa mergeinfo no le permite realizar una reintegración posterior, por lo que esta es la razón por la que se recomienda no volver a utilizar la rama.

Esto es problemático para "ramas de liberación" cuando desea desarrollar las correcciones de errores en la rama de liberación y realizar la reintegración periódica al tronco.

Si desea volver a utilizar una rama, el patrón habitual es crear una nueva copia (rama) con el mismo nombre:

  1. eliminar la rama
  2. cometer
  3. recrear la rama (ramificación en un camino con el mismo nombre)
  4. cometer
  5. trabajo en la nueva rama

Cuando "recrea" la bifurcación, en el paso 3, mergeinfo se restaura, por lo que puede reinsertarse en el futuro sin problemas.

Volver a su pregunta: "¿Entonces mi pregunta es que una rama ya no es necesaria, simplemente debería ser eliminada o guardada?" Guardaría la rama, por lo que sería visible en la revisión HEAD. La desaparición de las ramas es confusa ("oye, ¿creamos una rama para el lanzamiento 0.1 la semana pasada?" "Mmm, no recuerdo ... revisa la historia del repositorio")

En cuanto a la reutilización de la sucursal, lo haría use la convención para nunca reutilizar una rama, y ​​si necesita "agregarle algo", vuelva a crearla. Pero en mi opinión, es mucho más claro utilizar un nombre de rama diferente. Probablemente pueda usar una convención de nomenclatura para identificar las ramas. Por ejemplo, el original sería branches/Issue-1 y subsiguientes extensiones branches/Issue-1.0, branches/Issue-1.1, etc.

Mergeinfo references.

http://blogs.open.collab.net/svn/2008/07/subversion-merg.html http://blogs.open.collab.net/svn/2009/11/where-did-that-mergeinfo-come-from.html

0

La buena práctica, mientras que el desarrollo a grandes proyectos, es nombrar sus ramas utilizando nombres de tareas de proyecto herramienta de seguimiento: por ejemplo, "DEV-1512", "FEAT-512", o bugtracker tickets: "BUG-5142", etc.

Cuando la tarea se completa, se inicia y se ejecuta en el servidor de producción, elimine la rama. Siempre puedes fusionar de nuevo.

PS. Imagínese runung svn ls en $ repo/ramas con 9.999 sucursales;)

+0

. Puedo ver completamente el beneficio de incluir el número de rastreo, pero también tengo algo descriptivo. FEAT-132-image-blur-function, solo para evitar tener que buscar esos números para otros miembros del equipo. –

4

From Wikipedia: "Una vez que una rama se ha cortado o de cualquier otra manera separada de su fuente, que se conoce más comúnmente como un palo"

Creo que deberías crear un directorio "sticks" al mismo nivel que las ramas

+1

+1 por ingenio – Kyle

Cuestiones relacionadas