Comparación entre Centralizado y Distribuido de Control de versiones de los Sistemas de [cerrado]

StackOverflow https://stackoverflow.com/questions/111031

Pregunta

¿Cuáles son los ventajas y desventajas con el uso de Centralizados y Distribuidos Sistemas de Control de versiones (DVCS)?Han de ejecutar cualquier tipo de problema en DVCS y ¿cómo proteger contra estos problemas? Mantenga la herramienta de discusión agnóstico y llamas a la mínima.

Para los que preguntan ¿qué DVCS herramientas están disponibles, aquí hay una lista de los mejores free/open source DVCSs:

¿Fue útil?

Solución

De mi respuesta a otro pregunta:

Sistemas de control de versiones distribuido (DVCSs) resolver los diferentes problemas que Centralizado VCSs.La comparación de ellos es como comparar los martillos y los destornilladores.

Centralizado VCS sistemas de diseñado con la intención de que hay Una Verdadera Fuente que es Bendecido, y por lo tanto Bueno.Todos los desarrolladores de trabajo (checkout) de esa fuente y, a continuación, agregar (commit) sus cambios, que luego convertido en Bendecidos de la misma manera.La única la diferencia real entre CVS, Subversion, ClearCase, Perforce, VisualSourceSafe y todos los demás CVCSes es en el flujo de trabajo, el rendimiento y la integración que cada ofertas de producto.

Distribuido VCS sistemas de diseñado con la intención de que uno repositorio es tan buena como cualquier otra, y que combina de un repositorio a otro son simplemente otra forma de comunicación.Cualquier valor semántico como para que el repositorio debe ser de confianza es impuesta desde el exterior por proceso, no por el software en sí.

La verdadera elección entre el uso de un tipo o la otra es la organización -- si su proyecto u organización quiere control centralizado, luego de un DVCS es un non-starter.Si los desarrolladores son espera que el trabajo de todo el país/mundo, sin seguro las conexiones de banda ancha a un central el repositorio y, a continuación, DVCS es probablemente su de la salvación.Si usted necesita, usted está fsck había.

Otros consejos

Para aquellos que piensan de los sistemas de distribución no permiten a los autorizados copias por favor, tenga en cuenta que hay un montón de lugares donde se distribuye los sistemas tienen autoridad copias, el ejemplo perfecto es probablemente Linus' árbol del kernel.Seguro que muchas de las personas tienen sus propios árboles, pero casi todos ellos fluyen hacia Linus' árbol.

Que dijo que yo uso para pensar que distribuye SCM fueron sólo es útil para muchos de los desarrolladores de hacer las cosas diferentes, pero recientemente han decidido que nada un repositorio centralizado puede hacer un distribuida que uno puede hacer mejor.

Por ejemplo, digamos que son un solo desarrollador que trabaja en su propia página personal proyecto.Un repositorio centralizado podría ser una opción obvia, pero considere este escenario.Está lejos de acceso a la red (en un avión, en un parque, etc) y quieres trabajar en tu proyecto.Usted tiene su local copia para que pueda hacer el trabajo bien, pero usted realmente quiere cometer, porque usted ha terminado una característica y desea adelantar a otro, o se encuentra un error a corregir o lo que sea.El punto es que con un sistema centralizado de repo se terminan ya sea maceración todos los cambios juntos y llevar a cabo ellos en un no-lógico del conjunto de cambios o partir manualmente más tarde.

Con un distribuida repo de ir en el negocio como de costumbre, de comprometerse, de avanzar,de cuando usted tiene acceso a la red de nuevo empuje a su "verdadero repo" y nada cambió.

Por no hablar de la otra cosa buena acerca distribuido repos:completo la historia de siempre.Usted tiene que mirar en la revisión de los registros de cuando lejos de la red?Usted necesita para anotar la fuente para ver cómo un error fue introducido?Todos los posibles distribuidas en los repos.

Por favor, por favor, no creo que se distribuyen vs centralizado es acerca de la propiedad o autorización de copias ni nada de eso.La realidad se distribuye es el siguiente paso en la evolución de la SCM de la.

Realmente no es una comparación, pero aquí está lo que los grandes proyectos son el uso de:

Centralizado VCSes

  • Subversion

    Apache, GCC, Ruby, MPlayer, Zope, Plone, Xiph, FreeBSD, WebKit, ...

  • CVS

    CVS

