Somos Subversion Geeks y queremos saber los beneficios de Mercurial [cerrado]

22

Después de leer que soy un geek de Subversion, ¿por qué debería considerar o no considerar Mercurial o Git o cualquier otro DVCS ?

Tengo una pregunta de seguimiento relacionada. Leí esa pregunta y leí los enlaces y videos recomendados y veo los beneficios, pero no veo el cambio mental general del que hablan las personas.

Nuestro equipo está formado por 8-10 desarrolladores que trabajan en una base de código grande que consta de 60 proyectos. Usamos Subversion y tenemos una troncal principal. Cuando un desarrollador inicia un nuevo caso de Fogbugz, crea una rama svn, hace el trabajo en la rama y cuando terminan se fusionan de nuevo con el tronco. Ocasionalmente, pueden permanecer en la rama por un tiempo prolongado y fusionar el tronco con la rama para recoger los cambios.

Cuando vi a Linus hablar sobre personas que creaban una sucursal y nunca más lo hacían, no éramos nosotros en absoluto. Creamos probablemente 50-100 sucursales a la semana sin problemas. El mayor desafío es la fusión, pero también hemos sido bastante buenos en eso. Tiendo a fusionarme por fogbugz case & checkin en lugar de la raíz completa de la rama.

Nunca trabajamos de forma remota y nunca hacemos ramas de las ramas. Si usted es el único que trabaja en esa sección de la base del código, entonces la fusión al tronco se realiza sin problemas. Si alguien más ha modificado la misma sección de código, la fusión puede ser complicada y es posible que deba realizar alguna cirugía. Los conflictos son conflictos, no veo cómo un sistema pueda hacerlo bien la mayor parte del tiempo a menos que sea lo suficientemente inteligente como para entender el código.

Después de crear una sucursal, el siguiente pago de 60k + archivos lleva algún tiempo, pero eso sería un problema con cualquier sistema de control de fuente que usaríamos.

¿Hay algún beneficio de cualquier DVCS que no estemos viendo y que nos sea de gran ayuda?

Mate
fuente
Parece casi como si ya estuviera usando SVN como DVCS (de todos modos, con respecto a la ramificación). Estoy seguro de que puede hacer casi todo lo que Mercurial puede hacer con SVN (y viceversa); La pregunta es, entonces, ¿cuál es más fácil de usar y más conveniente para su escenario de desarrollo particular? Creo que tendrás que probar Mercurial un poco para ver por ti mismo si vale la pena o no
Cameron
Soy fanático de Mercurial y claramente ofrece un superconjunto de las características de SVN, pero dicho esto, esas características adicionales solo son realmente útiles para una pequeña minoría de proyectos. Probablemente no lo necesite, no cambiará sus vidas, pero obtendrá más funciones y no perderá nada, entonces, ¿por qué no?
jiggy
¿Has comprobado Hg Init ? Es un tutorial de Mercurial escrito por Joel Spolsky. Comienza con un capítulo para usuarios de Subversion, pero por lo demás espera que no sepas nada sobre DVCS.
Barry Brown

Respuestas:

11

Para reformular su pregunta, "Si planeamos usar solo DVCS de manera centralizada, ¿qué beneficios tiene?" Cuando lo preguntas de esa manera, no lo hace. Una rama por tarea es extremadamente común en VCS. Si lo piensa, tener una copia local de trabajo del código fuente en la máquina de un desarrollador que cambia independientemente del tronco durante un día es una rama, a pesar de que nadie lo llama así. La única diferencia entre eso y su flujo de trabajo es que también le está dando a esas ramas un nombre permanente en el servidor central. Ese no es el tipo de ramificación de la que están hablando Linus y otros.

Para entender DVCS se requiere un cambio fundamental en el pensamiento. Tienes que preguntarte qué harías con tantas ramas como quieras que se compartan con quien quieras, y solo con ellas. Eso incluye ramas que solo tú puedes ver.

Las posibilidades son infinitas. Por un solo ejemplo, ¿qué tal dos personas trabajando en lados opuestos de una interfaz? Necesitan compartir código entre sí regularmente, pero aún no es lo suficientemente estable como para compartirlo con todos. Pueden crear una rama para compartir entre ellos y luego fusionarla nuevamente en el repositorio central cuando esté lista.

