2009-08-24 14 views
21

Mi equipo decidió recientemente no utilizar la rama "troncal" que es típica de la mayoría de los diseños de repositorio subversivo. Descubrimos que en cualquier momento dado siempre había una rama particular que funcionaba en el rol tradicional que el tronco tendría en otros repositorios. Es decir, siempre tenemos una sucursal con el número más alto que representa la próxima versión en la que estamos trabajando. Por lo tanto, una fusión al tronco es simplemente superflua, así que nos deshicimos del tronco.Usar Subversion sin Troncal

¿Alguien más está haciendo esto?

Si es así, ¿ha notado alguna ventajas/desventajas?

Incluso si su equipo no hacer esto, ¿alguien tiene alguna idea de este diseño?

Respuesta

29

Estamos hablando de la la Promotional Model - papel de Perforce pone de relieve los problemas con él - se comunican los roles cambiantes de los códigos de líneas móviles y trabajo entre las ramas.

Una expansión en mis puntos de vista de los problemas mencionados:

1) Modificación de la política de código líneas:

Cada línea de código tiene una política, ya sea por escrito y formalizado, o en su totalidad implícita en una cabeza del desarrollador. Se define por ejemplo:

  • que se le permite a comprometerse con el código línea
  • la cantidad de pruebas que se requiere (por ejemplo, hacer la unidad de pruebas tienen que pasar, pruebas de regresión, prueba del sistema completo)
  • ¿Cuántas personas tienen a la revisión de código cambia
  • qué tipo de cambios están permitidos

Con el enfoque troncal, las políticas permanecen fijas, por lo que son más fáciles de anotar, lo que las hace más fáciles de comunicar (más importante en un equipo más grande).

p. Ej.Tronco:

  • cualquier desarrollador puede cometer
  • cualquier cambio
  • pruebas unitarias deben pasar
  • revisión de código después de cometer

rama Versión:

  • único desarrollador de mantenimiento
  • única corrección de errores
  • pruebas de ensayo + regresión
  • unidad
  • revisión de código por otros 2 desarrollador antes de cometer

rama Etiqueta:

  • no compromete después de la creación

desarrollador de privada sucursal:

  • Sólo los controles de desarrolladores en
  • Cualquier cambio
  • Prueba sólo necesitaba antes de la fusión en el tronco
  • revisión de código antes de la fusión en el tronco

Si usted tiene el modelo de promoción, entonces usted tiene una póliza mientras se encuentre en el desarrollo principal, debe decirle a todos cuándo cambia la política mientras se prepara para la publicación, luego otra política (para la línea de código) una vez que se libere la línea.

El modelo de promoción es fácil de obtener, se asigna directamente al modo de trabajo sin control de origen. Pero duele una vez que comienzas a obtener equipos grandes.

Si observa el desarrollo del kernel de Linux, puede ver la tensión entre el modelo promocional y el modelo troncal: el árbol de Linus es promocional: pasa por ciclos entre la ventana de fusión y el período de estabilización/rc. Pero Linux-next y -mm han surgido para dar una línea más troncal.

Los SCM/VCS distribuidos son de todos modos algo diferentes, las políticas no tienen que distribuirse a todos los desarrolladores porque cada desarrollador tiene sus propios árboles y realiza cambios cuando lo desea.

Los proyectos de código abierto adolecen del problema de que no pueden obligar a las personas a realizar el trabajo pesado de estabilizar un lanzamiento, después de la bifurcación del tronco. Por lo tanto, el modelo de promoción es más importante como una forma de forzar los esfuerzos de estabilización, en lugar de solo trabajar en las características.

2) Movimiento de trabajo:

Un desarrollador podría estar trabajando en una característica cuando la política para la línea que está trabajando en los cambios en correcciones de errores solamente, que ahora tiene que cambiar su copia de trabajo a un código- diferente línea. Esto puede ser de fácil a extremadamente difícil dependiendo del sistema SCM en uso. Este problema no ocurre si el desarrollador está trabajando en el tronco, ya que su trabajo siempre va a la troncal.Si el desarrollador se encuentra en una rama privada o característica, entonces su trabajo solo afectará a la troncal (y la versión) en absoluto.

