Pull-Anfrage vs Merge-Anfrage


467

Was ist der Unterschied zwischen einer Pull-Anforderung und einer Zusammenführungsanforderung?

In Github handelt es sich um eine Pull-Anforderung und in GitLab beispielsweise um eine Zusammenführungsanforderung. Gibt es einen Unterschied zwischen beiden?

Antworten:


764

Die "Merge Request" -Funktion von GitLab entspricht der "Pull Request" -Funktion von GitHub . Beides ist eine Möglichkeit, Änderungen aus einem anderen Zweig oder Zweig in Ihren Zweig zu ziehen und die Änderungen mit Ihrem vorhandenen Code zusammenzuführen. Sie sind nützliche Tools für die Codeüberprüfung und das Änderungsmanagement.

In einem Artikel von GitLab werden die Unterschiede bei der Benennung der Funktion erläutert:

Zusammenführungs- oder Pull-Anforderungen werden in einer Git-Verwaltungsanwendung erstellt und fordern eine zugewiesene Person auf, zwei Zweige zusammenzuführen. Tools wie GitHub und Bitbucket wählen die Namensabrufanforderung aus, da die erste manuelle Aktion darin besteht, den Feature-Zweig abzurufen. Tools wie GitLab und Gitorious wählen die Namenszusammenführungsanforderung aus, da dies die letzte Aktion ist, die vom Empfänger angefordert wird. In diesem Artikel werden sie als Zusammenführungsanforderungen bezeichnet.

Eine "Zusammenführungsanforderung" sollte nicht mit dem git mergeBefehl verwechselt werden . Eine "Pull-Anfrage" sollte auch nicht mit dem git pullBefehl verwechselt werden . Beide gitBefehle werden hinter den Kulissen sowohl in Pull-Anforderungen als auch in Zusammenführungsanforderungen verwendet. Eine Zusammenführungs- / Pull-Anforderung bezieht sich jedoch auf ein viel umfassenderes Thema als nur diese beiden Befehle.


1
Erstellt GitHub einen Zwischen- / temporären Zweig (unsichtbar), wenn eine Pull-Anfrage gestellt wird?
Robert Koritnik

1
@stevemao können wir darauf zugreifen? Sind sie wirklich schreibgeschützt, da wir Konflikte mit ihnen lösen können?
Robert Koritnik

11
Was vermisse ich? pull = fetch + merge. Wenn die letzte Aktion zusammengeführt wird, muss die erste Aktion abgerufen werden.
Vytenis Bivainis

60
MR ist einfach ein besserer Name. Pull Request hat für mich nie Sinn gemacht, bis ich Ihre Erklärung gelesen habe, dass es sich um die erste Aktion handelt, während ich verstanden habe, was Merge Request bedeutet, wenn ich es zum ersten Mal lese. "Hallo, könnten Sie bitte diesen Code zum Hauptzweig zusammenführen?" vs "Hallo, könnten Sie diesen Code für <implizites Zusammenführen> in einen unsichtbaren Zweig ziehen" - hier gibt es einen klaren Gewinner.
Granitosaurus

7
@ Granitosaurus Einverstanden. Als Anfänger waren Pull-Anfragen absolut nicht das, was ich erwartet hatte. Als ich anfing, Gitlab zu verwenden, waren Zusammenführungsanforderungen sofort sinnvoll.
Mark Lyons

54

Sie sind das gleiche Merkmal

Zusammenführungs- oder Pull-Anforderungen werden in einer Git-Verwaltungsanwendung erstellt und fordern eine zugewiesene Person auf, zwei Zweige zusammenzuführen. Tools wie GitHub und Bitbucket wählen die Namensabrufanforderung aus, da die erste manuelle Aktion darin besteht, den Feature-Zweig abzurufen. Tools wie GitLab und Gitorious wählen die Namenszusammenführungsanforderung aus, da dies die letzte Aktion ist, die vom Empfänger angefordert wird. In diesem Artikel werden sie als Zusammenführungsanforderungen bezeichnet.

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