La capacidad de realizar compromisos locales intermedios lo vale todo por sí solo. Eso es algo que solo tienes que experimentar por ti mismo.

La velocidad obtenida de tener su repositorio local también vale todo por sí mismo. Sí, el clon inicial será inevitablemente lento en cualquier VCS para un repositorio de archivos de 60k, pero una vez que tenga eso, verificar una nueva rama es mucho más rápido con un DVCS.

Karl Bielefeldt
fuente
2
+1! Además, si le da a Mercurial un intento justo y completo, estoy seguro de que no querrá volver.
Pete
1
"Tienes que preguntarte qué harías con tantas ramas como quieras que se compartan con quien quieras y solo con ellas" ... "¿dos personas que trabajan en lados opuestos de una interfaz? Necesitan compartir código con cada una otros regularmente, pero aún no es lo suficientemente estable como para compartir con todos. Pueden crear una rama para compartir entre ellos y luego fusionarla nuevamente en el repositorio central cuando esté lista ". Tenemos todo eso ahora con subversión.
Matt
@ Matt, entonces tienes suerte ya que tu negocio es más la excepción que la regla. La mayoría de las compañías tienen reglas muy estrictas sobre la creación de sucursales en el recurso limitado del servidor central, por lo que las personas ni siquiera piensan en crearlas por razones temporales.
Karl Bielefeldt
3
Creo que a esta respuesta le falta el hecho de que el póster original ya está obligando a SVN a funcionar de una manera mucho más cercana a un flujo de trabajo de DVCS que la mayoría de los usuarios de SVN considerarían viable. En esencia, ya tienen la mentalidad DVCS, por lo que no se requiere un cambio fundamental en el pensamiento .
Mark Booth
Buen punto @ Mark. En un equipo tan pequeño, muchas de las convenciones normales para equipos más grandes desaparecen. Todavía creo que vale la pena por razones de velocidad.
Karl Bielefeldt
1

Para su caso particular, no hay ningún beneficio en cambiar a un DVCS. Estás contento con tu sistema existente, hace todo lo que necesitas, así que ¿por qué cambiar? SVN sigue siendo un proyecto activo de código abierto y tiene integraciones mejores y más maduras con todos los IDE y herramientas de desarrollo más importantes que hg o git. Dado el tamaño de su equipo y la cantidad de proyectos, ¿realmente desea tomarse el tiempo para convertirse en una nueva herramienta cuando la existente funciona bien?

Si tiene desarrolladores que simplemente no pueden funcionar sin un DVCS, apúntelos a las puertas de enlace svn para hg o git. Deje en claro para ellos que sus registros en el repositorio svn deben ajustarse a los procedimientos y procesos que utilice el resto del equipo. Otra ventaja de este enfoque es que los verdaderos fanáticos de DVCS que ya están usando las puertas de enlace sin decirte que ahora pueden salir del armario :-).

dfjacobs
fuente
¿Queremos tomarnos el tiempo para cambiar? No, especialmente no cuando solo cambiamos a svn en los últimos 2 años. Gracias por tus comentarios.
Matt
1

Me parece que ya está usando un flujo de trabajo que es muy similar al tipo de flujo de trabajo que muchas personas adoptan después de comenzar a usar un DVCS.

Desde su punto de vista, un DVCS tendrá las siguientes ventajas significativas sobre SVN:

  • Una vez que haya clonado sus repositorios, se pueden realizar muchas operaciones localmente.
    • Mirar el registro del repositorio no necesita tocar el servidor svn, por lo que puede ser increíblemente rápido.
    • Del mismo modo, el cambio de sucursales no requiere acceso al servidor, ni los clones locales.
  • Debido a que las ramas son solo rutas divergentes a través de la historia, su repositorio no está abarrotado de todas las ramas que alguien haya creado (solo tenemos ramas de lanzamiento en SVN, pero el branchesdirectorio todavía tiene muchos subdirectorios que ya no son relevantes).
    • En git, una vez que se ha fusionado una rama y se ha eliminado la referencia, es posible que nunca sepas que estaba allí.
    • En Mercurial tiene la opción de nombrar una rama (en cuyo caso está codificada en cada conjunto de cambios a perpetuidad) o simplemente crear una rama sin nombre (topológica), que se fusionará silenciosamente en el historial cuando mergevuelva a estar en default( trunk)
  • En SVN, las ramas de las ramas son demasiado oscuras para ser útiles. En gity hgestán a la par para el curso.
  • DVCS entiende que el desarrollo de software es un DAG , es decir, cuando se fusiona, termina con un conjunto de cambios con varios padres. SVN (al menos la versión que he usado) realmente no entiende esto.