Si una característica ya está registrada, pero se retrasa con respecto a la versión en la que se encuentra actualmente, debe averiguar cómo eliminarla. Este problema aún existe con el modelo de troncales, pero podría ser un poco más fácil de resolver: recoger cosas del tronco para el lanzamiento. Aquí es donde las ramas de características ayudan, pero tienen un costo de integración.

+1

+1 para el enlace al excelente artículo! – RichardOD

+0

Muy buen artículo, gracias Douglas. – Sebastian

+0

Genial - Recibo 6 votos positivos, y la pregunta se ha realizado CW: -) ... –

1

Subversion permite ambos enfoques. El maletero no es una necesidad sino una convención. Si lo tiene, algunas herramientas funcionan más fácilmente (por ejemplo, herramientas de migración para Git). Si no lo tiene, debe hacer algunas cosas manualmente, pero no puedo pensar en algo que notará durante su trabajo diario.

0

Hacemos - más o menos. No usamos un tronco, sino que creamos una nueva rama para cada lanzamiento de nuestros proyectos. Esta rama 'etiquetada' es entonces la troncal de cada versión, y respaldamos las correcciones de errores fusionando los cambios en las versiones anteriores.

Funciona bien para nosotros, pero tenemos una gran cantidad de sub-proyectos en nuestro proyecto.

1

Recientemente comencé a trabajar en un proyecto que está en un repositorio de subversión. Quien creó el repositorio no siguió un diseño particular: simplemente rellenó todo en la raíz del repositorio (sin tronco /, sin ramas /, y ciertamente sin etiquetas /). Quería crear una rama para trabajar y algunas etiquetas para otras cosas, pero me di cuenta de lo difícil que es hacer eso en un repositorio de subversión que no sigue un diseño adecuado.

+0

Esto es cierto, sin embargo, estoy seguro de que es un hombre de paja en este caso, el que pregunta ya tiene varias ramas. –

0

IME, en algunos entornos, el tronco es un buen lugar para intercambiar arreglos y cambios a/desde. Es decir, todos fusionan sus soluciones con el enlace troncal y todos combinan las soluciones de los demás desde el enlace. Descubrimos que era muy útil en un entorno en el que se compartían muchos códigos entre muchos proyectos independientes y donde todos esos proyectos contribuían al código compartido.

Sin embargo, su entorno puede ser diferente.

8

Mi problema con el documento Perforce es que rechaza el modelo promocional sin mencionar la principal ventaja, la reducción de la sobrecarga de fusión. De hecho, el documento erróneamente establece que el "modelo principal" impone "ningún gasto administrativo adicional", un reclamo ridiculo. El modelo "fusionarse siempre con el maletero" significa exactamente eso: usted tiene la responsabilidad de que todos tengan que fusionarse. Esto es una sobrecarga sin sentido si tiene la siguiente situación (que tenemos):

a) un pequeño equipo (5 a 7 desarrolladores) todos a una distancia de gritos el uno del otro. la comunicación es un no-problema cuando tenemos que realizar una rama

y

b) una base de código donde hay siempre realmente sólo 2 ramas principales - una rama de producción y "lo siguiente que en el desarrollo". Tal vez una vez en una luna azul tenemos 3.

Supongo que mi punto es que es algo situacional. Decir que el "modelo promocional tiene problemas" es como decir "nunca use un OR/M". Depende de tu entorno

+0

Sí - estoy de acuerdo - en equipos pequeños la sobrecarga de la comunicación es menor, y el trabajo requerido para estabilizar la liberación involucra a todos de todos modos (para que el tronco se estabilice (solo tiene correcciones) o se estanque (correcciones en una rama diferente)) –

+0

In mi experiencia, sin embargo, sigue siendo la carga de trabajo móvil. –

+0

Lo he encontrado útil: si el nivel de error no es alto durante la estabilización, hay un lugar para corregir los errores, incluso si se han extraído de la versión. –

Cuestiones relacionadas