¿El inconveniente de fusionarse en SVN antes de v1.5 es obsoleto ahora cuando la falta de metadatos ya no es el caso?

11

Estoy comenzando con SVN y muchas fuentes dicen que la fusión es muy difícil en SVN en comparación con las herramientas DVCS. Las preguntas más recientes que pude encontrar aquí sobre SE son de 2012.

A veces se menciona que la razón es que SVN anterior a v1.5 no tenía metadatos, pero SVN está en la versión 1.8.9 ahora.

Dado que SVN ahora es mucho más maduro que v1.5, y especialmente el hecho de que no usamos SVN 1.5 para no sufrir la falta de metadatos mencionada, ¿hay todavía mucha validez en esos argumentos contra SVN?

Entiendo que DVCS tiene un enfoque completamente diferente que a menudo es más deseable, pero para aquellos que "deben" demandar a SVN por cualquier razón, la fusión ya no es realmente un "infierno", ¿verdad?

Torben Gundtofte-Bruun
fuente
3
@ TorbenGundtofte-Bruun: en este momento no tengo tiempo para dar esa respuesta, pero diré "no temas a SVN". Tiene limitaciones, pero también las DVCS.
kdgregory

Respuestas:

15

Funciona bien si se atiene a los casos simples , pero hay algunos complejos que no lo hacen.

Las limitaciones que se me ocurren:

  • Solo puede encontrar el antepasado más reciente si está en una de las ramas involucradas. Así que si se crea branches/thisy branches/thattanto desde trunky luego tratar de fusionar branches/thisa branches/that, no sabrá qué hacer. Lo que significa que solo puede fusionar una rama hacia o desde su padre. Puede encontrarse con esto si inicia dos ramas de características y luego se da cuenta de que las características son interdependientes y necesitan combinarlas.

  • Si bien afirma que puede rastrear los cambios de nombre, la fusión de ramas cuando los archivos se movieron por un lado y se modificaron por el otro no siempre encuentra los archivos correctos para fusionar y arreglarlos manualmente es algo tedioso, ya que no deja la información necesaria en ningún lado mano.

  • Los archivos agregados a veces causan conflictos espurios en fusiones posteriores.

  • Dado que la subversión no tiene un concepto separado de rama, puede fusionar solo un subárbol de un proyecto y eso puede conducir a un gran desorden con bastante rapidez. Se recomienda encarecidamente combinar siempre ramas completas. Desafortunadamente, por alguna razón, a veces las propiedades de información de fusión aparecen en subdirectorios incluso si parecen superfluas y la fusión se realizó correctamente en toda la rama.

  • Por último, pero no menos importante, es lento . Las fusiones en un proyecto de cualquier tamaño serio a menudo toman minutos donde la mayoría de los DVCS pueden hacerlo en menos de un segundo.

Jan Hudec
fuente
+1, gran respuesta. El punto con respecto al antepasado común es algo que tendré que tener en cuenta. ¿Tiene alguna referencia para estos hechos?
Doval
1
@Doval: Experiencia.
Jan Hudec
posiblemente también valga la pena mencionar que svn no tiene un concepto separado de etiquetas tampoco
jk.
Con respecto a su primera viñeta (¡gracias por una explicación muy clara!), ¿No podría resolverse usando una rama de acumulación que tenga el mismo punto de ramificación que las ramas de características? (basado en Vance98 ) ¿El problema solo ocurre realmente cuando las dos ramas de entidades tienen puntos de ramificación diferentes?
Torben Gundtofte-Bruun
@ TorbenGundtofte-Bruun: El antepasado común más reciente no tiene que ser un punto de ramificación. Puede encontrarlo usted mismo y decirle a Subversion que aplique cambios entre revisiones de clavijas específicas. Pero el problema es que es mucho trabajo y debes darte cuenta de que debes hacerlo, porque la subversión no necesariamente arroja sus manos diciendo que no puede fusionarse. En cambio, puede encontrar un antepasado común que no sea el más reciente y genere muchos conflictos.
Jan Hudec
1

Desde mi experiencia, la fusión en SVN fue 'arreglada' en la versión 1.6. Trabajo tanto en Mercurial como en SVN, y desde la versión 1.6 de SVN, la fusión parece ser la misma cantidad de trabajo en ambas plataformas. La única excepción podría ser que debe recordar proporcionar la --reintegrateopción al fusionar desde una rama nuevamente en el tronco usando SVN.

Esta es solo mi experiencia operativa. No sé nada sobre los aspectos internos de SVN.

Charles E. Grant
fuente
2
1.8 finalmente puede detectar el caso de "reintegración", afortunadamente. Pero eso solo se ocupa del ancestro común más reciente en local o remoto. Todavía no puede encontrarlo en la tercera rama.
Jan Hudec