Distribuido VCSes

  • git

    El kernel de Linux, KDE, Perl, Ruby on Rails, Android, Vino, Fedora, X.org, Mediawiki, Django, VLC, Mono, Gnome, Samba, CUPS, GnuPG, Emacs ELPA...

  • mercurial (hg)

    Mozilla y Mozdev, OpenJDK (Java), OpenSolaris, ALSA, NTFS-3G, Dovecot, MoinMoin, mutt, PETSc, Octava, FEniCS, Aptitud, Python, XEmacs, Xen, Vim, Xine...

  • bzr

    Emacs, Apt, Mailman, MySQL, Calamares, ...también se promueve dentro de Ubuntu.

  • darcs

    ghc, ion, xmonad, ...popular dentro de Haskell comunidad.

  • fósiles

    SQLite

W.Craig Comerciante dijo esto acerca de DVCS y CVC:

Si usted necesita, usted está fsck había.

Yo no diría que eres fsck d cuando se utilizan ambos.Prácticamente los desarrolladores que utilizan DVCS herramientas suelen tratar de combinar sus cambios (o enviar pull requests) en contra de una ubicación central (generalmente a una versión de la rama, en un comunicado de repositorio).Hay algo de ironía con los desarrolladores que utilizan DVCS pero al final el palo con un flujo de trabajo centralizado, usted puede comenzar a preguntarse si el enfoque Distribuido en realidad es mejor que la Centralizada.

Hay algunas ventajas con DVCS más de un CVC:

  • La noción de forma única reconocible compromete hace el envío de parches entre compañeros sin dolor.I. e.realizar la revisión como un commit, y compartir con otros desarrolladores que necesitan.Más tarde, cuando todo el mundo quiere fusionar, que en particular cometer es reconocido y pueden ser comparados entre las ramas, tener menos posibilidades de combinación de los conflictos.Los desarrolladores tienden a enviar parches a cada uno de los otros por USB o correo electrónico independientemente de control de versiones de la herramienta que utilice.Por desgracia, en el CVC caso, el control de versión registrará el cometa como un patrimonio separado, al no reconocer que los cambios son los mismos, conduce a una mayor probabilidad de conflicto de fusión.

  • Usted puede tener local ramas experimentales (clonado repositorios también puede considerarse como una rama) que no es necesario mostrar a los demás.Eso significa que, rompiendo los cambios no necesita afectan a los desarrolladores si no lo has empujado nada río arriba.En un CVC, cuando usted todavía tiene un cambio de hora, puede que tenga que trabajar fuera de línea hasta que usted ha fijado, y confirmar los cambios por entonces.Este enfoque de manera efectiva en contra del propósito de utilizar el control de versiones como una red de seguridad, pero es un mal necesario en la CVC.

  • En el mundo de hoy, las empresas suelen trabajar con off-shore de los desarrolladores (o si incluso mejor que quiere trabajar desde su casa).Tener un DVCS ayuda a este tipo de proyectos, ya que elimina la necesidad de una conexión de red confiable ya que cada uno tiene su propio repositorio.

...y algunas desventajas que suelen tener soluciones:

  • Quién tiene la última revisión? En un CVC, el tronco usualmente tiene la última revisión, pero en un DVCS no puede ser claramente evidente.La solución es el uso de reglas de conducta, que los desarrolladores en un proyecto tienen que llegar a un acuerdo en el que repo para combinar su trabajo en contra.

  • Pesimista bloqueos, es decir,un archivo está bloqueado al hacer un check-out, generalmente no son posibles debido a la concurrencia que puede suceder entre repositorios en DVCS.El motivo de bloqueo de archivo existe en el control de versiones es porque los desarrolladores quieren evitar conflictos.Sin embargo, el bloqueo tiene la desventaja de ralentizar el desarrollo de dos de los desarrolladores no pueden trabajar en el mismo trozo de código al mismo tiempo como con una transacción larga modelo y no es prueba plena garantía en contra de los conflictos.El único cuerdo maneras, independientemente de la versión de control es el combate a la gran combinación de los conflictos es tener un buen código de la arquitectura (como de bajo acoplamiento, alta cohesión) y dividir el trabajo en tareas para que tengan un bajo impacto en el código (que es más fácil de decir que de hacer).

  • En proyectos propios sería desastroso si el repositorio entero llegue a disposición del público.Más aún si descontentos o malicioso programador se apodera de un repositorio clonado.Código fuente de la fuga es un severo dolor de propiedad de las empresas.DVCS hace de esta llanura simple ya que sólo necesita para clonar el repositorio, mientras que algunos CM de sistemas (tales como ClearCase) intenta restringir el acceso.Sin embargo, en mi opinión, si usted tiene una cantidad suficiente de disfuncionalidad en la cultura de su empresa, entonces no hay control de versiones en el mundo ayudará a usted contra el código fuente de la fuga.

