2009-07-22 42 views
10

¿Cuáles son las ventajas y desventajas de los sistemas de control de revisión distribuidos?Pros y contras de sistemas de control de revisión distribuidos?

Si usted tiene alguna experiencia con los sistemas distribuidos como Git, Mercurial, Plastic SCM, etc. favor comparta su experiencia. Cuéntanos qué funcionó bien y dónde surgieron los problemas.

Estoy particularmente interesado en conocer el uso de sistemas distribuidos en proyectos tradicionales, comerciales, de fuente no abierta, pero también son bienvenidas las respuestas sobre otros usos.

+1

http://stackoverflow.com/search?q=distributed+version+control – arathorn

Respuesta

6

La pregunta que sebasgo apunta realmente tiene muchas buenas respuestas, pero déjeme decirle mi experiencia personal de todos modos. Trabajo con un puñado de otras personas diseminadas por todos los Estados Unidos haciendo lo que es esencialmente un trabajo de consultoría privado. Los clientes varían en tamaño, pero nuestro equipo es pequeño y trabajamos bastante rápido. El código es comercial pero es propiedad de los clientes cuando hayamos terminado.

Utilizamos Mercurial, pero la herramienta específica es menos importante que el flujo de trabajo general de usar control de versión distribuida en lugar de centralizada. En mi experiencia allí unas dos grandes ventajas de productividad que ya no desea trabajar sin:

  1. primero y más importante: ramas y uniones son fáciles. Este es un efecto secundario de ser distribuido, no estrictamente un requisito, pero es crítico para un DVCS y lo encuentro crítico para mi trabajo. Cada uno de nosotros puede ramificar libremente todas y cada una de las características en las que necesitamos trabajar, hacer que funcione en un entorno aislado (sin interferencias de nuestro repositorio compartido) y cuando estemos listos para volver a fusionarlo. "Mantenerse al día" con los cambios de otros es tan fácil como ocasionalmente fusionarse, con la opción de deshacerse de la fusión y continuar si se trata de resolver conflictos es demasiado esfuerzo en este momento. Podemos tomar cambios específicos y juntarlos en una rama de prueba, y mantener los resultados si nos gustan o lanzarlos si no lo hacemos. Esta capacidad de probar cosas, compartirlas y mantener solo los mejores resultados es un beneficio serio. Como digo, no es uno con el que pueda trabajar cómodamente sin este punto.
  2. Trabajar sin conexión. No parece un gran problema, hasta que no trabajes en tu entorno habitual. Puedo irme de vacaciones, o viajar, o tener un corte de energía, o simplemente quiero sacar mi computadora portátil afuera en un buen día y seguir trabajando. El beneficio psicológico de poder levantarme e irme sin necesidad de dejar de trabajar, o perder mi capacidad de controlar mi trabajo es muy real.

Más allá de estos efectos, que se aplican a todos mis proyectos, relacionados con el trabajo y no, uno de los beneficios específicos a nuestra disposición particular, que se refiere a su pregunta sobre el uso comercial y que fue inesperado ocurrió: el cliente puede en realidad trabajar en el código.Pueden tomar una instantánea, realizar cambios locales y enviarnos correcciones o mantener el código modificado para un propósito particular. Esto es de gran ayuda para mantenerlos involucrados, para que no se desincronicen demasiado con lo que quieren, y para permitirles ajustar las cosas sin romper nada (no nos fusionamos en sus cambios a menos que estén listos; mismas reglas). nos aplicamos por nosotros mismos.)

No tenemos muchas quejas. Toma un tiempo acostumbrarse, aunque el conjunto de comandos de Mercurial está lo suficientemente cerca de Subversion (que solíamos usar) que no hemos tenido muchos problemas. Incluso las extravagancias ocasionales, como el control accidental de archivos binarios o archivos que no deberían registrarse, podemos movernos porque podemos volver a crear un repositorio sin esos cambios, y reemplazar nuestro principal si es necesario. Esto no se adapta bien a un gran grupo de personas, pero funciona bastante bien para un pequeño equipo de 3-4 personas.

Lo único negativo que puedo pensar que es realmente un problema, es un efecto secundario de poder ramificar fácilmente: puede tener suficiente trabajo pendiente que pierda la pista de él. Esto es un poco parecido a tener muchos borradores de un documento escrito: pasar suficientes copias y no recordar qué copia tuvo los cambios que desea. Eso no es directamente un defecto de la herramienta, y en todo caso hace que sea más fácil volver a juntar el trabajo dispar que las herramientas menos capaces de fusionarse. Pero es un peligro. La única manera que conozco de administrarlo es ser disciplinado sobre la escritura de registros de confirmación útiles, descripciones de ramas útiles y no tratar de mantener demasiadas tareas abiertas a la vez. En otras palabras, incluso un flujo de trabajo muy bueno sigue siendo un flujo de trabajo y necesita atención o se sale de control.

que tienen problemas particulares con Mercurial (Realmente quiero rama de apoyo llamado a ser un poco poco más fácil) y con Git (Realmente quiero el conjunto de comandos para ser más intuitiva, incluso ahora), pero son quejas sobre problemas de esquina que vienen con gran familiaridad. Ni siquiera serían posibles si estas herramientas no hubieran empujado el sobre de lo que pensé que un VCS podría hacer mucho más allá de lo que sabía antes de empezar a usarlos.

+0

Otro negativo de los sistemas de control de revisión distribuidos (al menos lo que encontré en git) es el espacio utilizado para mantener el repo. Por ejemplo, 460 MB de la fuente Ubuntu Quantal con 5 ramas tendrá 1,2 GB en la unidad de disco duro. Incluso si no es un gran problema para los tamaños de HDD actuales en las máquinas locales, todavía tiene que tirar de más de 700 MB a través de la red cuando lo hace por primera vez. Solo mis 3 centavos para apoyar la respuesta @quark :) –

2

No he probado otros sistemas distribuidos, así que no puedo comentar sobre ellos. Pero una cosa que me molesta acerca de Git es que no hay manera de clonar solo una parte del repositorio. Última revisión, también carece de elementos similares a svn: externos. Creo que los svn externos se usan a menudo dentro de las empresas para consultar bibliotecas de otros repositorios, etc.

+1

Puede definir submódulos en git que le permiten solo clonar el submódulo, sin embargo, para esto su repositorio ya debe tener la estructura, no puede hazlo cuando clones. – txwikinger

+0

Es un concepto de control de revisión distribuido, que usted como usuario debe tener un repositorio completo en su máquina local. Tenga en cuenta que solo una vez cuando clona proyecto en la máquina local, extrae todo. La próxima extracción le dará solo cambios. –

3

Lea esto question en stackoverflow para obtener mucha información acerca de los sistemas GIT vs SVN y central vs distribuidos en general.

2

Sí, revise la pregunta de stackoverflow para esto. Si desea obtener más información sobre cómo Git se compara con otros sistemas de control de revisiones, hay un buen sitio informativo para eso: Why Is Git Better Than X?

Cuestiones relacionadas