Warum wird eine Git-Pull-Anfrage nicht als Push-Anfrage bezeichnet?

449

Die Terminologie, die zum Zusammenführen eines Zweigs mit einem offiziellen Repository verwendet wird, ist eine "Pull-Anforderung". Dies ist verwirrend, da ich anscheinend meine Änderungen in das offizielle Repository verschieben möchte.

Warum wird es eine Pull-Anfrage und keine Push-Anfrage genannt?

Alejandro Sanz Díaz
quelle
45
Stellen Sie sich einen großen, lebenden Baum vor. Der Baum ist zu robust, als dass Sie einen Ast hineinschieben könnten. Stattdessen müssen Sie den Baum bitten, einen Ast in den Stamm zu ziehen, um ihn zu stärken.
Luke
2
Wenn Sie ein Remote-Repository wie gitihub verwenden, ist einer der letzten Befehle, die der Betreuer ausführt, um die Anforderung über die Befehlszeile zu erfüllen git push. Für mich sagt das alles ... (Ja, sie geben vielleicht Git Pull aus, dann Git Push, aber der Push wurde
angefordert
60
GitLab ruft sie an merge requests. Viel klarer, IMHO. :)
U007D
1
Duplikat: stackoverflow.com/questions/14817051/…
Timothy Swan

Antworten:

377

Wenn Sie eine Codeänderung in Ihrem Repository haben und diese in ein Ziel-Repository verschieben möchten, gehen Sie wie folgt vor:

  • Mit "Push" erzwingen Sie die Änderungen, die im Ziel-Repository vorhanden sind ( git push).
  • "Pull" ist das Ziel-Repository, das Ihre Änderungen erfasst, um dort vorhanden zu sein ( git pullvom anderen Repo).

Eine "Pull-Anfrage" besteht darin, dass Sie das Ziel-Repository auffordern, Ihre Änderungen zu übernehmen.

Eine "Push-Anfrage" wäre das Ziel-Repository, in dem Sie aufgefordert werden, Ihre Änderungen zu pushen.

Sven
quelle
21
Dies war auch für mich ein Problem mit der Namenskonvention: D & U hat es nur viel einfacher gemacht, es zu verstehen. Es ist genauso zu sehen, wie der Kauf / Verkauf von Währungen in Banken funktioniert.
nsuinteger
Ich denke, Sie müssen Ihre Definition von "Pull" neu definieren, da "Ziel-Repository", "Ihre Änderungen" verwirrend sind. Vielleicht möchten Sie sagen, dass "Ihr Repository Änderungen vom Ziel-Repository übernimmt"?
MrPisarik
9
Die Schlüsselidee ist, dass die Terminologie "Push" / "Pull" verwendet wird, um die Partei zu identifizieren, die letztendlich entscheidet, ob die Übertragung stattfindet, und nicht die Partei, die die übertragenen Informationen erstellt.
Jess Riedel
3
Es hängt davon ab, wen Sie anfordern. Wenn es sich um Ihr Team handelt, ist eine "Push-Anforderung" sinnvoller. Wenn es sich um das Remote-Repository handelt, haben Sie absolut Recht.
A77
2
Wenn Sie mit einem zentralen, privaten Git-Server in einem Unternehmen arbeiten, können Sie normalerweise einen neuen Zweig dorthin verschieben und eine Codeüberprüfung anfordern und von Ihren Mitarbeitern zusammenführen. "Pull Request" für diesen Workflow ist also technisch nicht korrekt, aber es stellte sich heraus, dass dies der Begriff ist, den alle und die GUI-Designer gewählt haben.
Sven
88

Wenn Sie eine Pull-Anfrage senden, bitten Sie den offiziellen Repo-Besitzer, einige Änderungen aus Ihrem eigenen Repo zu ziehen. Daher "Pull Request".

JB Nizet
quelle
2
aber der Eigentümer wird eine Git-Zusammenführung herausgeben, nachdem er es genehmigt hat
Jervie Vitriolo
2
Ein Git-Pull ist eine Kombination aus Abrufen und Zusammenführen. Pull bedeutet also bereits Zusammenführen.
Xiong Chiamiov
37

tl; dr da ich keinen Push machen darf, werde ich einfach eine Anfrage an den Repo-Besitzer richten, damit er sich entscheidet, zu ziehen


Wer kann Code in ein Repository übertragen?

Sollte jemand (möglicherweise böse oder ungebildet oder unbekannt) in der Lage sein, hierher zu kommen und zu sagen, habe ich dies einfach an Ihre Hauptniederlassung weitergeleitet und Ihren gesamten Code durcheinander gebracht HAHAHA! ?

