Caso de negocio para sistemas descentralizados de control de versiones

26

Busqué y no pude encontrar ninguna razón comercial por la cual los sistemas git / mercurial / bazzr son mejores que los sistemas centralizados (subversión, rendimiento).

Si intentara vender un DVCS a una persona no técnica, ¿qué argumentos proporcionaría para que el DVCS aumente las ganancias ?

En breve estaré lanzando git a mi gerente, llevará algún tiempo convertir repositorios de subversión y algunos gastos en la compra de licencias de smartgit.

Editar Traté de hacer esta pregunta en una discusión genérica sobre centralizado vs descentralizado, pero inevitablemente se ha convertido en git vs subversion. Seguramente hay mejores sistemas centralizados que la subversión.

Keyo
fuente
1
Estamos en una posición similar buscando el caso y hay que decirlo, no estoy convencido de que haya uno en este momento.
Jon Hopkins el
¿Podría git-svnsatisfacer sus necesidades?
JBRWilkinson
@JBRWilkinson Acabo de usar git-svn para migrar un montón de repositorios a git. La compañía no ha invertido mucho en herramientas que se integran con svn, por lo que no fue un gran problema.
Keyo
Refiera la edición: aún no ha explicado cómo y por qué SVN le está fallando de tal manera que siente que necesita un reemplazo. Mi respuesta (por ejemplo) NO se trata de git vs svn, se trata de encontrar un caso de negocios para cambiar el status quo.
Murph el

Respuestas:

23

Hmm, después de haber sido gerente, tengo dos reacciones inmediatas a esto:

  • Si aún no tienes buenas razones, ¿por qué estás lanzando git aparte de estar a la moda?
  • Del mismo modo, ¿cómo está fallando Subversion de tal manera que necesita un reemplazo?

En realidad, no estoy siendo negativo: creo que es probable que exista un caso (dependiendo de las circunstancias), pero si el caso es simplemente que git es "mejor" que la subversión, entonces realmente no tienes uno.

También debe ser capaz de enumerar las desventajas (ya ha identificado la sobrecarga de la migración y las nuevas herramientas), ¿qué más es un problema? Por ejemplo, ¿qué le sucede a su repositorio agradable, central y respaldado? ¿Cómo se integra con su servidor de compilación de integración continua (si no tiene uno, olvide git y ordene eso primero). Oh seguridad y seguimiento: SVN se ejecuta con los inicios de sesión y permisos adecuados.

En mi opinión, los beneficios están en la flexibilidad, la mejor fusión, la capacidad de realizar compromisos locales sin romper la compilación, etc. Las desventajas son la falta de control y la misma flexibilidad.

Es posible que todo lo que quiera hacer sea ejecutar git localmente en su máquina como un "mejor" cliente de subversión (estoy buscando hacerlo usando mercurial).

Hmm, ¿tal vez toda esta respuesta es realmente un comentario? Debe presentar su caso aquí (en la pregunta) para git over subversion (en su entorno) para ver si podemos ayudarlo a identificar el caso comercial.


FWIW, sé que uno puede designar fácilmente una instancia específica del repositorio para que sea la fuente troncal / de referencia y, además, esa es la forma en que uno se conecta al servidor de compilación, la diferencia es que con DVCS es más una decisión administrativa que algo inherente a la arquitectura.

Murph
fuente
1
Abordar los problemas de permisos / flexibilidad: todavía necesita un repositorio "fuente" también, donde realmente puede establecer los derechos como de costumbre. La integración continua se ejecuta para el repositorio de origen, los desarrolladores clonan el repositorio de origen, etc. Sin embargo, su copia de seguridad es menos importante, ya que todos tienen un clon, no solo un pago.
Matthieu M.
1
El punto sobre clones completos como copias de seguridad está bien hecho. Admitiré libremente que hay algunas áreas de esto que no entiendo lo suficientemente bien, ya que mis cosas de "trabajo" son svn y mi mercurial es personal y, hasta ahora, algo limitado.
Murph
14

Diría que la ramificación y fusión rápidas e indoloras permitiría a los desarrolladores ser más productivos con su código, ya que cada nueva característica podría ramificarse y luego fusionarse. Hacer que el proceso de desarrollo transcurra mucho más fácilmente. Además, la naturaleza distribuida permitiría a cada desarrollador tener una copia completa del código, por lo que no hay que preocuparse de que una falla del servidor centralizado elimine todo su código. Probablemente haya más razones, esas dos, sin embargo, son mis principales razones para usar Git.