Durante mi búsqueda de la derecha SCM, he encontrado los siguientes enlaces para ser de gran ayuda:

  1. Mejor SCM Iniciativa :Comparación.Comparación de alrededor de 26 de sistemas de control de versiones.
  2. Comparación de la revisión de control de software.Artículo de Wikipedia acerca de la comparación de 38 sistemas de control de versiones que abarcan temas como las diferencias técnicas, funciones, interfaces de usuario, y más.
  3. Sistemas de control de versiones distribuido.Otra comparación, pero se enfoca principalmente en sistemas distribuidos.

En cierta medida, los dos sistemas son equivalentes:

  • Distribuida VCS puede trivialmente emular a uno centralizado si usted acaba de empuje siempre sus cambios a algunos designado aguas arriba repositorio después de cada local de confirmación.
  • Una centralizado VCS no suele ser capaz de emular un distribuida bastante natural, pero se puede conseguir algo muy similar, si usas algo como colcha en la parte superior de la misma.Edredón, si usted no está familiarizado con ella, es una herramienta para la gestión de grandes conjuntos de parches en la parte superior de algunas aguas arriba del proyecto.La idea aquí es que los DVCS comando de confirmación se implementa mediante la creación de un nuevo parche, y el comando push es implementado mediante el compromiso de todos los pendientes de revisión para el servicio centralizado de VCS y, a continuación, descartando los archivos de revisión.Esto suena un poco raro, pero en la práctica, en realidad funciona bastante bien.

Habiendo dicho eso, hay un par de cosas que DVCSes tradicionalmente se hacen muy bien y que la mayoría de los centralizado VCSes hacer un poco de un hash.El más importante de ellos es, probablemente, la ramificación:un DVCS hará que sea muy fácil para la rama del repositorio o a la combinación de las ramas que no son necesarios, y mantendrá un registro de la historia mientras lo hace.No hay ninguna razón particular por qué un régimen centralizado tendría problemas con esto, pero, históricamente, nadie parece tener bastante conseguido derecho todavía.Si eso es realmente un problema para usted depende de cómo lo vamos a organizar en desarrollo, pero para muchas personas es una consideración importante.

La otra postula que la ventaja de DVCSes es que trabajan sin conexión.En realidad nunca he tenido mucho uso por que;Me hacen sobre todo el desarrollo, ya sea en la oficina (por lo que el repositorio en la red local) o en casa (así no hay ADSL).Si usted hace un montón de desarrollo en su portátil mientras viaja entonces esto podría ser más de una cuenta para usted.

Realmente no hay muchas trampas que son específicos para DVCSes.Hay un poco mayor tendencia de las personas a ir tranquilo, porque puedes cometer, sin empujar y es fácil terminar de pulir las cosas en privado, pero aparte de eso no hemos tenido muchos problemas.Esto puede ser debido a que tienen un número significativo de los desarrolladores de código abierto, que por lo general están familiarizados con el parche de comercio de modelo de desarrollo, pero entrante de código cerrado los desarrolladores también parecen recoger las cosas razonablemente rápido.

Distribuido VCS son atractivas en muchas maneras, pero una de las desventajas que va a ser importante para mi empresa, es la cuestión de la gestión de la no-mergable archivos (normalmente binario, por ejemplo,Documentos de Excel).La subversión se refiere con esto mediante el apoyo a la "svn:needs-lock" de la propiedad, lo que significa que usted debe obtener un bloqueo para los que no mergable archivo antes de modificarlo.Funciona bien.Pero eso de flujo de trabajo requiere de un repositorio centralizado de modelo, lo cual es contrario a los DVCS concepto.

Así que si usted desea utilizar un DVCS, no es realmente adecuado para la gestión de archivos que no son mergable.

He estado usando subversion por muchos años, y yo estaba muy contento con él.

A continuación, el GIT zumbido comenzó y yo sólo tenía que probarlo.Y para mí, el principal punto de venta fue de ramificación.Oh, muchacho.Ahora ya no tengo que limpiar mi repositorio, volver un par de versión o cualquiera de las cosas tontas que me hizo cuando el uso de subversion.Todo es barato en dvcs.Sólo he intentado fósiles y git, aunque he utilizado perforce, cvs y subversion y parece dvcs todos tienen realmente baratos de ramificación y etiquetado.Ya No es necesario copiar todo el código a un lado y, por tanto, la fusión es sólo una brisa.

