¿Por qué usar solicitudes de extracción en lugar de fusionar?

16

¿Cuál es la ventaja de usar solicitudes de extracción en lugar de simplemente fusionar una rama en maestra sin una? Particularmente en un equipo donde todos los desarrolladores tienen acceso completo a master.

ganso
fuente
1
Las solicitudes de extracción permiten al gerente del proyecto decidir si desean que la rama se fusione con la maestra o no.
Robert Harvey
En la práctica, si todos los desarrolladores tienen acceso a master, ¿hace alguna diferencia?
Ganso
2
¿Revisión de código de ganso?
niñera
44
No utilizamos solicitudes de extracción en nuestra tienda. Tengo entendido que las solicitudes de extracción son que se utilizan principalmente en Github, donde se publica un proyecto público de código abierto. Como gerente de proyecto de dicho proyecto, en lugar de dar rienda suelta a todo el mundo sobre su proyecto para realizar cambios arbitrarios (y potencialmente dañinos), en su lugar, requiere que las personas envíen sus cambios en forma de solicitudes de extracción, para que pueda revisar sus cambios antes de fusionarlos usted mismo en la rama maestra.
Robert Harvey
44
Porque es la forma DVCS de nunca hacer en un solo paso lo que puedes hacer en 3 o 4 complicadas
Mason Wheeler

Respuestas:

23

Las solicitudes de extracción proporcionan controles y equilibrios, incluso si alguien puede presionar para dominar.

La mayor ventaja es que brindan la oportunidad de revisar el código. La persona responsable de realizar la extracción puede mirar el código y las pruebas y asegurarse de que cumplan con cualquier tipo de pautas que tenga la organización o el equipo. También hay otras razones para la revisión del código : educación, búsqueda de defectos o mejoras, capacitación cruzada del equipo en el sistema, brindando a los evaluadores una vista de caja blanca del sistema.

Si la persona que realiza la extracción está familiarizada con la arquitectura del sistema, puede asegurarse de que los cambios se ajusten a la visión arquitectónica del sistema, especialmente si el equipo completo puede no tener una visión a largo plazo.

Desarrollar un hábito de usar solicitudes de extracción también puede ayudar a su equipo si decide en el futuro que todo el equipo no debería tener acceso a master. Si su equipo crece, y especialmente si tiene miembros del equipo que son nuevos en el producto y / o nuevos en Git, no darles acceso al maestro puede ser más seguro para la integridad del producto.

Thomas Owens
fuente
5

Después de haber realizado tanto la ramificación de funciones como las solicitudes de bifurcación y bifurcación, creo que las solicitudes de extracción ofrecen poca ventaja cuando todos se desarrollan en el mismo equipo o empresa

Ofrecen un buen mecanismo e interfaz para la revisión de código, pero también complican y ralentizan todo el proceso de 'terminar las cosas'. Especialmente si tiene muchas características pequeñas, cada una en espera de revisión, fusión y luego todas las demás fusionadas con master nuevamente para extraer los cambios, etc. .

Una vez dicho esto, puede hacer solicitudes de extracción entre sucursales en el mismo repositorio. No tiene que bifurcar, o tener permisos diferentes.

Además, debe considerar toda su metodología y flujo de trabajo. ¿También tiene un sistema de tickets, CI, pruebas de aceptación automatizadas, etc.? ¿Sus revisiones de códigos proporcionan una verificación única vital antes de que los códigos se activen, o son solo ejercicios de sello de goma que son redundantes por otras verificaciones en su flujo de trabajo?

Ewan
fuente
4

Hay una observación llamada Ley de Conway que establece:

Las organizaciones que diseñan sistemas ... están obligadas a producir diseños que son copias de las estructuras de comunicación de estas organizaciones.

¿Qué tiene esto que ver con las solicitudes de extracción? Las solicitudes de extracción son un importante canal de comunicación en una unión crítica para su código. Brindan una oportunidad de revisión, pruebas automatizadas y mejoras antes de que el código pase a las siguientes etapas de prueba y producción, donde esos cambios son mucho más difíciles de anular y desperdician mucho más tiempo de mucha más gente.

Del mismo modo, la Ley de Conway sugiere que si desea tener una arquitectura de microservicio con áreas de responsabilidad autónoma claramente separadas e interfaces bien definidas, los canales de comunicación de su organización deben reflejar la arquitectura que desea lograr. Eso significa que pequeños equipos de 5 a 10 personas deberían tener acceso de confirmación directa a cualquier microservicio dado, y cualquier persona ajena a ese equipo debería recibir una solicitud de extracción. Esto garantiza que las personas más familiarizadas con un microservicio son las que lo revisan y aconsejan.

Cuando tiene una organización grande con todos los que tienen acceso de compromiso directo a todas partes, sus canales de comunicación de menor resistencia lo están preparando para producir una gran bola de arquitectura de barro.

Las solicitudes de extracción solo se sienten como una carga si no intercambia nada a cambio. He trabajado en entornos en los que no puedo hacer nada durante una semana porque la compilación siempre está rota, y he trabajado en entornos en los que alguien envía una solicitud de extracción y ni siquiera tengo que revisarla porque se rompió la construcción de CI, y te digo, valen cada segundo de esfuerzo.

Karl Bielefeldt
fuente
1

Karl Bielefeldt tiene toda la razón. Yo agregaría: se trata de calidad.

Muchas tiendas (¿la mayoría?) No tienen procesos formales establecidos para gobernar el desarrollo, lo que resulta en: "He trabajado en entornos donde no puedo hacer nada durante una semana porque la construcción siempre está rota y he trabajado en entornos donde alguien envía una solicitud de extracción y ni siquiera tengo que revisarla porque rompieron la compilación de CI, y les digo que valen la pena cada segundo de esfuerzo ".

Realmente vale la pena el esfuerzo.

usuario255231
fuente
Gracias por tu comentario. No estoy seguro de por qué aplicar esto como respuesta a la pregunta.
Goose
Esta es la única respuesta que menciona el CI previo a la fusión.
Basilevs
0

Usamos solicitudes de extracción para la revisión de código: ningún código debe fusionarse en la rama de desarrollo principal (normalmente "desarrollar" en nuestro caso, pero a veces "maestro") sin haber pasado por una solicitud de extracción. No aplicamos esto con controles de repositorio, pero eso es porque no tenemos que hacerlo: nuestros desarrolladores son lo suficientemente maduros como para no abusar del proceso.

Philip Kendall
fuente