mbreedlove
fuente
2
En un entorno empresarial, el 'servidor centralizado' tendría redundancia, respaldo y administradores responsables de mantenerlo vivo (y todos los demás servidores).
JBRWilkinson
2
En un entorno empresarial grande, tendría redundancia de servidor. En una pequeña empresa, la redundancia del servidor no es tan segura.
Michael Shaw
2
Una falla del servidor centralizado no eliminaría todo su código. Incluso si no tuviera copias de seguridad, lo peor que podría hacer es eliminar su historial de revisiones. Pero siempre y cuando todos los desarrolladores hayan revisado el código, también existe en forma actual en sus sistemas.
Mason Wheeler
1
@mason: pero eso es una suposición: "siempre y cuando todos los desarrolladores ...". Porque en compañías de pequeña escala con proyectos de escala aún más pequeña, los proyectos pueden vivir y se usan felizmente sin que nadie lo codifique por un año o dos.
Inca
Y también, no subestimaría el valor del historial de compromisos. En un sistema enorme, puede ser realmente valioso ver quién y por qué le hizo algo al código.
Tamás Szelei
8

Supongo que puede defender el control de versiones para aumentar la productividad (y, por lo tanto, las ganancias) incluso cuando un desarrollador está trabajando solo.

Un buen DVCS reconoce esos mismos beneficios de productividad incluso cuando trabaja como parte de un equipo: cada desarrollador puede obtener todos los beneficios de trabajar con el control de versiones; pueden realizar compromisos frecuentes, retrocesos, jugar con cosas, etc., sin preocuparse por los conflictos con lo que otros desarrolladores están haciendo hasta que estén listos para impulsar sus cambios.

Luego.
fuente
Esto es lo que iba a publicar, más o menos. Sin duda, debería ver mejoras en la productividad de los desarrolladores que se comprometen temprano y, a menudo, a su propio repositorio, sin causar problemas a ninguno de sus compañeros de trabajo.
Carson63000
55
Entonces estarás en un infierno de integración cuando eventualmente empujes tus cambios. Esto es malo, no bueno.
Henry
A medida que realiza el desarrollo local con muchos compromisos, puede continuar sacando cambios del repositorio central y mantener sus cambios locales en línea con el desarrollo continuo en el que otros están trabajando. Por lo tanto, cuando llegue el momento de llevar sus cambios al repositorio central, ya debería tener la mayoría de los cambios que han estado ocurriendo allí y la integración será fácil.
DaveJohnston
1
A menos que uno de sus compañeros de trabajo haya hecho exactamente lo mismo y ambos no se hayan integrado por bastante tiempo. Siempre hay un intercambio. He visto casos en los que las cosas se habían integrado en la línea principal donde no deberían haber estado (solución incorrecta, intento sin salida en una solución y tal), la integración en la integridad de la característica también tiene sus ventajas.
Joppe
2
¿No puede hacer todas estas cosas con (a) ramas SVN o (b) múltiples copias de trabajo?
JBRWilkinson
4
  • Rama por error
  • Latencia reducida en sus diferencias.
  • Ser capaz de navegar muy rápidamente de manera arbitraria a través del historial de una sucursal cuando realiza una revisión por pares.
  • Todavía tiene acceso a su historial completo cuando no tiene acceso al servidor centralizado: no está en la oficina, se acabó la energía pero la batería de su computadora portátil sigue funcionando ...

Estas cosas le permiten trabajar de manera más eficiente, tanto en solitario como en equipo. Trabajo más eficiente = tiempo de desarrollo más rápido = tiempo de comercialización más rápido = beneficio.

Frank Shearar
fuente
3

Perdóname por vincularme a mi propio blog, pero he escrito artículos sobre este mismo tema:

Siéntase libre de votar si no los encuentra relevantes.

En pocas palabras, DVCS facilita la ramificación de modelos que pueden evitar que grandes grupos de desarrolladores se pisen los pies, lo que aumenta tanto la productividad como la calidad de construcción diaria. La parte de colaboración desordenada del control de versiones se puede hacer en repositorios locales, dejando su repositorio central más limpio y de mayor calidad. Además, las decisiones sobre cuándo ramificarse pueden tener un gran efecto en la eficiencia, por ejemplo, si un departamento está listo para comenzar a trabajar en 2.0 cuando otros todavía están limpiando 1.0. DVCS permite que esas decisiones se tomen a nivel local en lugar de por comité.

