¿Por qué el control de fuente distribuida se considera más difícil?

Parece bastante común (por lo less aquí) que la gente recomiende SVN a los recién llegados al control de fuente porque es "más fácil" que una de las opciones distribuidas. Como usuario muy casual de SVN antes de cambiar a Git para muchos de mis proyectos, descubrí que este no era el caso en absoluto.

Es conceptualmente más fácil configurar un repository DCVS con git init (o lo que sea), sin el problema de tener que configurar un repository externo en el caso de SVN.

Y la funcionalidad base entre SVN, Git, Mercurial, Bazaar todos usan commands esencialmente idénticos para confirmar, ver diffs, y así sucesivamente. Que es todo lo que un recién llegado realmente va a estar haciendo.

La pequeña diferencia en la forma en que Git requiere que los cambios se agreguen explícitamente antes de comprometerse, en oposition a la política de "comprometer todo" de SVN, es conceptualmente simple y, a less que esté equivocado, ni siquiera es un problema al usar Mercurial o Bazar.

Entonces, ¿por qué SVN se considera más fácil? Yo diría que esto simplemente no es verdad.

Un sistema de control de versiones distribuido es A Very Good Thing ™, pero creo que la principal barrera para la adopción es educar a los usuarios sobre las nuevas posibilidades que ofrece un nuevo SCM.

Esto, junto con una cantidad de herramientas de interfaz de usuario a menudo sin brillo (implementaciones de tortuga a medio terminar, etc.), trae una mirada en blanco a la vista de muchos compañeros de trabajo que desde hace mucho time prefirieron la command-line por una buena herramienta de interfaz de usuario.

Además, con herramientas como CVS encuentro que las personas aborrecen la bifurcación y la fusión porque realmente no quieren estar atrapados un día integer haciendo fusiones en tres direcciones, a menudo sin estar seguros de cuál sería la fusión correcta para hacer.

Mi punto es: comience diciéndole a la gente lo que gana (no solo "oye este nuevo juguete genial"), y prepárelos al hecho de que usar una línea de command ES el path a seguir y esa frecuente bifurcación de time constante es algo bueno .

Muchos sistemas como mercurial vienen con un sistema completo de queue de parches, lo que significa que desde el punto de vista de la Integración Continua, usted sabe que todo lo que entra en producción ha sido aprobado por QA. Cosas como esta son difíciles de hacer correctamente con CVS o SVN.

Con Mercurial las personas tendrían repositorys privados para su trabajo actual y todos los desarrolladores compartirían un tree desarrollador en un server. El sistema CI supervisa el tree de desarrolladores y extrae todos los cambios, construcciones y realiza testings de unidad. Si todo pasa, propaga los cambios a un tree de testings desde donde se crea un entregable para las personas de control de calidad. Cada set de cambios que se agrega recibe un token. Cuando QA considera que una característica está completa, anotan el tree de testing con este token y los sets de cambios asociados se propagan automáticamente al tree de producción.

Al utilizar este enfoque, nunca comprometerá nada manualmente con la twig de producción o la twig de testing. Más bien, el estado del código y el cierre de session de QA determina el contenido de su twig de producción,

