739 Stimmen

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

Die Terminologie, die verwendet wird, um einen Branch mit einem offiziellen Repository zusammenzuführen, ist ein 'Pull-Request'. Das ist verwirrend, da es so aussieht, als würde ich darum bitten, meine Änderungen in das offizielle Repository zu übertragen.

Warum wird es als ein Pull-Request bezeichnet und nicht als ein Push-Request?

628voto

Sven Punkte 65923

Wenn Sie eine Code-Änderung in Ihrem Repository haben und sie in ein Zielspeicher verschieben möchten, dann:

  • "Push" bedeutet, dass Sie die Änderungen im Zielspeicher erzwingen (git push).
  • "Pull" bedeutet, dass der Zielspeicher Ihre Änderungen abruft, um sie dort zu präsentieren (git pull aus dem anderen Repository).

Ein "Pull-Request" ist Ihre Bitte an das Zielspeicher, um Ihre Änderungen zu übernehmen.

Ein "Push-Request" wäre das Zielspeicher, der Sie bittet, Ihre Änderungen zu pushen.

135voto

JB Nizet Punkte 654813

Wenn Sie einen Pull-Request senden, fordern Sie den offiziellen Repository-Besitzer auf, einige Änderungen aus Ihrem eigenen Repository zu übernehmen. Daher "Pull-Request".

63voto

mfaani Punkte 28161

Tl;dr, da ich nicht erlaubt bin, einen Push zu machen, werde ich höflich eine Anfrage an den Repo-Besitzer stellen, damit sie entscheiden, ob sie den Pull machen sollen


Wer kann Code in ein Repository pushen?

Sollte jeder (möglichweise böse oder ungebildet oder unbekannt) kommen und sagen Hier, ich habe das gerade in deinen Master-Zweig gepusht und all deinen Code durcheinander gebracht HAHAHA!?

Sicherlich möchten Sie das nicht. Standardmäßig ist ein Sicherheitsnetz gesetzt, damit niemand in Ihr Repo pushen kann. Sie können andere als Collaborator festlegen, dann können sie pushen. Sie würden solchen Zugriff Personen einräumen, denen Sie vertrauen.

Also, wenn Sie kein Collaborator sind und versuchen zu pushen, erhalten Sie einen Fehler, der anzeigt, dass Sie keine Berechtigung haben.


Wie können also andere Entwickler in ein Repo pushen, für das sie keine Berechtigung zum Pushen haben?
Sie können nicht jedem Zugriff geben, möchten aber anderen eine Möglichkeit/einen Einstieg geben, damit sie 'eine Anfrage an den Repo-Besitzer stellen können, um diesen Code in das Repo zu pullen'. Ganz einfach gesagt, indem sie das Repo zugänglich machen, können sie es forken... ihre Änderungen in ihrem eigenen Fork machen. Ihre Änderungen in ihren eigenen Fork pushen. Sobald es in ihrem eigenen Remote-Repo ist:

Sie stellen eine Pull-Anfrage von ihrem Fork aus und der Besitzer des Upstream-Repo (für den Sie nicht direkt pushen können) wird entscheiden, ob er die Pull-Anfrage zusammenführen möchte oder nicht.


Um es aus einem anderen Blickwinkel zu erklären:

Pushing ist für Dinge, für die Sie normalerweise keine Genehmigung benötigen, z.B. Sie können immer auf einen Feature-Zweig pushen, den Sie selbst erstellt haben und an den Sie commitet haben.

Während Sie zwischen zwei von Ihnen erstellten Branches einen Pull-Request erstellen und darauf pushen können. Das machen Sie fast nie.

Ich habe das allerdings gemacht, als ich an einem großen Feature gearbeitet habe und bereits Genehmigungen für meinen Pull-Request hatte, aber eine knifflige Änderung gemacht werden musste, also habe ich einen PR gegen meinen vorhandenen Branch erstellt.

Wenn Sie dann eine Genehmigung benötigen, möchten Sie nicht pushen. Sie möchten, dass andere:

  1. Ihren Branch überprüfen
  2. Ihnen Genehmigungen geben
  3. Ihren Branch holen
  4. Ihn mit Master zusammenführen

(3+4 = git pull)


Übrigens könnte man fragen, warum es nicht als 'Merge Request' bezeichnet wird?!

Die beste Antwort, die ich gefunden habe, ist, dass, wenn Sie direkt in den Hauptzweig committen — ohne jemals mehrere Feature-Branches zu haben, dann haben Sie nie Merge-Commits (zwei Eltern, die ein Kind bilden). Alle Commits sind nur neue Commits zum Vorherigen. Daher würde der Name 'Merge-Commit' nicht zutreffen.


Auch eine halbwegs verwandte Frage, die ich empfehle zu lesen Was genau passiert bei einem Git-Push? Warum wird ein Git-Push nicht einfach wie ein Git-Merge betrachtet?

43voto

hepidad Punkte 1650

Pull-Anfrage: Ich bitte dich, meine Anfrage zu pullen.

11voto

jimmymathews Punkte 149

Ich befürchte, dass die meisten dieser Antworten die Frage Was bedeutet 'Pull-Anforderung'? oder Was würde 'Push-Anforderung' bedeuten? behandeln, anstatt die Frage des Fragestellers zu beantworten: Warum wird es als Pull-Anforderung und nicht als Push-Anforderung bezeichnet?

Normalerweise ist diese Art von Frageersetzung akzeptabel, aber in diesem Fall ist es klar, dass der Fragesteller die Antworten auf diese Ersatzfragen bereits kennt, sodass es nicht besonders hilfreich ist, sie zu beantworten.

Nur die Leute bei GitHub, die den Begriff geprägt haben, wissen es genau. Es scheint jedoch offensichtlich, dass diese terminologische Wahl etwas wie folgende Ansicht über das Phänomen "Änderungen, die von außen in ein Repository eintreten", widerspiegelt: Der Verwalter führt die Aktion aus (pull).

Allerdings ist eine Anforderung auch eine Aktion, und der Handelnde dieser Aktion ist nicht der Verwalter, sondern der Einreicher (der sogar noch mehr Aktionen ausgeführt hat, nämlich Arbeit). Somit führt der Begriff 'Pull-Anforderung' zu Verwirrung darüber, wer der Handelnde ist. Letztendlich entsteht die Verwirrung aufgrund der rekursiven Natur einer Anforderung: Eine Anforderung ist sowohl eine Aktion eines primären Handelnden als auch eine Anforderung an eine zukünftige Aktion durch einen zweiten Handelnden.

Die Situation ist ziemlich analog zu jetzt üblichen sprachlichen Konstruktionen wie "wir haben unser Haus gebaut" (verwendet anstelle von "wir haben jemand anderen bezahlt, um unser Haus zu bauen"), insofern die Verantwortung für die primäre Aktion von dem offensichtlichen ursprünglichen Handelnden auf einen sekundären Handelnden verschoben wird, der eine verwaltende soziale Rolle erfüllt.

Man könnte daraus den Schluss ziehen, dass der Grund für die terminologische Wahl die Legitimierung der Ansicht ist, dass verwaltende Arbeit erstklassige Arbeit ist. Darüber hinaus könnte der Grund für Verwirrung hinsichtlich dieser terminologischen Wahl darin liegen, dass Nicht-Verwalter eine natürlicherweise andere Sichtweise haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X