Karl Bielefeldt
fuente
Sus entradas de blog están bien escritas. Sin embargo, aún no los he leído todos. Me pregunto por qué has elegido Bzr cuando Git y Hg parecen ser mucho más populares. La gente parece odiar a Bzr por ser lento. También soy fanático de Git debido a los hashes del árbol en lugar de los números de revisión, lo que me parece muy seguro. ¿No se mezclarán todos los números de rev de bzr cuando se fusionen las ramas?
Keyo
2
@Keyo, elegí bzr porque tenía que enseñarme DVCS a mí mismo y bzr es el más amigable para los novatos. He cambiado a git por velocidad, características y estabilidad desde entonces. Bazaar también analiza sus revisiones y tiene identificadores únicos a nivel mundial, simplemente no están expuestos por defecto al usuario. Sus números de revisión no son realmente diferentes de utilizar HEAD~1, HEAD~2, etc, en git. Es muy raro que necesites el hash real, pero es lo primero que aprendes en git y siempre está en tu cara. Esconder eso del usuario a menos que realmente lo necesite es una razón por la que bzr es más amigable para los novatos.
Karl Bielefeldt
Gracias por la aclaración. Git no fue exactamente fácil para mí viniendo de subversión. Muchos de los comandos tienen la misma palabra pero hacen cosas diferentes.
Keyo
2

Mis argumentos para DVCS son estos:

  • La ramificación no está rota, lo que conduce a una menor fricción en el desarrollo de características y el mantenimiento de los productos existentes parcheados. La fricción cuesta dinero a tiempo.

  • Pasar a un sistema moderno atrae mejor a los desarrolladores de vanguardia, lo que conducirá a una cultura de mejores productos, que le permite a la empresa vender más productos.

  • Las confirmaciones que no son de red son más rápidas , lo que permite que los desarrolladores se comprometan a menudo, lo que lleva a la detección y análisis de errores específicos.

Básicamente, se trata de reducir la fricción. Hay un término para esto: Muda . Cuanto más fricción, más dolor es hacer cosas. Cuanto más dolor, menos se hace, menos ganancias.

Paul Nathan
fuente
2

Pido disculpas si soy soberbio, pero permítanme exponer el caso comercial en términos inequívocos:

SVN hace que la vida de los desarrolladores sea miserable . Y eso hace que un negocio de software sea miserable.

... de maneras que muchos no se darán cuenta hasta que comiencen a usar un DVCS. Este es el caso comercial más importante que posiblemente se pueda hacer . ¿Por qué? Bueno, en comparación con el costo de encontrar y retener buenos desarrolladores, el costo de cambiar a un DVCS es casi inexistente .

Considera lo siguiente:

  • Todas las operaciones, excepto las más triviales, en SVN (y la mayoría de los otros CVCS) requieren acceso a la red. En la mayoría de DVCSes, acceso a la red sólo se produce cuando se hace una pusho pullfuncionamiento. Esto significa que los comandos no triviales son lentos . ¿Qué haces cuando un comando toma para siempre? Yo personalmente voy a navegar por programmers.se o las noticias de hackers mientras espero. En pocas palabras, los DVCS permiten a los programadores centrarse en hacer lo que aman: escribir el software de la compañía .
  • SVN tiene soporte para ramificarse de la misma manera que las cárceles tienen soporte para dejar caer el jabón en la ducha: puedes hacerlo, pero cuando lo haces te follan. Por lo tanto, SVN obliga a sus desarrolladores a luchar constantemente entre sí para realizar cambios .
  • Cuando SVN está inactivo, está inactivo. Se vuelve terriblemente difícil para los desarrolladores hacer su trabajo si pueden hacerlo. Por lo tanto, SVN obliga a sus desarrolladores a depender de que su infraestructura esté 100% libre de errores .
  • En estos días, git está ganando rápidamente la mente compartida mientras SVN lo está perdiendo rápidamente. Si no hay beneficios al usar DVCSes sobre SVN, ¿por qué la comunidad de programación está cambiando tan rápido como pueden?

¿Qué significa todo esto? Todavía tengo que encontrarme con un desarrollador que le haya dado una prueba honesta a DVCS que preferiría SVN después. Si pudiera hacer una declaración más molesta y en negrita, SVN es un "mal necesario" que los desarrolladores se obligan a usar. Git es una herramienta que hace que los desarrolladores sean más productivos y felices .

(Debo señalar que las declaraciones en negrita son las particulares en las que debe centrarse. El resto de ellas solo proporcionan contexto).

