Es geht nicht nur um subjektive und objektive. Es ist auch logisch zu sagen "Ich bitte um das Drücken", wenn tatsächlich dahinter eine Drückoperation liegt.
Der Hauptgrund dafür ist, dass du nicht in das Repo anderer Leute pushen
kannst. Stattdessen musst du sie bitten, deinen Branch zu pullen
.
Warum erlaubt GitHub also nicht, um das pushen
zu bitten? Intuitiv macht dieser Ansatz auch Sinn, wenn die Manager in der Lage sind, meine push
genauso zu akzeptieren oder abzulehnen, wie sie meine Repobitte pullen
können.
Lass uns zuerst auf das pushen
schauen. Sagen wir, es gibt zwei Repos, A und B:
repo A repoB
b c
| |
a a
A und B haben Commit b bzw. c auf Commit a.
Dann pushst
du von A nach B. Es gibt zwei Arten von Ergebnissen.
Das ist nicht das, was du tun möchtest, richtig? Du musst es also anders machen.
Du musst die Konflikte vor einem pushen
beseitigen. Sagen wir, du musst zuerst das Upstream-Repo pullen
und erhältst
repo A repoB
d
|\
b c c
|/ |
a a
Und dann kannst du pushen
.
So sieht ein Push-Anforderungs-System aus: Mitwirkende lösen zuerst die Konflikte und bitten dann um eine push
-Operation, um das Upstream-Repo zu ändern. Vielleicht sieht es jetzt ordentlich aus. Der Manager des Upstream-Repo kann wählen, die Push-Anfrage der Mitwirkenden zu akzeptieren oder abzulehnen. Alles funktioniert.
Allerdings funktioniert es nur , wenn es keine andere Push-Anforderung gibt.
Angenommen, du hast gerade eine Push-Anforderung gestellt, nachdem du den Upstream-Branch gepullt und die Konflikte bearbeitet hast. Du denkst, du bist fertig, aber nein, in der Tat. Du merkst überrascht, dass der Besitzer des Upstream-Repo gerade einen neuen Commit e gemacht hat, als du Codes gepullt hast. Jetzt sieht die Situation so aus:
repo A repoB
d e
|\ |
b c c
|/ |
a a
OK. Jetzt musst du die neuen Commits erneut in dein Repo pullen
und eine neue Push-Anfrage stellen. Und vergiss nicht, dass es neue Codes im Upstream geben könnte... Theoretisch könntest du endlos in einer Schleife stecken bleiben.
Und empirisch betrachtet könntest du schließlich eine gut gemachte Push-Anforderung ohne Konflikte stellen. Glückwunsch, aber es gibt Hunderte von Push-Anforderungen. Wenn der Besitzer zuerst eine andere Push-Anfrage akzeptiert, musst du erneut pullen
und pushen
.
Letztendlich muss eine Beitrag geleistet werden.
- Konflikte beseitigen.
- Branch kombinieren.
Und es muss vom Besitzer gemacht werden. Andernfalls muss der Besitzer:
- Einen neuen Code eines Mitwirkenden genehmigen.
- Die Art des Mitwirkenden zur Konfliktlösung genehmigen.
Aber genau wie das Beispiel könnte es weitere Konflikte geben, wenn der Mitwirkende Konflikte löst.
Also ist die pull
-Operation natürlich die Wahl. Deshalb gibt es eine pull
-Anforderung, aber keine push
-Anforderung.