Pregunta

Me gustaría saber de personas que utilizan el control de versiones distribuido (también conocido como control de versiones distribuido, control de versiones descentralizado) y cómo lo encuentran.¿Qué estás usando, Mercurial, Darcs, Git, Bazaar?¿Sigues usándolo?Si ha utilizado rcs cliente/servidor en el pasado, ¿lo encuentra mejor, peor o simplemente diferente?¿Qué podrías decirme que me haría subirme al carro?O saltar, también me interesaría saber de personas con experiencias negativas.

Actualmente estoy buscando reemplazar nuestro sistema de control de fuente actual (Subversion), que es el impulso para esta pregunta.

Me interesaría especialmente cualquiera que lo haya usado con compañeros de trabajo en otros países, donde es posible que sus máquinas no estén encendidas al mismo tiempo y su conexión sea muy lenta.

Si no está seguro de qué es el control de versiones distribuidas, aquí tiene un par de artículos:

Introducción al control de versiones distribuidas

Entrada de Wikipedia

¿Fue útil?

Solución

He estado usando Mercurial tanto en el trabajo como en mis proyectos personales y estoy muy contento con él.Las ventajas que veo son:

  1. Control de versiones locales. A veces estoy trabajando en algo y quiero mantener un historial de versiones, pero no estoy listo para enviarlo a los repositorios centrales.Con VCS distribuido, puedo comprometerme con mi repositorio local hasta que esté listo, sin ramificarme.De esa manera, si otras personas realizan cambios que necesito, aún puedo obtenerlos e integrarlos en mi código.Cuando estoy listo, lo envío a los servidores.
  2. Menos conflictos de fusión. Todavía suceden, pero parecen ser menos frecuentes y suponen un riesgo menor, porque todo el código está registrado en mi repositorio local, por lo que incluso si fallo en la fusión, siempre puedo hacer una copia de seguridad y hacerlo de nuevo.
  3. Separe los repositorios como ramas. Si tengo un par de vectores de desarrollo ejecutándose al mismo tiempo, puedo hacer varios clones de mi repositorio y desarrollar cada característica de forma independiente.De esa manera, si algo se desecha o se resbala, no tengo que sacar las piezas.Cuando están listos para funcionar, simplemente los fusiono.
  4. Velocidad. Es mucho más rápido trabajar con Mercurial, principalmente porque la mayoría de sus operaciones comunes son locales.

Por supuesto, como cualquier sistema nuevo, hubo algunos problemas durante la transición.Tienes que pensar en el control de versiones de manera diferente a como lo hacías cuando usabas SVN, pero en general creo que vale la pena.

Otros consejos

En el lugar donde trabajo, decidimos pasar de SVN a Bazaar (después de evaluar git y mercurial).Bazaar fue fácil de comenzar, con comandos simples (no como los 140 comandos que tiene git)

Las ventajas que vemos es la posibilidad de crear sucursales locales y trabajar en ellas sin alterar la versión principal.Además, al poder trabajar sin acceso a la red, hacer diferencias es más rápido.

Un comando en bzr que me gusta es la extensión shelve.Si comienza a trabajar en dos fragmentos de código lógicamente diferentes en un solo archivo y desea confirmar solo un fragmento, puede usar la extensión shelve para literalmente archivar los otros cambios más adelante.En Git puedes hacer lo mismo jugando en el índice (área de preparación), pero bzr tiene una mejor interfaz de usuario para ello.

La mayoría de las personas se mostraron reacias a moverse porque tenían que escribir dos comandos para confirmar y presionar (bzr ci + bzr push).También les resultó difícil entender el concepto de ramas y fusión (nadie usa ramas ni las fusiona en svn).

Una vez que comprenda esto, aumentará la productividad del desarrollador.Hasta que todos entiendan eso, habrá comportamientos inconsistentes entre todos.

En mi lugar de trabajo cambiamos a Git desde CVS hace unos dos meses (la mayor parte de mi experiencia es con Subversion).Si bien hubo una curva de aprendizaje involucrada en familiarizarse con el sistema distribuido, descubrí que Git es superior en dos áreas clave:flexibilidad del entorno de trabajo y fusión.

