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:
- Ihren Branch überprüfen
- Ihnen Genehmigungen geben
- Ihren Branch holen
- 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?