Pull request vs Merge request

468

Quelle est la différence entre une demande Pull et une demande Merge.

Dans Github, c'est une demande Pull et dans GitLab par exemple, c'est une demande de fusion ... Y a-t-il une différence entre les deux?

Pacane
la source

Réponses:

766

La fonction de «demande de fusion» de GitLab est équivalente à la fonction de «demande de tirage» de GitHub . Les deux sont des moyens d'extraire les modifications d'une autre branche ou fourchette dans votre branche et de les fusionner avec votre code existant. Ce sont des outils utiles pour la révision du code et la gestion des changements.

Un article de GitLab explique les différences de dénomination de la fonctionnalité:

Les demandes de fusion ou d'extraction sont créées dans une application de gestion git et demandent à une personne affectée de fusionner deux branches. Des outils tels que GitHub et Bitbucket choisissent la demande d'extraction de nom, car la première action manuelle consiste à extraire la branche de fonctionnalité. Des outils tels que GitLab et Gitorious choisissent la demande de fusion de noms, car il s'agit de l'action finale demandée au cessionnaire. Dans cet article, nous les désignerons comme des demandes de fusion.

Une "demande de fusion" ne doit pas être confondue avec la git mergecommande. Une "pull request" ne doit pas non plus être confondue avec la git pullcommande. Les deux gitcommandes sont utilisées en arrière-plan dans les demandes d'extraction et les demandes de fusion, mais une demande de fusion / extraction fait référence à un sujet beaucoup plus large que ces deux commandes.

gilly3
la source
1
GitHub crée-t-il une branche intermédiaire / temporaire (invisible) lorsqu'une demande d'extraction est effectuée?
Robert Koritnik
1
@stevemao pouvons-nous y accéder? Sont-ils vraiment en lecture seule, car nous pouvons résoudre les conflits à leur sujet?
Robert Koritnik
11
Qu'est-ce que je rate? pull = fetch + merge. Si l'action finale est la fusion, la première action doit être récupérée.
Vytenis Bivainis
61
MR est juste un meilleur nom tout autour. La demande de tirage n'a jamais eu de sens jusqu'à ce que je lise votre explication selon laquelle il s'agit de la première action, alors que j'ai compris ce que signifie la demande de fusion la deuxième fois que je l'ai lu pour la première fois. "bonjour, pourriez-vous s'il vous plaît Fusionner ce code à la branche principale?" vs "bonjour, pourriez-vous tirer ce code vers une branche invisible pour <fusion implicite>" - il y a clairement un gagnant ici.
Granitosaurus
7
@Granitosaurus Accepté. En tant que débutant à git, les demandes de tirage n'étaient absolument pas ce que je m'attendais à ce qu'elles soient. Lorsque j'ai commencé à utiliser Gitlab, les demandes de fusion avaient tout de suite du sens.
Mark Lyons
54

Ce sont les mêmes caractéristiques

Les demandes de fusion ou d'extraction sont créées dans une application de gestion git et demandent à une personne affectée de fusionner deux branches. Des outils tels que GitHub et Bitbucket choisissent la demande d'extraction de nom, car la première action manuelle consiste à extraire la branche de fonctionnalité. Des outils tels que GitLab et Gitorious choisissent la demande de fusion de noms, car il s'agit de l'action finale demandée au cessionnaire. Dans cet article, nous les désignerons comme des demandes de fusion.

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

rneves
la source
la fusion ne devrait-elle pas être la responsabilité du développeur qui ajoute une nouvelle fonctionnalité? si un développeur A ajoute une fonctionnalité dans feature_branch, il devrait prendre la branche principale et la fusionner au-dessus de sa branche résoudre tous les conflits et la tester avant de créer la demande de fusion?
Ciasto piekarz
2
Oui, mais il y a toujours une fusion rapide que quelqu'un doit faire ensuite pour obtenir le code à maîtriser. Et en fait, je pense que dans une équipe de développeurs à plein temps, il est probablement préférable que le développeur de la fonctionnalité fusionne également, mais il pourrait être utile pour eux d'attendre que quelqu'un examine d'abord leur RP.
bdsl
21

À mon avis, ils signifient la même activité mais sous des angles différents:

Pensez-y, Alice fait quelques commits sur le référentiel A, qui est issu du référentiel B. de Bob

Quand Alice veut "fusionner" ses changements en B, elle veut en fait que Bob "tire" ces changements de A.

Par conséquent, du point de vue d'Alice, il s'agit d'une "demande de fusion", tandis que Bob la considère comme une "demande d'extraction".

K. Symbole
la source
Cela m'a rappelé l'exemple lorsque j'ai fait le petit rapport pour faire savoir à d'autres collègues comment git fonctionne.
Ravi Yadav
4

Il existe une différence subtile en termes de gestion des conflits. En cas de conflits, une pull request dans Github entraînera une validation de fusion sur la branche de destination . Dans Gitlab, lorsqu'un conflit est détecté, les modifications apportées seront sur un commit de fusion sur la branche source .

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

"GitLab résout les conflits en créant une validation de fusion dans la branche source qui n'est pas automatiquement fusionnée dans la branche cible. Cela permet à la validation de fusion d'être examinée et testée avant que les modifications ne soient fusionnées, empêchant les modifications involontaires d'entrer dans la branche cible sans révision ni rupture la construction. "

iclman
la source
3

GitLab 12.1 (juillet 2019) introduit une différence:

" Fusionner les demandes de problèmes confidentiels "

Lorsque vous discutez, planifiez et résolvez des problèmes confidentiels, tels que des vulnérabilités de sécurité, il peut être particulièrement difficile pour les projets open source de rester efficaces car le référentiel Git est public.

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

Depuis la version 12.1, il est désormais possible de résoudre les problèmes confidentiels d'un projet public dans un flux de travail rationalisé à l'aide du bouton Créer une demande de fusion confidentielle, qui vous aide à créer une demande de fusion dans une branche privée du projet.

Voir « Problèmes confidentiels » du numéro 58583 .

Une fonctionnalité similaire existe dans GitHub, mais implique la création d'un fork privé spécial, appelé " avis de sécurité du mainteneur ".

VonC
la source
0

Comme mentionné dans les réponses précédentes, les deux ont presque le même objectif. Personnellement, j'aime git rebase et merge request (comme dans gitlab). Cela soulage le réviseur / mainteneur, en s'assurant que lors de l'ajout d'une demande de fusion, la branche de fonctionnalité inclut toutes les dernières validations effectuées sur la branche principale après la création de la branche de fonctionnalité. Voici un article très utile expliquant le rebase en détail: https://git-scm.com/book/en/v2/Git-Branching-Rebasing

Muhammad Shahbaz
la source