Jason Baker
fuente
55
-1: eres soberbio y, si bien hay algo de verdad en lo que escribes, se hace girar tan negativamente como para rastrear el FUD en lugar del análisis razonado. ¿SVN es lento? Solo si el repositorio es vasto y la red es glacial. ¿El hecho de que SVN esté inactivo me impide trabajar? Erm, no recuerdo que haya estado inactivo y NO, ya que mi computadora no depende de la existencia del repositorio para editar / compilar / ejecutar la fuente. ¿Es la ramificación y fusión SVN pobre? Wow, la gente tiene pocos recuerdos ... ¿por qué DVCS está ganando la mente? Una mezcla de funcionalidad, que se mejora, y, francamente, de moda.
Murph
1
@Murph: Nos guste o no, la gente odia los cambios hasta el punto de ser torpe. Para convencerlos de que cambien, debe convencerlos de que el statu quo está roto. Y está roto FUD solo es malo cuando no hay razón para tener miedo, incertidumbre y dudas. En cuanto a la mente compartida, estoy de acuerdo contigo. Pero ese no es realmente el punto. Es si las personas que toman decisiones están de acuerdo o no. Y este gerente ha convencido a todos los gerentes que he conocido (incluso si odian a git).
Jason Baker
2
No estoy necesariamente en desacuerdo contigo Jason simplemente sugiriendo que tus puntos no están bien hechos. Específicamente, creo que estás exagerando por el efecto y si te atrapan haciendo eso, tiendes a perder puntos por tu argumento, incluso si tienes razón. (Excepto los puntos en los que te equivocas, por supuesto ... (
:)
2
Todos sus puntos son cuestiones de opinión más que hechos. Enumeraría cada uno pero no hay suficiente espacio en los comentarios. ¿Qué tal si respondes de nuevo sin la grandilocuencia?
Henry
1
@Henry - Programmers.se es para preguntas y respuestas subjetivas. Subjetivo == cuestión de opinión.
Jason Baker, el
1

Lo único en lo que puedo pensar es que git funciona sin una conexión de red. A menudo, todo lo demás es difícil de vender a usuarios técnicos que usan subersión o rendimiento por bastante tiempo.

Brainlag
fuente
2
Claro, pero Subversion también funciona principalmente sin una conexión de red. (No cometer obviamente, pero las cosas comunes como conseguir información sobre la copia de trabajo o diffing con la revisión base de todo el trabajo.)
j_random_hacker
@j_random_hacker: El objetivo de un VCS es rastrear los cambios de código. Confirmar cambios de código de pistas. Si no puede comprometerse sin conexión, diría que su VCS no funciona mientras está desconectado.
Daenyth
1

La diferencia se muestra cuando hay problemas

Cambiamos a git hace 6 meses después de portar nuestro repositorio de una década.

Hasta ahora he encontrado lo siguiente, después de un poco de experimentación:

  • La ramificación y fusión es casi indolora. Esto hace que sea mucho más fácil trabajar en funciones separadas y corrección de errores sin pisar los dedos de los demás. También hace que sea muy fácil aplicar una corrección de error dada en otro lugar también.

  • más robusto por diseño: no confía al 100% en la disponibilidad de un servidor central, y si no lo está, puede usar promocionar cualquier clon temporalmente como un reemplazo activo. Esto elimina un punto crucial de falla: si el servidor SVN se cae por algún motivo, nadie puede hacer el trabajo SVN. Si el repositorio central de git se cae por algún motivo, aún puede trabajar y presionar / tirar localmente para asegurarse de que las confirmaciones se replican. Incluso puede tener múltiples repositorios fuera del sitio exactamente para este propósito.

  • La interacción del repositorio se simplifica. Para CVS, esencialmente necesitaba acceso todo el tiempo en cualquier momento que necesitara alguna información. Para git, todo el repositorio está disponible localmente, lo que permite que muchas cosas vayan más rápido.

Por lo tanto, el beneficio no es tanto en la rutina diaria, ¡pero es muy claro en el momento en que algo no funciona correctamente!

Por lo tanto, sugiero que para su caso de negocios, mire lo que hará cuando ocurra un desastre ...


fuente
Es el mismo argumento que para las copias de seguridad: solo las necesita cuando ocurre un desastre. La pregunta es qué hará cuando lo haga y qué aceptará que suceda en ese momento.
0

La facilidad de ramificación y fusión es la razón más concreta, pero para convencer a alguien tendrá que darles un ejemplo concreto de cómo eso mejora las cosas.

Supongamos que tiene algunos programadores trabajando en mejoras de rendimiento para una aplicación, y están en la etapa experimental y no saben si el código que están escribiendo alguna vez formará parte de la rama maestro / troncal. Sin embargo, necesitan compartir código con frecuencia entre sí y probar ideas que pueden ser callejones sin salida. ¿Cómo manejas la ramificación y fusión tan frecuente en subversion? La respuesta corta es que no. Con un dvcs es realmente fácil, y los programadores pueden probar rápidamente nuevas ideas en ramas y compartirlas con otros antes de decidir si esa idea se mantendrá.

jshen
fuente
-1

El argumento comercial para deshacerse de SubVersion es que el soporte de ramificación es una barrera para la estabilización y el mantenimiento del producto. Si necesita lanzar un producto y luego continuar con el desarrollo, necesita una rama. Con Subversion, los desarrolladores no utilizarán la ramificación correctamente, por lo que no podrá mantener el desarrollo en el tunk y se asegurará de que las correcciones de errores realmente lleguen tanto al tronco como a la rama.

Michael Shaw
fuente