Si usa el control de versión solo para usted, SVN probablemente sea más difícil, ya que la configuration es más difícil. Sin embargo, si desea trabajar con múltiples desarrolladores en la web, un control del lado del server tiene ventajas:

  • Usted tiene un lugar central, que siempre tiene la fuente oficial del estado de la técnica, siendo el server SVN
  • Como todo el mundo siempre fusiona sus cambios con un server central, hay mucho less colisiones y mucha less fijación manual de colisiones.
  • Usted tiene control central sobre la fuente
  • Tienes un número de revisión oficial en lugar de un hash de revisión, es el mismo entre todos los desarrolladores y muestra el progreso oficial (es un número de conteo progresivo, a diferencia de un hash, que es solo una huella digital de identidad, para que puedas ver qué código es más nuevo o más viejo, solo por este número

Creo que es conceptualmente más simple pensar en un repository centralizado donde cada desarrollador confía su trabajo frente a copys múltiples de todo el repository, ninguna de las cuales representa la 'verdad'. Como la mayoría de los desarrolladores están familiarizados con la noción de un model de cliente-server y una database back-end, este es un concepto natural.

Por supuesto, la misma fuerza de los sistemas distribuidos de control de fonts es que no tienen que adherirse a este model, pero para un recién llegado, parece más fácil de entender.

Svn obliga a una sola línea de trabajo. Puedes comprometerte o no puedes. Al tener experiencias similares, no creo que Hg o Git sean difíciles de usar, sin embargo, trabajo en un equipo que parece tener pesadillas para usarlos.

El concepto completo de autorrlocation, jefes múltiples, cuándo y cuándo no fusionarse los elude por completo, sin mencionar que tienen problemas para liberarse de la mentalidad "commit / checkout with $ somecore" que lleva a una completa confusión cuando ven impulsos entre 2 copys desprotegidas.

(Tuve un problema por un time en el que alguien fusionó repetidamente 2 sucursales que no debían fusionarse porque no podían captar el concepto).

Sin embargo, las mismas personas que tienen problemas con el SCMS distribuido me hicieron formular esta pregunta.

editar / nota La mayor diferencia de Mercurials que he notado vs git que hace que mercurial sea más difícil de usar para los novatos es el comportamiento pnetworkingeterminado de mercurials para push / pull es como hacer git push –all / git pull –all, que puede propagar twigs privadas y agregar mucha confusión (especialmente cuando aparece una nueva twig, mercurial se congela con miedo y te pregunta cómo manejarla en lugar de simplemente seguir en camiones), así como la herramienta pnetworkingeterminada de fusión / resolución de conflictos en mac acaba de aplastar a un set de cambios a ciegas.

Creo que el set de herramientas para SVN es mucho más amplio, por lo que podría sentarse y enseñar a la gente (TortoiseSVN, RapidSVN, etc.) incluso si no tenían mucha idea conceptual de cómo funcionaba el repository. También es relativamente fácil get SVN alojado para usted (con trac, por ejemplo) sin necesidad de saber nada. Los distribuidos no han tenido este respaldo todavía y estoy seguro de que las opiniones cambiarán cuando lo hagan.

Yo argumentaría que configurar un repository con un DVCS es prácticamente más fácil, pero conceptualmente más difícil. Después de todo, con un VCS centralizado los usuarios no configuran su propio repository, simplemente crean una count en Assembla o tienen el repo configurado para ellos.

DVCS actualmente no tiene buenos clientes de escritorio. A pesar de lo que la mayoría de la gente dice, los sistemas de control de versiones pueden ser bastante difíciles de usar correctamente, por lo que un buen cliente de escritorio puede ser de gran ayuda, y aquí TortoiseSVN es excelente.

Nos esforzamos por hacerlo lo más fácil posible en Codice, pero siempre es un poco más difícil de explicar, por supuesto, depende de la audiencia.

Para los proyectos OSS y los equipos pequeños, especialmente las personas que trabajan en sus computadoras portátiles y se mudan aquí y allá, trabajan en casa, en avión a veces, y así sucesivamente, es bastante fácil. Pero, cada vez que hablas con corporaciones / empresas, se entusiasman con su rol de sitios múltiples, pero no con la distribución a primera vista. Todo depende de si el grupo tiene una mayoría de desarrolladores avanzados o no.

Es marketing deficiente , así de simple. Demasiadas presentaciones de DVCS se centran en la línea de command y dicen "wow, ¿no es fantástico, puedes fusionar simplemente tecleando hg merge" ignorando por completo el hecho de que muchas personas (especialmente en Windows) están aterrorizadas por la línea de command. Sí, Joel Spolsky, estoy viendo tu propio hginit.com aquí. ¡Necesitamos una versión de TortoiseHg por favor!

Tal vez fue el caso hace dos años que tuvieron implementaciones de GUI pobres, pero han avanzado a pasos agigantados recientemente. TortoiseHg ahora se encuentra en la versión 1.0, y si bien puede no ser algo para destacar visualmente, es bastante sólido, estable y fácil de usar. TortoiseGit también es sólido como una roca y hace un gran trabajo de abstracción de todas las complejidades de la command-line de git.