Solicitud de extracción vs solicitud de fusión

468

¿Cuál es la diferencia entre una solicitud de extracción y una solicitud de combinación?

En Github es una solicitud de extracción y en GitLab, por ejemplo, es una solicitud de fusión ... ¿Hay alguna diferencia entre ambos?

Pacane
fuente

Respuestas:

766

La función "solicitud de fusión" de GitLab es equivalente a la función "solicitud de extracción" de GitHub . Ambos son medios para extraer cambios de otra rama o bifurcación en su rama y fusionar los cambios con su código existente. Son herramientas útiles para la revisión de código y la gestión de cambios.

Un artículo de GitLab analiza las diferencias al nombrar la función:

Las solicitudes de combinación o extracción se crean en una aplicación de administración de git y le piden a una persona asignada que combine dos sucursales. Herramientas como GitHub y Bitbucket eligen la solicitud de extracción de nombre, ya que la primera acción manual sería extraer la rama de características. Herramientas como GitLab y Gitorious eligen la solicitud de fusión de nombre, ya que esa es la acción final que se le solicita al cesionario. En este artículo nos referiremos a ellos como solicitudes de fusión.

Una "solicitud de fusión" no debe confundirse con el git mergecomando. Tampoco debe confundirse una "solicitud de extracción" con el git pullcomando. Ambos gitcomandos se utilizan detrás de escena tanto en las solicitudes de extracción como en las solicitudes de combinación, pero una solicitud de combinación / extracción se refiere a un tema mucho más amplio que solo estos dos comandos.

gilly3
fuente
1
¿GitHub crea una rama intermedia / temporal (invisible) cuando se realiza una solicitud de extracción?
Robert Koritnik
1
@stevemao ¿podemos acceder a ellos? ¿Realmente son de solo lectura ya que podemos resolver conflictos sobre ellos?
Robert Koritnik
11
¿Qué me estoy perdiendo? pull = buscar + fusionar. Si la acción final es fusionar, entonces la primera acción debe ser buscar.
Vytenis Bivainis
61
MR es simplemente mejor nombre por todas partes. La Solicitud de extracción nunca tuvo sentido para mí hasta que leí su explicación de que era la primera acción, mientras entendí lo que significa Solicitud de fusión la segunda vez que la leí por primera vez. "hola, ¿podrías por favor fusionar este código con la rama maestra?" vs "hola, ¿podría tirar de este código a una rama invisible para <fusión implícita>"? Aquí hay un claro ganador.
Granitosaurus
77
@Granitosaurus De acuerdo. Como principiante en git, las solicitudes de extracción no eran absolutamente lo que esperaba que fueran. Cuando comencé a usar Gitlab, las solicitudes de fusión tenían sentido de inmediato.
Mark Lyons el
54

Son la misma característica

Las solicitudes de combinación o extracción se crean en una aplicación de administración de git y le piden a una persona asignada que combine dos sucursales. Herramientas como GitHub y Bitbucket eligen la solicitud de extracción de nombre, ya que la primera acción manual sería extraer la rama de características. Herramientas como GitLab y Gitorious eligen la solicitud de fusión de nombre, ya que esa es la acción final que se le solicita al cesionario. En este artículo nos referiremos a ellos como solicitudes de fusión.

- https://about.gitlab.com/2014/09/29/gitlab-flow/

rneves
fuente
¿La fusión no debería ser responsabilidad del desarrollador que está agregando una nueva característica? si un desarrollador A agrega una característica en feature_branch, ¿debería tomar la rama maestra y fusionarla encima de su rama resolver todos los conflictos y probarla antes de crear la solicitud de fusión?
Ciasto piekarz
2
Sí, pero todavía hay una combinación de avance rápido que alguien debe hacer después de eso para obtener el código para dominar. Y, de hecho, creo que en un equipo de desarrolladores de tiempo completo probablemente sea mejor si el desarrollador de la función también combina eso, pero podría ser útil que esperen a que alguien revise primero sus relaciones públicas.
bdsl
21

Desde mi punto de vista, significan la misma actividad pero desde diferentes perspectivas:

Piensa en eso, Alice hace algunos commits en el repositorio A, que fue bifurcado del repositorio B. de Bob

Cuando Alice quiere "fusionar" sus cambios en B, en realidad quiere que Bob "extraiga" estos cambios de A.

Por lo tanto, desde el punto de vista de Alice, es una "solicitud de fusión", mientras que Bob la ve como una "solicitud de extracción".

K. símbolo
fuente
Me recordó el ejemplo cuando hice el pequeño informe para que otros colegas supieran cómo funciona git.
Ravi Yadav
4

Hay una sutil diferencia en términos de gestión de conflictos. En caso de conflictos, una solicitud de extracción en Github dará como resultado una confirmación de fusión en la rama de destino . En Gitlab, cuando se encuentra un conflicto, las modificaciones realizadas se realizarán en una confirmación de fusión en la rama de origen .

Ver https://docs.gitlab.com/ee/user/project/merge_requests/resolve_conflicts.html

"GitLab resuelve conflictos creando una confirmación de fusión en la rama de origen que no se fusiona automáticamente en la rama de destino. Esto permite que la confirmación de fusión sea revisada y probada antes de que se fusionen los cambios, evitando que los cambios no intencionados ingresen a la rama de destino sin revisión o interrupción La construcción."

iclman
fuente
3

GitLab 12.1 (julio de 2019) presenta una diferencia:

" Solicitudes de fusión para asuntos confidenciales "

Al debatir, planificar y resolver problemas confidenciales, como las vulnerabilidades de seguridad, puede ser particularmente difícil para los proyectos de código abierto permanecer eficientes ya que el repositorio de Git es público.

https://about.gitlab.com/images/12_1/mr-confidential.png

A partir de 12.1, ahora es posible que los problemas confidenciales en un proyecto público se resuelvan dentro de un flujo de trabajo optimizado utilizando el botón Crear solicitud de fusión confidencial, que le ayuda a crear una solicitud de fusión en una bifurcación privada del proyecto.

Consulte " Cuestiones confidenciales " del número 58583 .

Existe una característica similar en GitHub, pero implica la creación de una bifurcación privada especial, llamada " aviso de seguridad del mantenedor ".

VonC
fuente
0

Como se mencionó en respuestas anteriores, ambos tienen casi el mismo propósito. Personalmente, me gusta git rebase y merge request (como en gitlab). Le quita la carga al revisor / mantenedor, asegurándose de que al agregar la solicitud de fusión, la rama de características incluye todas las últimas confirmaciones realizadas en la rama principal después de que se crea la rama de características. Aquí hay un artículo muy útil que explica rebase en detalle: https://git-scm.com/book/en/v2/Git-Branching-Rebasing

Muhammad Shahbaz
fuente