Sicher willst du nicht, dass er das tut. Standardmäßig ist ein Sicherheitsnetz eingestellt, damit niemand auf Ihr Repo zugreifen kann. Sie können andere als Mitarbeiter festlegen und sie dann pushen. Sie würden Personen, denen Sie vertrauen, einen solchen Zugang gewähren.

Wenn Sie also kein Mitarbeiter sind und versuchen zu pushen, wird eine Fehlermeldung angezeigt, die darauf hinweist, dass Sie keine Berechtigung haben.


Wie können andere Entwickler auf ein Repo pushen, für das sie keine Push-Erlaubnis erhalten?
Sie können nicht jedem Zugriff gewähren, möchten jedoch anderen einen Auslass- / Einstiegspunkt geben, damit sie "den Repo-Besitzer auffordern können, diesen Code in das Repo zu ziehen ". Einfach ausgedrückt, indem sie das Repo zugänglich machen, können sie es teilen ... ihre Änderungen in ihrer eigenen Gabel vornehmen. Schieben Sie ihre Änderungen auf ihre eigene Gabel . Sobald es in ihrem eigenen Remote-Repo ist:

Sie stellen eine Pull-Anfrage von ihrer Gabel und der Besitzer des Upstream-Repos (auf das Sie nicht direkt zugreifen können) entscheidet, ob die Pull-Anfrage zusammengeführt werden soll oder nicht.


Auch eine halbbezogene Frage, die ich zum Lesen empfehle. Was genau passiert bei einem Git-Push? Warum wird ein Git-Push nicht wie ein Git-Merge betrachtet?

Honig
quelle
4
Für Leute, die nicht wissen, dass es einen Berechtigungsunterschied zwischen Drücken und Ziehen gibt, ist diese Antwort sehr sinnvoll.
Kumpel
29

Pull - Request: Ich anfordern , um Sie zu ziehen meint.

Hepidad
quelle
7
Ich als Benutzer betrachte es aus meiner Sicht. Sollte es nicht "Ich bitte Sie, es an Sie weiterzuleiten?" Sein. I >>> You - Sie ändern den Bezugspunkt zweimal im selben Kontext ... anstatt I >>>> You <<<< Mine
Marin
1
Diese Antwort ist am sinnvollsten.
Shivams
Easy Peezy Lemon Squeezy
Ivan Ivković
Ich bitte dich, meine zu ziehen ..... von wo ??? Ich verstehe, dass dies von einer Abzweigung des ursprünglichen Projekts sein würde? oder von einer lokalen Kopie?
KansaiRobot
5

Ich möchte etwas zum Repo eines anderen schieben.

Ich habe nicht die Erlaubnis zu schieben (oder zu ziehen).

Der Eigentümer / Mitarbeiter hat Berechtigungen. Sie können sowohl ziehen als auch schieben. Ich kann nicht pushen.

Also fordere ich sie auf, einen Zug von mir auszuführen - was indirekt bedeutet, dass ich sie auffordere, meinen Stoß anzunehmen.

Also keine Push-Anfrage. Nur für einen Zug. Und für die Annahme eines Pushs.

Daher eine Pull-Anfrage. Und keine Push-Anfrage.

user11705414
quelle
4

Es ist das Wort "Anfrage", das bei diesen Aktionen der Schlüssel ist. Sie können sich das auch so vorstellen: "Ich habe eine Bitte an Sie, meine Arbeit anzunehmen, akzeptieren Sie?" - "Eine Pull-Anfrage".

Es ist zunächst etwas verwirrend, macht aber irgendwann Sinn.

Kyzer
quelle
1

Um dies besser zu verstehen und sich für immer daran zu erinnern, müssen Sie es sich vorstellen.

Stellen Sie sich einen großen, lebenden Baum vor {als Ihr Aufbewahrungsort}. Der Baum ist zu robust, als dass Sie einen Zweig hineinschieben oder einen neuen Teil hinzufügen könnten (symbolisiert das Erstellen eines neuen Zweigs oder das Einschieben von Code). Stattdessen müssen Sie den Baum bitten, einen Zweig in den Stamm zu ziehen oder den zu haben ändert sich von Ihnen.

Der Begriff "Pull-Anfragen" stammt aus der verteilten Natur. Anstatt Ihre Änderungen nur in das Repository zu übertragen (wie Sie es bei einem zentralen Repository tun würden, z. B. bei Subversion), veröffentlichen Sie Ihre Änderungen separat und bitten den Betreuer, Ihre Änderungen zu übernehmen. Der Betreuer kann dann die Änderungen überprüfen und den Zug ausführen.