No tengo que estar en nuestra VPN, ni siquiera tener conectividad de red, para tener acceso a capacidades completas de control de versiones.Esto significa que puedo experimentar con ideas o realizar grandes refactorizaciones donde sea que me encuentre cuando me apetezca, sin tener que acordarme de verificar ese gran compromiso que he acumulado o preocuparme por no poder revertir cuando hago un desastre.

Debido a que las fusiones se realizan en el lado del cliente, son mucho más rápidas y menos propensas a errores que iniciar una fusión en el lado del servidor.

Mi empresa utiliza actualmente Subversion, CVS, Mercurial y git.

Cuando comenzamos hace cinco años, elegimos CVS y todavía lo usamos en mi división para nuestra rama principal de desarrollo y mantenimiento de versiones.Sin embargo, muchos de nuestros desarrolladores usan Mercurial individualmente como una forma de tener puntos de control privados sin la molestia de las ramas CVS (y particularmente fusionarlas) y estamos comenzando a usar Mercurial para algunas ramas que tienen hasta aproximadamente 5 personas.Hay muchas posibilidades de que finalmente nos deshagamos de CVS dentro de un año más.Nuestro uso de Mercurial ha crecido orgánicamente;Algunas personas ni siquiera lo tocan porque están contentas con CVS.Todos los que probaron Mercurial terminaron contentos con él, sin mucha curva de aprendizaje.

Lo que funciona muy bien para nosotros con Mercurial es que nuestros servidores de integración continua (hechos en casa) pueden monitorear los repositorios de desarrolladores de Mercurial, así como la línea principal.Entonces, las personas se comprometen con su repositorio, hacen que nuestro servidor de integración continua lo verifique y luego publican el conjunto de cambios.Admitimos muchas plataformas, por lo que no es factible realizar un nivel decente de comprobaciones manuales.Otra ventaja es que las fusiones suelen ser fáciles y, cuando son difíciles, usted tiene la información que necesita para hacer un buen trabajo en la fusión.Una vez que alguien consigue que la versión fusionada funcione, puede impulsar sus conjuntos de cambios de fusión y nadie más tendrá que repetir el esfuerzo.

El mayor obstáculo es que necesita reconfigurar los cerebros de sus desarrolladores y administradores para que se alejen del modelo de rama lineal única.La mejor medicina para esto es una dosis de Linus Torvalds que le diga que está estúpido y feo si utiliza SCM centralizado.Unas buenas herramientas de visualización del historial ayudarían, pero todavía no estoy satisfecho con lo que hay disponible.

Mercurial y CVS funcionan bien para nosotros con desarrolladores que utilizan una combinación de Windows, Linux y Solaris, y no he notado problemas con las zonas horarias.(En realidad, esto no es demasiado difícil;solo usas epoch second internamente, y espero que todos los principales sistemas SCM lo hagan bien).

Fue posible, con bastante esfuerzo, importar nuestro historial CVS principal a Mercurial.Habría sido más fácil si la gente no hubiera introducido deliberadamente casos de esquina en nuestro historial CVS principal como una forma de probar las herramientas de migración del historial.Esto incluyó fusionar algunas ramas de Mercurial en el historial de CVS, para que el proyecto parezca que estuvo funcionando desde el primer día.

Nuestro grupo de diseño de silicio eligió Subversion.Se encuentran principalmente a ocho zonas horarias de mi oficina, e incluso a través de una línea dedicada bastante buena entre nuestras oficinas, los pagos de SUbversion son dolorosos, pero viables.Una gran ventaja de los sistemas centralizados es que potencialmente se pueden registrar archivos binarios grandes (p. ej.lanzamientos de proveedores) sin hacer que todos los repositorios distribuidos sean enormes.

Usamos git para trabajar con el kernel de Linux.Git sería más adecuado para nosotros una vez que la versión nativa de Windows esté madura, pero creo que el diseño de Mercurial es tan simple y elegante que lo mantendremos.