Sollte das Zusammenführen nicht in der Verantwortung des Entwicklers liegen, der eine neue Funktion hinzufügt? Wenn ein Entwickler A ein Feature in feature_branch hinzufügt, sollte er den Hauptzweig nehmen und auf seinem Zweig zusammenführen, alle Konflikte lösen und testen, bevor er die Zusammenführungsanforderung erstellt.
Ciasto Piekarz

2
Ja, aber es gibt immer noch eine Schnellvorlaufzusammenführung, bei der danach jemand ausgeführt werden muss, um den Code zum Master zu bringen. Und tatsächlich denke ich, dass es in einem Team von Vollzeitentwicklern wahrscheinlich am besten ist, wenn der Entwickler des Features dies auch zusammenführt, aber es könnte nützlich sein, darauf zu warten, dass jemand zuerst seine PR überprüft.
BDSL

21

Aus meiner Sicht bedeuten sie dieselbe Aktivität, jedoch aus unterschiedlichen Perspektiven:

Denken Sie darüber nach, Alice macht einige Commits für Repository A, das aus Bobs Repository B gegabelt wurde.

Wenn Alice ihre Änderungen in B "zusammenführen" möchte, möchte sie tatsächlich, dass Bob diese Änderungen aus A "zieht".

Aus Alices Sicht handelt es sich daher um eine "Zusammenführungsanforderung", während Bob sie als "Pull-Anforderung" betrachtet.


Es erinnerte mich an das Beispiel, als ich den kleinen Bericht machte, um andere Kollegen wissen zu lassen, wie Git funktioniert.
Ravi Yadav

4

In Bezug auf das Konfliktmanagement gibt es einen subtilen Unterschied. Im Falle von Konflikten führt eine Pull-Anforderung in Github zu einem Zusammenführungs-Commit für den Zielzweig . In Gitlab, wenn ein Konflikt gefunden wird, haben die Änderungen an einem merge commit auf dem seine Quelle Zweig.

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

"GitLab löst Konflikte, indem im Quellzweig ein Zusammenführungs-Commit erstellt wird, das nicht automatisch mit dem Zielzweig zusammengeführt wird. Auf diese Weise kann das Zusammenführungs-Commit überprüft und getestet werden, bevor die Änderungen zusammengeführt werden, wodurch verhindert wird, dass unbeabsichtigte Änderungen ohne Überprüfung oder Unterbrechung in den Zielzweig gelangen." der Build. "


3

GitLab 12.1 (Juli 2019) führt einen Unterschied ein:

" Zusammenführungsanfragen für vertrauliche Probleme "

Bei der Erörterung, Planung und Lösung vertraulicher Probleme wie Sicherheitslücken kann es für Open Source-Projekte besonders schwierig sein, effizient zu bleiben, da das Git-Repository öffentlich ist.

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

Ab 12.1 können vertrauliche Probleme in einem öffentlichen Projekt jetzt in einem optimierten Workflow mithilfe der Schaltfläche "Vertrauliche Zusammenführungsanforderung erstellen" gelöst werden, mit der Sie eine Zusammenführungsanforderung in einem privaten Zweig des Projekts erstellen können.

Siehe " Vertrauliche Probleme " ab Ausgabe 58583 .

Eine ähnliche Funktion gibt es in GitHub, aber es wird ein spezieller privater Fork erstellt, der als " Sicherheitshinweis für Betreuer " bezeichnet wird.


0

Wie bereits in früheren Antworten erwähnt, dienen beide fast demselben Zweck. Persönlich mag ich Git Rebase und Merge Request (wie in Gitlab). Dies entlastet den Prüfer / Betreuer und stellt sicher, dass der Feature-Zweig beim Hinzufügen einer Zusammenführungsanforderung alle neuesten Commits enthält, die im Hauptzweig ausgeführt wurden, nachdem der Feature-Zweig erstellt wurde. Hier ist ein sehr nützlicher Artikel, der die Rebase ausführlich erklärt: https://git-scm.com/book/en/v2/Git-Branching-Rebasing

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.