¿De qué manera la ramificación en Git es más efectiva para los desarrolladores que los ciclos regulares de compromiso / empuje / extracción?

He estado usando git por un time, y me gusta, sin embargo, generalmente lo uso en el estilo cvs / svn (no me ramifico / fork a less que no tenga acceso a la cabeza).

Encuentro que el ciclo de compromiso / extracción / inserción es efectivo: si tengo conflictos, por lo general solo pago una copy nueva de la fuente, vuelvo a abrir los cambios y sigo adelante. Por supuesto, si edito un punto de acceso en el tree de código fuente, hay problemas, pero supongo que esto es un problema con cualquier flujo de trabajo de control de origen de múltiples desarrolladores.

Así que mi pregunta es: ¿cómo puedo comenzar a darme count del valor agregado que brindan los flujos de trabajo de desarrollo de git "branch", en comparación con el estilo de cvs, los ciclos de desarrollo centralizados de commit / pull / push? En general, ¿vemos un aumento en la productividad cuando adoptamos prácticas de desarrollo de este estilo tan básico?

En un model de una twig, solo hay dos posibilidades para grandes cambios:

  • El cambio grande se registra como una única confirmación. Esto es terrible, la persona que trabaja en el cambio no podrá usar el control de fuente hasta que todo haya terminado. Si el cambio lleva cuatro semanas, son cuatro semanas sin control de origen. (Imagínese si desea trabajar en dos estaciones de trabajo diferentes durante esas cuatro semanas …)

  • El cambio grande se registra como varios commits. Esto es terrible, cualquiera que revise el código mientras tanto obtiene un tree roto. Si el cambio lleva cuatro semanas, son cuatro semanas en las que nadie más puede hacer nada.

La única solución viable es ramificarse y fusionarse.

Nota: Espero que haya sido un error tipográfico en su publicación. El ciclo correcto es commit / pull / push. No presione sus cambios hasta que haya fusionado y probado la fusión resultante. De lo contrario, solo estás dando código no probado a otras personas, lo que no te hará ganar nada más que horcas y antorchas.

  • Puede trabajar en su sucursal sin tener que ingresar al repository central (y tenerlo) de forma autónoma para más de un compromiso, preservando la historia significativa
  • Puede trabajar en el proyecto sin tener realmente acceso al repository central y contribuir de nuevo al exponer su sucursal
  • Puede fusionar y seleccionar entre las twigs y su historial de fusión también se grabará (he escuchado que svn hace ahora, pero no ha funcionado con svn más reciente).

La mayor parte de esto debería ser posible con un svn más nuevo si de hecho registra fusiones, pero emular este flujo de trabajo en un repository centralizado remoto también es lento .

La ramificación es de hecho bastante importante. Imagine que usted y su colega trabajan en una function. Les lleva a ambos un par de días escribir el código. Mientras tanto, querrá comstackr su propio código y probarlo, sin tener un código roto introducido en su progtwig por su colega. La bifurcación le ayuda a mantener su propia modificación en la fuente por separado, hasta que decida fusionarlos.

Otro ejemplo podría ser que llegue a un punto en el que desee liberar su software y deba someterlo a una extensa testing / debugging. Mientras tanto, su colega ya comenzó a trabajar en la próxima versión. La bifurcación aquí le ayuda a mantener el código anterior siendo probado y el código en desarrollo aparte.

Puede ver aquí un patrón de uso interesante de twigs.

Y con Git, no es necesario que tengas miedo de fusionarte. Si alguna vez has intentado crear un conflicto intencionalmente y luego resolverlo, sabrías que es simple. En realidad, a less que dos personas hayan contribuido extensamente a la misma parte exacta del código, resolver los conflictos no es tan importante.