Yo no uso el control de fuente distribuida, pero tal vez estas preguntas y respuestas relacionadas le brinden algunas ideas:

Yo personalmente uso el sistema de control de fuente Mercurial.Lo he estado usando durante poco más de un año ahora.De hecho, fue mi primera experiencia con un VSC.

Probé Git, pero nunca lo usé porque descubrí que era demasiado para lo que necesitaba.Mercurial es realmente fácil de aprender si eres usuario de Subversion, ya que comparte muchos comandos con él.Además, la gestión de mis repositorios me resulta realmente sencilla.

Tengo 2 formas de compartir mi código con la gente:

  • Comparto un servidor con un compañero de trabajo y mantenemos un repositorio principal para nuestro proyecto.
  • Para algunos proyectos de OSS en los que trabajo, creamos parches de nuestro trabajo con Mercurial (hg export) y el mantenedor del proyecto simplemente los aplica en el repositorio (hg import).

Realmente fácil de trabajar, pero muy poderoso.Pero generalmente, elegir un VSC realmente depende de las necesidades de nuestro proyecto...

Antes de que apagáramos las estaciones de trabajo Sun para el desarrollo de sistemas integrados, usábamos la tecnología de Sun. equipoware solución.TeamWare es una solución de distribución completa que utiliza SCCS como sistema de revisión de archivos del repositorio local y luego lo envuelve con un conjunto de herramientas para manejar las operaciones de fusión (realizadas mediante el cambio de nombre de sucursales) a los repositorios centralizados, de los cuales puede haber muchos.De hecho, debido a que se distribuye, realmente no existe un repositorio maestro per se (excepto por convención si así lo desea) y todos los usuarios tienen sus propias copias del árbol fuente completo y sus revisiones.Durante las operaciones de "reposición", la herramienta de combinación que utiliza diferencias de 3 vías ordena algorítmicamente qué es qué y le permite combinar los cambios de diferentes desarrolladores que se han acumulado a lo largo del tiempo.

Después de cambiar a Windows para nuestra plataforma de desarrollo, terminamos cambiando a AccuRev.Si bien AccuRev, al depender de un servidor centralizado, no es verdaderamente una solución distribuida, lógicamente desde un modelo de flujo de trabajo se acerca mucho.Mientras que TeamWare habría tenido copias completamente separadas de todo en cada cliente, incluidas todas las revisiones de todos los archivos, bajo AccuRev esto se mantiene en la base de datos central y las máquinas cliente locales solo tienen la versión actual del archivo plano para editar localmente.Sin embargo, estas copias locales se pueden versionar a través de la conexión del cliente al servidor y realizar un seguimiento completamente independiente de cualquier otro cambio (es decir:ramas) creadas implícitamente por otros desarrolladores

Personalmente, creo que el modelo distribuido implementado por TeamWare o el tipo de modelo híbrido implementado por AccuRev es superior a las soluciones completamente centralizadas.La razón principal de esto es que no existe la noción de tener que retirar un archivo o que otro usuario lo bloquee.Además, los usuarios no tienen que crear ni definir las ramas;las herramientas hacen esto implícitamente.Cuando hay equipos más grandes o diferentes equipos que contribuyen o mantienen un conjunto de archivos fuente, esto resuelve las colisiones relacionadas con el bloqueo "generadas por herramientas" y permite que los cambios de código se coordinen más a nivel de desarrollador, quienes en última instancia tienen que coordinar los cambios de todos modos.En cierto sentido, el modelo distribuido permite un "bloqueo" de grano mucho más fino en lugar del bloqueo de grano grueso instituido por los modelos centralizados.

He usado darcs en un proyecto grande (GHC) y para muchos proyectos pequeños.Tengo una relación de amor/odio con darcs.

Ventajas:Repositorio increíblemente fácil de configurar.Es muy fácil mover cambios entre repositorios.Es muy fácil clonar y probar 'ramas' en repositorios separados.Es muy fácil hacer 'compromisos' en pequeños grupos coherentes, eso tiene sentido.Es muy fácil cambiar el nombre de archivos e identificadores.