Sie "fordern" also im Grunde die Leute mit schriftlichem Zugriff auf das Repo an, zu dem Sie beitragen möchten, "Pull" von Ihrem Repo.

Mit Pull-Anforderungen können Sie andere über die Änderungen informieren, die Sie an einen Zweig in einem Repository auf GitHub übertragen haben. Sobald eine Pull-Anforderung geöffnet ist, können Sie die potenziellen Änderungen mit Mitarbeitern diskutieren und überprüfen und Follow-up-Commits hinzufügen, bevor Ihre Änderungen in den Basiszweig übernommen werden. Github Erklärung

SPidey
quelle
0

Ich denke, es ist eine dumme Terminologie, weil ich denken möchte, dass ich Ihnen etwas DRÜCKEN möchte und nicht umgekehrt , wenn ich jemanden bitten möchte, meine Ergänzungen zu ziehen. Daher sollte es in PUSH REQ geändert werden. da bin ich der aktive teil. Der Pfeil geht in die andere Richtung und beginnt bei mir und nicht der Goofy am anderen Ende. MEINER BESCHEIDENEN MEINUNG NACH.

Michael Pauli
quelle
0

Denken Sie so. Lokales Repository vs Remote-Repository.

  • Wenn Sie Drücken von Local. ( git push) - Mit anderen Worten, das Remote-Repository zieht Codes von Ihnen (lokal).

Sie fordern etwas an. Also, frag dich selbst,

  • Möchten Sie, dass das Remote-Repository Codes von Ihnen abruft ? - Pull-Anfrage.
Jin Lim
quelle
Ich denke, es ist wichtig zu unterscheiden, dass Sie keine Push-Anfragen stellen können. Wenn Sie pushen können und dies tun, ist dies keine Anforderung, sondern wird mit dem Master zusammengeführt. Bei einer Pull-Anforderung an ein Git-Hub-Repository fordern Sie die Zusammenführung Ihres Codes an.
James
Ich benutze dies nur als Beispiel. Natürlich kann Github den Code pushen. aber ich werde meine Antwort bearbeiten.
Jin Lim
0

Ich befürchte, dass die meisten dieser Antworten die Frage beantworten. Was bedeutet "Pull-Anfrage"? oder Was würde "Push-Anfrage" bedeuten? eher als die Frage des OP: Warum wird es eine Pull-Anfrage und keine Push-Anfrage genannt?

Normalerweise ist diese Art des Ersetzens von Fragen akzeptabel, aber in diesem Fall ist klar, dass das OP die Antworten auf diese Ersetzungsfragen kennt, sodass die Beantwortung dieser Fragen nicht sehr hilfreich ist.

Nur die Leute bei GitHub, die den Begriff geprägt haben, wissen es mit Sicherheit. Es scheint jedoch offensichtlich, dass diese terminologische Wahl etwa den folgenden Standpunkt in Bezug auf das Phänomen "Änderungen, die von außen in ein Repository eingehen" widerspiegelt: Der Betreuer führt die Aktion aus (Pull) .

Eine Anfrage ist jedoch auch eine Aktion, und der Ausführende dieser Aktion ist nicht der Betreuer, sondern der Einreicher (der noch mehr Maßnahmen ergriffen hat, nämlich Arbeit). Der Begriff "Pull-Anfrage" führt daher zu Verwirrung darüber, wer der Agent ist . Letztendlich entsteht die Verwirrung aufgrund des rekursiven Charakters einer Anforderung: Eine Anforderung ist sowohl eine Aktion eines primären Agenten als auch eine Anforderung einer zukünftigen Aktion eines zweiten Agenten.

Die Situation ist ziemlich analog zu den heute üblichen sprachlichen Konstrukten wie "Wir haben unser Haus gebaut" (anstelle von "Wir haben jemand anderen bezahlt, um unser Haus zu bauen"), da die Verantwortung für die Hauptaktion vom offensichtlichen ursprünglichen Agenten auf "verlagert" wird ein sekundärer Agent, der eine soziale Führungsrolle erfüllt.

Daraus könnte man schließen, dass der Grund für die terminologische Wahl die Legitimierung des Standpunkts ist, dass Managementarbeit erstklassige Arbeit ist . Darüber hinaus kann der Grund für die Verwirrung über diese terminologische Wahl darin liegen, dass Arbeitnehmer, die keine Manager sind, naturgemäß einen anderen Standpunkt vertreten.

Jimmyymathews
quelle