Cualquier dvcs puede ser configurado con un servidor central, pero lo que se obtiene es, entre otras cosas

Usted puede checkin cualquier pequeño cambio que le gusta, como Linus dice que si necesita utilizar más de una frase para describir lo que usted hizo, usted está haciendo demasiado.Usted puede tener su manera con el código de la sucursal, la fusión, la clonación y la prueba de todo de manera local sin causar que nadie de descarga de gran cantidad de datos.Y sólo es necesario presionar el final de los cambios en el servidor central.

Y usted puede trabajar sin red.

Así que, en resumen, el uso de un control de versiones es siempre una buena cosa.El uso de dvcs es más barato (en KB y el ancho de banda), y creo que es más divertido de usar.

A Git checkout : http://git-scm.com/
A la caja de Fósiles : http://www.fossil-scm.org
A la caja Mercurial : https://www.mercurial-scm.org

Ahora, sólo puedo recomendar dvcs sistemas, y usted puede utilizar un servidor central

El principal problema (aparte del obvio problema de ancho de banda) es la propiedad.

Que es asegurarse de que diferentes (geográfica) del sitio no están trabajando en el mismo elemento que el otro.

Idealmente, la herramienta es capaz de asignar la propiedad a un archivo, una rama o incluso a un repositorio.

Para responder a los comentarios de esta respuesta, usted realmente desea la herramienta para decirte quién es dueño de qué, y entonces comunicarse (a través de teléfono, mensajería instantánea o correo electrónico) con el sitio distante.
Si usted no tiene la propiedad mecanismo de...usted tendrá que "comunicar", pero a menudo es demasiado tarde ;) (es decir:después de haber hecho el desarrollo simultáneo de un conjunto idéntico de los archivos en la misma rama.La confirmación puede ser desordenado)

Para mí, esta es otra discusión acerca de un gusto personal y es bastante difícil ser realmente objetivo.Yo, personalmente, prefiero Mercurial sobre el otro DVCS.Me gusta escribir ganchos en el mismo idioma Mercurial está escrito y el más pequeño de la red - acaba de decir que algunos de mis propias razones.

Todo el mundo en estos días es en el carro acerca de cómo DVCSs son superiores, pero Craig comentario es importante.En un DVCS, cada persona tiene toda la historia de la rama.Si usted está trabajando con un montón de archivos binarios (por ejemplo, archivos de imagen o FLAs) esto requiere de una gran cantidad de espacio y no puede hacer diferencias.

Tengo la sensación de que Mercurial (y otros DVCS) son más sofisticados que el de las centralizadas.Por ejemplo, la fusión de una sucursal en Mercurial mantiene el historial completo de la rama, mientras que en el SVN tienes que ir a la sucursal directorio para ver la historia.

Otro plus para distribuida SCM incluso en solitario desarrollador escenario es si usted, como muchos de nosotros por ahí, tener más de una máquina en la que trabajar.

Digamos que usted tiene un conjunto de secuencias de comandos comunes.Si cada máquina en la que trabajo tiene un clon puede en la demanda de actualización y cambio de los scripts.Se le da:

  1. un ahorro de tiempo, especialmente con claves ssh
  2. un camino a la rama de las diferencias entre los diferentes sistemas (por ejemplo,Red Hat vs Debian, BSD vs Linux, etc)

W.Craig Comerciante de la respuesta resume la mayor parte de ella, sin embargo, me parece que el personal estilo de trabajo que hace una gran diferencia.Donde actualmente trabajo utilizamos la subversión como nuestro Verdadero Origen, sin embargo, muchos desarrolladores usan git-svn en sus máquinas para compensar el problema de flujo de trabajo que tenemos (el fracaso de la gestión, pero esa es otra historia).En cualquier caso.su realmente sobre el equilibrio de los conjuntos de características te hacen más productivos, con lo que la organización necesita (autenticación centralizada, por ejemplo).

Un sistema centralizado no necesariamente impiden el uso de distintas ramas para hacer el desarrollo en.No tiene por qué ser una sola copia fiel de la base de código, en lugar diferente a los desarrolladores o los equipos pueden tener diferentes ramas, legado ramas podría existir etc.

Lo que hace generalmente significa es que el repositorio se gestiona de forma centralizada, pero esto es generalmente una ventaja en una empresa con un competentes, departamento de TI, porque significa que hay sólo un lugar para copia de seguridad y sólo un lugar para administrar el almacenamiento en.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top