En ese último punto, dices

Los conflictos son conflictos, no veo cómo ningún sistema podría hacerlo bien la mayor parte del tiempo a menos que fuera lo suficientemente inteligente como para entender el código.

Al cambiar de usar hgexclusivamente a usar svnsolo y gitsvn, según mi experiencia, las fusiones son mucho más simples y sin problemas con hgy gitsvnde lo que son svn. Las fusiones con svn(al menos la versión que usamos) producen significativamente más conflictos que deben resolverse manualmente.

Una de las razones por las que las fusiones son más difíciles en SVN es que solo le da dos opciones para cada línea que difiere,

  • el texto de la rama en la que te estás fusionando
  • el texto de la rama en la que te estás fusionando

mientras que las fusiones de un DVCS generalmente le darán una tercera opción, que es

  • el texto del ancestro común de ambas ramas que estás fusionando

No subestimes lo beneficioso que es esto, te proporciona un contexto mucho mejor para los cambios que un simple diferencial de dos vías.

En general, te sugiero que lo pruebes. Con herramientas como gitsvny hgsubversion, incluso puedes probarlas con tus repositorios SVN actuales .

Tenga en cuenta que crear el clon en primer lugar es una PItA real, pero una vez que lo haya hecho, obtendrá la mayor parte del poder de un DVCS con su CVCS existente.

Mark Booth
fuente
1
SVN no genera un conflicto en el caso que mencionas tampoco. Solo aparece cuando ambos cambian las mismas líneas. La fusión es generalmente un problema más con los cambios de nombre / movimientos de archivos o agregar / eliminar en svn porque no maneja bien los cambios de directorio de fusión. La combinación de SVN le ofrece más opciones que las 2, por lo general, uso "usar las suyas y luego las mías", ya que generalmente desea mantener ambos conjuntos de cambios, ¡no eliminarlos a ambos!
gbjbaanb
@gbjbaanb - Eso no es lo que he encontrado, por eso califiqué mi experiencia con SVN at least the version I've used. Tengo entendido que la última versión de svn comprende sobre antepasados ​​comunes, pero no tengo experiencia en eso y sospecho que hay muchos servidores que ejecutan versiones anteriores de svn que tienen los mismos problemas.
Mark Booth
Por cierto, me encanta el hecho de que con hg(y casi con certeza git, pero no lo he probado) puede tomar un archivo con tres clases, dividirlo en tres archivos con una clase cada uno, luego fusionar los cambios entre una rama con el archivo 'combinado' y una rama con archivos separados de modo que los cambios en las clases individuales se apliquen a los archivos correctos. Magia pura. * 8 ')
Mark Booth
1
gbjbaanb es correcto; SVN no tendría un conflicto en el escenario que describe. Es bastante fácil demostrarte esto a ti mismo.
Jeremy
@Jeremy @gbjaanb - ¿La sección editada funciona mejor para ti? No voy a discutir con usted acerca de cómo svndeberían funcionar las fusiones, tengo mi propia experiencia con la svnlínea de comandos y SVNKit en Eclipse, donde simplemente obtener actualizaciones puede dar lugar a 'conflictos' que deben resolverse manualmente con cortar y pegar (No puedo decir fácilmente 'Quiero ambos cambios, en este orden).
Mark Booth
0

Hay un cambio importante que he notado después de tal transición: cambio las ramas con mucha más frecuencia y me comprometo con más frecuencia de lo que podría permitirme con Subversion. Por ejemplo, hay una serie de pequeñas ramas de funcionalidad, organizadas en una secuencia, y puedo pasar meses agregando bits a cada una de ellas, volviendo a clasificarlas fácilmente en secuencia en un tronco siempre cambiante. Reorganizar el orden en que se fusionan las ramas de funcionalidad es trivial.

Pero, de hecho, en realidad no me he alejado de Subversion. Solo estoy usando git como mi cliente svn local.

SK-logic
fuente