Desventajas:no hay noción de historia: no se puede recuperar 'el estado de cosas el 5 de agosto'.Realmente nunca descubrí cómo usar darcs para volver a una versión anterior.

Factor decisivo:darcs no escala.Yo (y muchos otros) nos hemos metido en grandes problemas con GHC usando darcs.Lo he colocado con el uso del 100% de la CPU durante 9 días tratando de realizar 3 meses de cambios.Tuve una mala experiencia el verano pasado, donde perdí dos semanas tratando de hacer que DARC funcionara y finalmente recurrí a reproducir todos mis cambios a mano en un repositorio prístino.

Conclusión:darcs es fantástico si quieres una forma sencilla y ligera de evitar dispararte en el pie durante tus proyectos de hobby.Pero incluso con algunos de los problemas de rendimiento abordados en darcs 2, todavía no es para material industrial.Realmente no creeré en los darcs hasta que la tan cacareada 'teoría de los parches' sea algo más que unas pocas ecuaciones y algunas imágenes bonitas;Quiero ver una teoría real publicada en un lugar arbitrado.Ya es hora.

Realmente amo Git, especialmente con GitHub.Es muy agradable poder confirmar y revertir localmente.Y seleccionar fusiones, aunque no es trivial, no es terriblemente difícil y es mucho más avanzado que cualquier cosa que Svn o CVS puedan hacer.

Mi grupo en el trabajo está usando Git y ha sido toda la diferencia del mundo.Estábamos usando SCCS y una gran cantidad de scripts csh para gestionar proyectos bastante grandes y complicados que compartían código entre ellos (al menos lo intentamos).

Con Git, la compatibilidad con submódulos facilita muchas de estas cosas y solo es necesario un mínimo de secuencias de comandos.Nuestro esfuerzo de ingeniería de lanzamiento ha disminuido muchísimo porque las ramas son fáciles de mantener y rastrear.Ser capaz de ramificarse y fusionarse de manera económica realmente hace que sea razonablemente fácil mantener una única colección de fuentes en varios proyectos (contratos), mientras que antes, cualquier interrupción del flujo típico de las cosas era muy, muy costosa.También hemos descubierto que la capacidad de secuencias de comandos de Git es una enorme además, porque podemos personalizar su comportamiento a través de ganchos o mediante scripts que no . git-sh-setup, y ya no parece un montón de pifias como antes.

A veces también tenemos situaciones en las que tenemos que mantener nuestro control de versiones en sitios distribuidos que no están conectados a la red (en este caso, laboratorios seguros desconectados), y Git tiene mecanismos para manejar eso sin problemas (paquetes, el mecanismo de clonación básico, formato parches, etc.).

Algo de esto se debe simplemente a que salimos de principios de los 80 y adoptamos algunos mecanismos de control de versiones modernos, pero Git "lo hizo bien" en la mayoría de las áreas.

No estoy seguro del alcance de la respuesta que busca, pero nuestra experiencia con Git ha sido muy, muy positiva.

El uso de Subversion con SourceForge y otros servidores a través de varias conexiones diferentes con equipos de tamaño mediano está funcionando muy bien.

Soy un gran defensor del control de fuente centralizado por muchas razones, pero probé BitKeeper en un proyecto brevemente.Quizás después de años de usar un modelo centralizado en un formato u otro (Perforce, Subversion, CVS), encontré que el control de fuente distribuida era difícil de usar.

Soy de la opinión de que nuestras herramientas nunca deberían interponerse en el trabajo real;Deberían facilitar el trabajo.Entonces, después de algunas experiencias que me golpearon la cabeza, me retiré.Aconsejaría hacer algunas pruebas realmente difíciles con su equipo antes de comenzar a mover el barco porque el modelo es muy diferente a lo que la mayoría de los desarrolladores probablemente estén acostumbrados en el mundo SCM.

he usado bazar desde hace un tiempo y me encanta.Las ramificaciones triviales y las fusiones brindan una gran confianza al usar las ramas como se deben usar.(Sé que las herramientas centrales de vcs deberían permitir esto, pero las comunes, incluida Subversion, no lo permiten fácilmente).

