Ein Pull Request auf einem echten Server
Ein Team hält seinen Code auf einem Server wie Gitea oder GitHub. Niemand ändert den Hauptzweig direkt. Sie pushen einen Branch, öffnen einen Pull Request, und eine Kollegin liest ihn zuerst.
In dieser Lektion machen Sie alles im Gitea des Labs, vom Push bis zum Merge.
Am Ende dieser Lektion
Notiz
Ich kann einen Branch pushen, auf einem Server einen Pull Request öffnen und ihn mergen.
Schlüsselbegriffe
| Begriff | Was er bedeutet |
|---|---|
| Pull Request | eine Bitte, einen Branch zu mergen, mit einer Seite zur Prüfung |
| API | ein Weg, auf dem ein Programm einen Server um etwas bittet |
| Mergebar | lässt sich ohne Konflikt mergen |
| Merge-Commit | ein Commit mit zwei Vorgängern, der zwei Branches verbindet |
| Upstream | der Remote-Branch, mit dem Ihr Branch verknüpft ist |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Der Branch muss zuerst auf den Server
Ein Pull Request braucht den Branch auf dem Server, also pushen Sie ihn. Git kann den Antrag nicht für Sie stellen.
Legen Sie zuerst ein Repository auf Gitea an. Ein Programm kann das über die API tun. Die Option -u von git push verknüpft Ihren Branch mit seinem Zwilling auf dem Remote, dem Upstream. Das Passwort des Labs ist öffentlich, Sie dürfen es hier in eine Adresse schreiben. Tun Sie das nie mit einem echten Passwort.
Ein Repository auf Gitea anlegen
curl -s -o /dev/null -w '%{http_code}\n' -u student:student -H 'Content-Type: application/json' -d '{"name":"buchladen-pruefung","auto_init":true,"default_branch":"main"}' http://gitea:3000/api/v1/user/reposHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Es klonen
git clone http://student:student@gitea:3000/student/buchladen-pruefung.gitHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Einen Branch für die Änderung beginnen
git -C buchladen-pruefung switch -c tee-preisHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Zeile an die README hängen
printf 'Tee kostet ab Montag 2 Euro.\n' >> buchladen-pruefung/README.mdHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Änderung committen
git -C buchladen-pruefung commit -am "Teepreis nennen"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den Branch pushen
git -C buchladen-pruefung push -u origin tee-preisHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den Pull Request öffnen und prüfen
Klicken Sie auf der Seite des Repositorys auf New Pull Request, oder fragen Sie die API, was der Knopf tut. Der Server rechnet dann aus, ob der Branch mergebar ist.
Eine prüfende Person liest den Diff und schreibt Kommentare. Gitea lässt Sie die eigene Änderung nicht freigeben, also kommentieren Sie hier. In einem Team gibt eine Kollegin frei.
Den Pull Request öffnen
curl -s -o /dev/null -w '%{http_code}\n' -u student:student -H 'Content-Type: application/json' -d '{"title":"Teepreis nennen","head":"tee-preis","base":"main","body":"Tee kostet ab Montag 2 Euro."}' http://gitea:3000/api/v1/repos/student/buchladen-pruefung/pullsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Fragen, ob er konfliktfrei mergt
curl -s http://gitea:3000/api/v1/repos/student/buchladen-pruefung/pulls/1 | grep -o '"mergeable":[a-z]*'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Einen Prüfkommentar schreiben
curl -s -o /dev/null -w '%{http_code}\n' -u student:student -H 'Content-Type: application/json' -d '{"body":"Sieht richtig aus."}' http://gitea:3000/api/v1/repos/student/buchladen-pruefung/issues/1/commentsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den Diff wie eine prüfende Person lesen
curl -s http://gitea:3000/api/v1/repos/student/buchladen-pruefung/pulls/1.diffHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Der Merge geschieht auf dem Server
Ist die Prüfung fertig, drückt jemand auf Merge. Der Server legt auf main einen Merge-Commit an. Ihr Rechner weiß davon noch nichts.
Darum führen Sie git fetch aus. Es lädt das Neue herunter, ohne Ihre Dateien zu ändern. Dann lesen Sie den Verlauf von origin/main, der Kopie, die Git vom Branch des Servers hält.
Den Pull Request mergen
curl -s -o /dev/null -w '%{http_code}\n' -u student:student -H 'Content-Type: application/json' -d '{"Do":"merge"}' http://gitea:3000/api/v1/repos/student/buchladen-pruefung/pulls/1/mergeHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Neue herunterladen
git -C buchladen-pruefung fetchHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den Verlauf von main auf dem Server zeichnen
git -C buchladen-pruefung --no-pager log --graph --format=%s origin/mainHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele glauben, der Merge eines Pull Requests ändere die Dateien auf dem eigenen Rechner. Das stimmt nicht. Der Merge geschieht auf dem Server. Mit git fetch sehen Sie ihn. Wechseln Sie dann zu main und führen Sie git pull aus, um den Merge in Ihr eigenes main zu holen.