bzr soporta bastantes diferentes flujos de trabajo desde solo, pasando por trabajar como un repositorio centralizado hasta completamente distribuido.Dado que cada rama (para un desarrollador o una función) se puede fusionar de forma independiente, las revisiones de código se pueden realizar por rama.

bzr también tiene un gran complemento (bzr-svn) permitiéndole trabajar con un repositorio de subversión.Puede hacer una copia del repositorio svn (lo que inicialmente lleva un tiempo ya que recupera el historial completo de su repositorio local).Luego puedes crear ramas para diferentes funciones.Si desea realizar una reparación rápida en el tronco mientras está a la mitad de su función, puede hacer una rama adicional, trabajar en ella y luego fusionarse nuevamente con el tronco, dejando la característica a medio hacer intacta y fuera del tronco.Maravilloso.Trabajar contra la subversión ha sido mi uso principal hasta ahora.

Tenga en cuenta que solo lo he usado en Linux, y principalmente desde la línea de comandos, aunque está diseñado para funcionar bien en otras plataformas, tiene GUI como TortugaBZR y se está trabajando mucho en la integración con IDE y similares.

Estoy jugando con Mercurial para los proyectos de mi hogar.Hasta ahora, lo que me gusta es que puedo tener múltiples repositorios.Si llevo mi computadora portátil a la cabina, todavía tengo control de versiones, a diferencia de cuando ejecutaba CVS en casa.Ramificar es tan fácil como hg clone y trabajando en el clon.

Usando subversión

Subversion no se distribuye, lo que me hace pensar que necesito un enlace de Wikipedia en caso de que la gente no esté segura de lo que estoy hablando :)

He estado usando darcs 2.1.0 y es excelente para mis proyectos.Fácil de usar.Me encantan los cambios de selección.

Utilizo Git en el trabajo, junto con uno de mis compañeros de trabajo.Sin embargo, el repositorio principal es SVN.A menudo tenemos que cambiar de estación de trabajo y Git hace que sea muy fácil extraer cambios de un repositorio local en otra máquina.Cuando trabajamos en equipo en la misma función, fusionar nuestro trabajo no supone ningún esfuerzo.

El puente git-svn es un poco inestable, porque al registrarse en SVN reescribe todas las confirmaciones para agregar su comentario git-svn-id.Esto destruye la bonita historia de fusiones entre el repositorio de mi compañero de trabajo y el mío.Predigo que no usaríamos ningún repositorio central si todos los miembros del equipo usaran Git.

No dijiste en qué sistema operativo desarrollas, pero Git tiene la desventaja de que debes usar la línea de comando para obtener todas las funciones.Gitk es una buena interfaz gráfica de usuario para visualizar el historial de fusiones, pero la fusión en sí debe realizarse manualmente.Git-Gui y los complementos de Visual Studio aún no están tan pulidos.

Usamos control de versiones distribuidas (SCM de plástico) para escenarios multisitio y desconectados.

1- Multisitio:Si tienes grupos distantes, a veces no puedes confiar en la conexión a Internet o no es lo suficientemente rápida y ralentiza a los desarrolladores.Entonces, tener un servidor independiente que pueda sincronizarse (Plastic replica las ramas de un lado a otro) es muy útil y acelera las cosas.Probablemente sea uno de los escenarios más comunes para las empresas, ya que a la mayoría de ellas todavía les preocupan las prácticas "totalmente distribuidas" donde cada desarrollador tiene su propio repositorio replicado.

2- Desconectados (o verdaderamente distribuidos si lo prefieres):Cada desarrollador tiene su propio repositorio que se replica con sus pares o con la ubicación central.Es muy conveniente ir a la ubicación de un cliente o simplemente ir a casa con su computadora portátil y continuar pudiendo cambiar de sucursal, código de pago y registro, mirar el historial, ejecutar anotaciones, etc., sin tener que acceder a la "central" remota. servidor.Luego, cada vez que regrese a la oficina, simplemente replicará sus cambios (normalmente ramas) con unos pocos clics.

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