Gerrit/Anleitung
Diese Anleitung erklärt, wie man Git installiert und es verwendet, um Änderungsanfragen in Gerrit zu erstellen und zu bearbeiten.
- Für Referenzdokumentation zu bestimmten Aufgaben siehe stattdessen Gerrit/Fortgeschrittene Verwendung.
- Wenn du den Umgang mit Gerrit üben möchtest, ohne einen Patch für ein "echtes" Wikimedia-Softwareprojekt zu schreiben, nutze stattdessen unsere Gerrit-Testinstanz.
In dieser Anleitung beginnen die einzugebenden Befehle mit einem Dollarzeichen in einem Kästchen, etwa so: befehl.
Gib nicht das Präfix $ ein.
Wenn ein Befehl auch eine Variable enthält, die du selbst ändern musst, wird diese Variable rot dargestellt: befehl variable.
Was ist Git?
Git ist ein freies und quelloffenes System zur Verwaltung von verteilten Softwareversionen. "Verteilt" in diesen Fall heißt, dass es keine zentrale Kopie des Repositoriums gibt. Sobald du das Repositorium mit Git geklont hast, verfügst du über eine voll funktionsfähige Kopie des Quellcodes, bei der dir sämtliche Branches und getaggte Releases zur Verfügung stehen.
Ein Wikimedia-Entwicklerkonto erstellen
Falls du noch kein Wikimedia-Entwicklerkonto besitzt, erstelle ein Konto. Derselbe Benutzername und dasselbe Passwort werden verwendet, um sich unten bei Gerrit anzumelden.
Git einrichten
Diese Anweisungen erklären, wie du Git als Befehlszeilenwerkzeug (Terminalfenster) installierst. Wenn du eine grafische Benutzeroberfläche (GUI) der Befehlszeile vorziehst, wirf einen Blick auf die Liste der vom Git-Projekt gepflegten Clients. Für alternative Installationsanweisungen siehe die offizielle Dokumentation.
Installation
Befolge Installing Git, um zu erfahren, wie du Git auf deinem Betriebssystem installierst.
Git konfigurieren
git config -l aus.Nachdem du Git installiert hast, ist es Zeit, deine persönlichen Daten zu konfigurieren. Du solltest es nur einmal tun müssen. Du kannst deine persönlichen Daten auch jederzeit ändern, indem du diese Befehle erneut ausführst.
Git verfolgt, wer den jeweiligen Commit vornimmt, indem es den Namen und die E-Mail-Adresse des Benutzers überprüft. Darüber hinaus werden diese Informationen verwendet, um deine Commits mit deinem Gerrit-Konto zu verknüpfen.
Gib die folgenden Befehle ein und ersetze dabei die Platzhalter nach Bedarf:
gerrituser@example.com– Deine eigene E-Mail-Adresse.My Name– Der Name, den Git als Autor deiner Commits speichert. Dies muss nicht mit dem Benutzernamen deines Wikimedia-Entwicklerkontos übereinstimmen.shell_user– Der Shell-Benutzername, den du bei der Erstellung deines Wikimedia-Entwicklerkontos gewählt hast.Gerrituser– Der Benutzername deines Wikimedia-Entwicklerkontos (dieser war früher als "Wikitech"-, "Gerrit"- oder "LDAP"-Benutzername bekannt; dabei handelt es sich um ein und denselben Namen).
git config --global user.email "gerrituser@example.com"
git config --global user.name "My Name"
git config --global url."ssh://shell_user@gerrit.wikimedia.org:29418/".insteadOf "https://gerrit.wikimedia.org/r/"
git config --global gitreview.remote origin
git config --global gitreview.username Gerrituser
Einrichten von SSH-Schlüssel in Gerrit
Wir verwenden einen SSH-Schlüssel, um eine sichere Verbindung zwischen deinem Computer und Gerrit herzustellen.
Das Wikimedia-Sicherheitsteam empfiehlt Stand August 2021 Nutzern, die SSH-Schlüssel erstellen, den Typ ed25519 für optimale Sicherheit und Leistung zu verwenden.
Einen SSH-Schlüssel erhalten
Befolge SSH-Schlüssel#Einen neuen SSH-Schlüssel generieren.
Öffentlichen SSH-Schlüssel zu deinem Gerrit-Konto hinzufügen
- Melde dich auf der Weboberfläche für Gerrit an. Der Benutzername und das Passwort für dein Gerrit sind dieselben wie für dein Wikimedia-Entwicklerkonto.
- Klicke oben rechts auf deinen Benutzernamen und wähle dann "Settings".
- Klicke im Menü auf der linken Seite auf "SSH Keys".
- Füge deinen öffentlichen SSH-Schlüssel in das entsprechende Feld ein und klicke auf "ADD NEW SSH KEY".
Bitte beachte, dass du deinen SSH-Schlüssel in der Gerrit-Weboberfläche unter gerrit.wikimedia.org hinterlegen musst, auch wenn du diesen bereits im Cloud VPS / Toolforge Identitätsmanager unter idm.wikimedia.org hinzugefügt hast. Diese Systeme sind voneinander unabhängig und tauschen keine SSH-Schlüssel aus.
Gerrit-SSH-Verbindung prüfen
Verbinde dich über ssh mit dem Gerrit-Server, um zu überprüfen, ob alles wie erwartet funktioniert.
Ersetze shell_user durch deinen Shell-Benutzernamen, wie in deinen Gerrit-Einstellungen angegeben:
ssh -p 29418 shell_user@gerrit.wikimedia.org
- Achte darauf und vergleiche, ob der "key fingerprint" mit dem SSH-Fingerprint für gerrit.wikimedia.org:29418 übereinstimmt. Wenn er übereinstimmt, antworte mit "Yes" auf die Frage "Are you sure you want to continue connecting?". Gib dann die Passphrase für deinen Schlüssel ein.
- Du solltest eine Nachricht mit dem Inhalt "Welcome to Gerrit Code Review" erhalten. Die letzte Zeile sollte "Connection to gerrit.wikimedia.org closed" anzeigen.
- Falls Probleme auftreten, verwende
ssh -p 29418 -v shell_user@gerrit.wikimedia.org(ersetzeshell_userdurch deinen Shell-Benutzernamen).-vliefert ausführliche Ausgaben, um bei der Fehlersuche zu helfen. Lies dann Gerrit-Fehlerbehebung.
Eine Beispielmeldung für eine erfolgreiche Gerrit-SSH-Verbindung sieht folgendermaßen aus:
gerrituser@machine:~$ ssh -p 29418 gerrituser@gerrit.wikimedia.org The authenticity of host '[gerrit.wikimedia.org]:29418 ([208.80.154.225]:29418)' can't be established. ED25519 key fingerprint is SHA256:njCmWMsshq3MqQxyIFO36UNwCwzTamXERqylF1XJhd8. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '[gerrit.wikimedia.org]:29418' (ED25519) to the list of known hosts. Enter passphrase for key '/home/gerrituser/.ssh/id_ed25519': **** Welcome to Gerrit Code Review **** Hi gerrituser, you have successfully connected over SSH. Unfortunately, interactive shells are disabled. To clone a hosted Git repository, use: git clone ssh://gerrituser@gerrit.wikimedia.org:29418/REPOSITORY_NAME.git Connection to gerrit.wikimedia.org closed. gerrituser@machine:~$
Den Code mit Git herunterladen
Sandbox
Wenn du den Umgang mit Gerrit üben möchtest, kannst du das in diesem Tutorial verwendete Repository namens "sandbox" herunterladen (auch "Klonen" genannt).
Führe Folgendes in der Git-Bash-Befehlszeile aus:
git clone https://gerrit.wikimedia.org/r/sandbox
Dadurch werden die gesamte Historie und die Codebasis des Erweiterungs-Repositorys "sandbox" auf deinen Rechner kopiert.
Du verfügst über ein Arbeitsverzeichnis des Hauptzweigs der Erweiterung (üblicherweise ebenfalls "git master" genannt).
Wechsel in das neue Verzeichnis (über den Befehl cd sandbox).
Jetzt kannst du dir den Code ansehen und mit der Bearbeitung beginnen.
Vorhandene Repositorys
Das Klonen des Sandbox-Repositorys liefert dir weder eine Einrichtung der Entwicklungsumgebung noch eine laufende MediaWiki-Installation. (Zum Ausführen wird MediaWiki Core benötigt. Außerdem muss der ausgewählte Code an einem vom Webserver erwarteten Ort abgelegt werden.) Siehe Herunterladen von Git für Informationen zum Herunterladen von MediaWiki Core, Erweiterungen, Skins oder jedem anderen auf gerrit.wikimedia.org von Git gehosteten Projekt-Repository.
Vagrant
Wenn du MediaWiki oder Erweiterungen mithilfe von Vagrant heruntergeladen hast, stelle sicher, dass du Git so konfiguriert hast, dass Code per SSH statt per HTTPS übertragen wird.
Auf die Arbeit mit Gerrit vorbereiten
Gerrit verlangt, dass deine Commit-Nachricht eine "Change-ID" enthält.
Sie sehen aus wie Change-Id: Ibd3be19ed1a23c8638144b4a1d32f544ca1b5f97, beginnend mit einem I (großes I).
Jedes Mal, wenn du einen Commit änderst, um einen bestehenden Patch in Gerrit zu verbessern, bleibt die Change-ID gleich, sodass Gerrit dies als neuen "Patch-Satz" für dieselbe Codeänderung erkennt.
Es gibt ein Git-Add-on namens git-review, das deinen Commits eine Zeile Change-Id hinzufügt.
Die Verwendung von git-review wird empfohlen.
Es erleichtert das Konfigurieren deines Git-Klons, das Einreichen einer Änderung oder das Abrufen einer vorhandenen Änderung.
git-review installieren
Für weitere Details siehe bitte Gerrit/git-review#Installation.
- Verwende das grafische Paketverwaltungswerkzeug deiner Linux-Distribution, um das Paket
git-reviewzu installieren. - Falls git-review nicht von deiner Distribution als Paket bereitgestellt wird, informiere dich unter git-review über weitere Möglichkeiten, wie etwa die Installation von git-review mithilfe des Python-Paketinstallationsprogramms pip.
- Wenn du FreeBSD verwendest, installiere git-review über Ports.
- Siehe bitte git-review Windows.
- Für OS X 10.11 El Capitan und neuer folge Methode 1.
- Verwende bei Versionen vor 10.11 das Python-Paketinstallationsprogramm pip, indem du Methode 2 befolgst.
git-review einrichten
Nach dem Herunterladen ("Klonen") eines Repositorys musst du es für git-review einrichten. Dies geschieht automatisch, wenn du zum ersten Mal versuchst, einen Commit zu übermitteln, es ist jedoch im Allgemeinen besser, dies direkt nach dem Klonen zu erledigen. Stelle sicher, dass du dich im Verzeichnis des Projekts befindest, das du geklont hast (andernfalls erhältst du die Fehlermeldung "fatal: Not a git repository"). Führe dann diesen Befehl aus:
git review -s --verbose
Gegen Ende der Ausgabe solltest du etwas Ähnliches wie das Folgende sehen:
Found origin Push URL: ssh://gerrit.wikimedia.org:29418/PROJECT Fetching commit hook from: scp://gerrit.wikimedia.org:29418/hooks/commit-msg 2019-02-19 12:40:16.712892 Running: scp -P29418 gerrit.wikimedia.org:hooks/commit-msg .git/hooks/commit-msg
Oder etwas Ähnliches wie dies, wenn du eine neuere Version von git-review verwendest:
2026-03-30 17:56:53.619450 Running: git config --get gitreview.remote 2026-03-30 17:56:53.622637 ... gitreview.remote = origin 2026-03-30 17:56:53.622659 Config['remote'] = origin 2026-03-30 17:56:53.622668 Running: git config --get gitreview.branchauthor 2026-03-30 17:56:53.626113 Config['branchauthor'] = name 2026-03-30 17:56:53.626151 Running: git config --get gitreview.scheme 2026-03-30 17:56:53.629775 Config['scheme'] = ssh 2026-03-30 17:56:53.629810 Running: git config --get gitreview.hostname 2026-03-30 17:56:53.633082 Config['hostname'] = gerrit.wikimedia.org 2026-03-30 17:56:53.633108 Running: git config --get gitreview.port 2026-03-30 17:56:53.636436 Config['port'] = 29418 2026-03-30 17:56:53.636460 Running: git config --get gitreview.project 2026-03-30 17:56:53.639754 Config['project'] = operations/mediawiki-config.git 2026-03-30 17:56:53.639779 Running: git log --color=never --oneline HEAD^1..HEAD 2026-03-30 17:56:53.646336 Running: git remote 2026-03-30 17:56:53.651991 Running: git branch -a --color=never 2026-03-30 17:56:53.660199 Running: git rev-parse --show-toplevel --git-dir 2026-03-30 17:56:53.667223 Running: git config --get core.hooksPath 2026-03-30 17:56:53.672381 Running: git config --get core.hooksPath 2026-03-30 17:56:53.679571 Running: git submodule foreach cp -p .git/hooks/commit-msg "$(git rev-parse --git-dir)/hooks/"
Möglicherweise wirst du nach deinem Git-Benutzernamen gefragt, falls dieser von dem Shell-Benutzernamen abweicht, den du verwendest.
git-review nicht installieren konntest, kannst du den Gerrit-Patch-Uploader oder Gerrit/Web-Tutorial verwenden, um einen Patch einzureichen.Standardmäßig verwendet git-review den Branch master.
Wenn das Repository, an dem du arbeitest, einen anderen Branch verwendet, z. B. main, musst du die Konfigurationsvariable gitreview.branch setzen.
Dies kann mit dem folgenden Befehl erfolgen (wobei main der Name des Branches ist):
git config --add gitreview.branch main
Einen Patch einreichen
Stelle sicher, dass du das gewünschte Code-Repository geklont hast (siehe Den Code mit Git herunterladen oben).
Stelle sicher, dass du dich im Verzeichnis des Code-Repositorys befindest (der Befehl pwd zeigt dir an, wo genau du dich befindest).
Den Hauptentwicklungsbranch aktualisieren
Stelle sicher, dass der Hauptentwicklungsbranch (der Branch, der beim Klonen des Repositorys erstellt wurde) auf dem neuesten Stand ist:
git pull origin master
Beachte jedoch, dass einige Repositorys einen anderen Namen für ihren Hauptentwicklungsbranch verwenden (zum Beispiel main statt master, oder das Repository operations/puppet hat einen production- statt eines master-Branchs).
Einen Branch erstellen
Erstelle zunächst einen lokalen Branch für deine neue Änderung.
Ersetze branch-name unten durch einen kurzen, aber aussagekräftigen Namen (z. B. T1234, falls ein entsprechender Phabricator-Task für deine Änderungen existiert, cleanup-something oder badtitle-error).
Auch andere Personen werden diesen Namen verwenden, um deinen Branch zu identifizieren.
git checkout -b branch-name origin/master
gerrituser@example:~/dev/mw$ git checkout -b cleanup-something origin/master # Switched to a new branch 'cleanup-something' gerrituser@example:~/dev/mw$ git branch * cleanup-something master
Dadurch wird ein neuer Branch (namens branch-name) auf Basis des aktuellen 'master' erstellt und für dich geprüft.
Im obigen Beispiel haben wir diesen neuen Branch cleanup-something genannt.
Mache deine Änderungen
Mache Änderungen zu deinen lokalen Code.
Verwende deinen bevorzugten Texteditor und bearbeite eine Datei.
Im Beispiel unten bearbeiten wir die Datei README.md und fügen ein Wort hinzu.
Schließe anschließend deinen Texteditor und überprüfe die Änderungen, die du seit dem letzten Commit an der/den Datei(en) sowie im Verzeichnis vorgenommen hast:
git diff
gerrituser@machine:/mw/sandbox$ git diff diff --git a/README.md b/README.md index 1d25b27..bc54021 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Hello world! -You can make test changes and experiment with Gerrit in this repository! +You can make test changes and experiment with Wikimedia Gerrit in this repository! Don't worry about messing this repository up; it is meant for testing. gerrituser@machine:/mw/examples$
git diff zeigt deine Änderungen im vereinheitlichten Diff-Format an: Entfernte Zeilen sind mit einem Minus (-) und hinzugefügte Zeilen mit einem Plus (+) gekennzeichnet.
Diese Änderungen sind noch nicht für den nächsten Commit "bereitgestellt" (über git add).
Bereite deine Änderungen für einen Commit vor
Führe git status aus, um zu entscheiden, welche deiner Änderungen Teil deines Commits werden sollen.
Es wird eine Liste aller Dateien angezeigt, die du innerhalb des Verzeichnisses geändert hast.
An dieser Stelle wird in der letzten Zeile der Ausgabe "no changes added to commit" angezeigt.
Verwende git add, um deine geänderte(n) Datei(en) Teil deines nächsten Commits werden zu lassen.
Im obigen Beispiel haben wir die Datei README.md geändert, daher würde der Befehl wie folgt lauten:
git add README.md
Alle von dir geänderten Dateien, die du nicht an git add übergeben hast, werden beim Ausführen von git commit im nächsten Schritt ignoriert.
git status überprüfen.
Nachdem du git add ausgeführt hast, wird git status die Zeile "no changes added to commit" nicht mehr anzeigen.git diff --cached verwenden, um zu sehen, welche Änderungen für den nächsten Commit bereitgestellt sind.
Die Ausgabe sieht genauso aus wie bei dem oben genannten Befehl git diff.
Übertrage deine bereitgestellten Änderungen
Sobald du mit der Liste der über git add hinzugefügten Änderungen zufrieden bist, kannst du diese Änderungen in einen Commit in dein lokales Repository umwandeln, durch Verwendung von
git commit
Short subject line More details. The blank line between the subject and body is mandatory. The subject line is used to represent the commit in code-review emails, search results, git-rebase, and more. Bug: T999999 # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # On branch cleanup-something # Your branch is up to date with 'origin/master'. # # Changes to be committed: # modified: README.md
Anschließend wirst du in deinem Texteditor aufgefordert, eine aussagekräftige Zusammenfassung für deinen Commit hinzuzufügen. Du musst die Richtlinien für Commit-Nachrichten befolgen. Das ist das, was andere sehen werden, wenn sie sich den Änderungsverlauf im Code-Repository ansehen.
Speichere die Commit-Nachricht und schließe deinen Texteditor. Es wird eine Zusammenfassung angezeigt (die Commit-ID, deine Betreffzeile sowie die geänderten Dateien und Zeilen).
Wenn du git commit ausführst, überträgst du zu deiner lokalen Kopie.
Deinen Commit für das Pushen zu Gerrit vorbereiten
Synchronisiere deinen Änderungssatz mit allen Änderungen, die während deiner Arbeit im Master-Branch aufgetreten sein könnten ("Rebasing"). Führe innerhalb deines Branches Folgendes aus:
git pull --rebase origin master
gerrituser@machine:/mw/sandbox$ git pull --rebase origin master From ssh://gerrit.wikimedia.org:29418/sandbox * branch master -> FETCH_HEAD Current branch cleanup-something is up to date. gerrituser@machine:/mw/sandbox$
git pull --rebase origin master ruft neue Commits vom Remote-Repository ab und führt anschließend ein Rebase deiner lokalen Commits darauf durch.
Dadurch werden die in deinem Branch vorgenommenen Änderungen vorübergehend beiseitegelegt, alle im Master-Branch erfolgten Änderungen auf deinen Arbeits-Branch angewendet und anschließend alle deine eigenen Änderungen wieder in den Branch integriert (erneut committet). Dies trägt dazu bei, künftige Merge-Konflikte zu vermeiden.
Außerdem bietet es dir die Möglichkeit, deine Änderungen gegen den aktuellen Code im Master-Branch zu testen.Jetzt bist du bereit, deinen Code für das Review an Gerrit zu übertragen. Wenn du mehrere zusammengehörige Commits erstellt hast, ziehe in Betracht, diese für das Review zu einem einzigen Commit zusammenzuführen.
Deinen Commit zu Gerrit pushen
Wenn du #Auf die Arbeit mit Gerrit vorbereiten oben befolgt und git-review installiert und git review -s ausgeführt hast, lautet der Befehl zum Pushen von Änderungen an Gerrit:
git review
gerrituser@machine:/mw/sandbox$ git review Creating a git remote called 'gerrit' that maps to: ssh://gerrit.wikimedia.org:29418/sandbox.git Your change was committed before the commit hook was installed. Amending the commit to add a gerrit change id. remote: remote: Processing changes: new: 1, done remote: remote: New Changes: remote: https://gerrit.wikimedia.org/r/#/c/sandbox/+/563720 Test for https://www.mediawiki.org/wiki/Gerrit/Tutorial remote: To ssh://gerrit.wikimedia.org:29418/sandbox.git * [new branch] HEAD -> refs/for/master%topic=cleanup-something gerrituser@machine:/mw/examples$
Bei Erfolg erhältst du eine Bestätigung sowie einen Link zum Änderungssatz in Gerrit. Im obigen Beispiel lautet dieser Link: https://gerrit.wikimedia.org/r/#/c/sandbox/+/563720
Herzlichen Glückwunsch! Dein Patch ist in Gerrit und wird hoffentlich bald geprüft!
<span id="If_git review_fails">
Wenn git review fehlschlägt
Wenn du beim Ausführen von git review aufgefordert wirst, deinen Benutzernamen und dein Passwort einzugeben, bedeutet dies, dass Git noch nicht für die Verwendung von SSH konfiguriert wurde.
Prüfe die Schritte unter #Git einrichten. Führe insbesondere den folgenden Befehl aus:
git config --global url."ssh://shell_user@gerrit.wikimedia.org:29418/".insteadOf "https://gerrit.wikimedia.org/r/"
Du kannst ihn ruhig noch einmal ausführen, wenn du dir nicht sicher bist, ob du es schon getan hast.
Ersetze shell_user durch den Shell-Benutzernamen deines Wikimedia-Entwicklerkontos.
Wenn du Permission denied (publickey). fatal: Could not read from remote repository. erhältst, überprüfe die Anweisungen unter SSH-Schlüssel, um sicherzustellen, dass dein SSH-Agent läuft und deine Identität hinzugefügt wurde. Wenn du deine Git-Bash-Shell schließt, wirst du abgemeldet und musst diese Schritte jedes Mal erneut ausführen.
Änderung anzeigen / Nächste Schritte
Öffne den Link zu deinem Gerrit-Änderungssatz in einem Webbrowser.
Unter "Files" kannst du, nachdem du auf den Pfeil nach unten ganz rechts neben einer beliebigen Datei in der Liste geklickt hast, einen Vergleich deiner Änderungen für die jeweilige Datei sehen: Die alten Zeilen werden rot und die neuen Zeilen grün angezeigt.
Wenn sich dein Commit auf ein Ticket im Phabricator bezieht, wird automatisch ein Kommentar zum Phabricator-Task hinzugefügt, sofern du die Richtlinien für Commit-Nachrichten befolgt hast. Falls du das nicht getan hast, kannst du entweder deine Commit-Nachricht korrigieren (indem du einen aktualisierten Patchsatz erstellst) oder manuell einen Kommentar zu dem Phabricator-Ticket hinzufügen, der einen Link zu deinem Änderungssatz in Gerrit enthält.
Nachdem dein Code bei Gerrit eingereicht wurde, kannst du mithilfe von Patch Demo eine Live-Demo deiner Änderungen erstellen und diese mit den Reviewern teilen. Das Erstellen einer Live-Demo ist ein optionaler Schritt.
Weitere häufige Situationen
Siehe auch Gerrit/Fortgeschrittene Verwendung, falls dein Fall hier nicht abgedeckt ist.
Mehrere Commits per Rebase zu einem einzigen Commit zusammenfassen
Wenn du mehrere zusammengehörige Commits in deinem lokalen Repository vorgenommen hast, bevor du sie zur Überprüfung einreichen möchtest, solltest du diese Commits zu einem einzigen Commit zusammenfassen (squashen).
Die Option --interactive oder -i ermöglicht es dir, deine Commit-Historie zu ändern (umzuschreiben).
Für jeden Commit kannst du die Commit-Nachricht bearbeiten und ändern, Dateien hinzufügen oder entfernen sowie andere Änderungen vornehmen.
Zuerst musst du Git mitteilen, wie weit du zurückgehen möchtest, um Daten abzurufen. Um eine Liste aller Änderungen in deinem Branch zu erhalten:
git rebase -i origin/master
Du kannst die angezeigte Liste der letzten Änderungen auch begrenzen. HEAD~3 bedeutet, die letzten drei Commits abzurufen:
git rebase -i HEAD~3
Nachdem du diesen Befehl eingegeben hast, zeigt dein Texteditor deine Commits in umgekehrter Reihenfolge sowie eine Liste der verfügbaren Befehle an:
pick aa8cf1d Adding method customFilterFunctionGetRiskyCountryCodeScore() to GatewayAdapter. pick 38828e2 Adding $wgDonationInterfaceCustomFiltersFunctionsRiskyCountries to donationinterface.php pick be33007 Fix a typo # Rebase 95ccd28..be33007 onto 95ccd28 # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. #
Da wir nur einen einzigen Commit zum Review einreichen wollen, fassen wir die letzten beiden Commits mit dem ersten zusammen.
Ändere daher alle außer dem ersten pick in squash:
pick aa8cf1d Adding method customFilterFunctionGetRiskyCountryCodeScore() to GatewayAdapter. squash 38828e2 Adding $wgDonationInterfaceCustomFiltersFunctionsRiskyCountries to donationinterface.php squash be33007 Fix a typo
Nachdem du die Auswahl und das Squashing abgeschlossen und die Datei gespeichert hast, öffnet sich eine weitere Datei in deinem Texteditor, in der du deine Commit-Nachrichten bearbeiten und zusammenführen kannst.
Achte darauf, nur eine der Change-Id-Zeilen beizubehalten und diese nach einer Leerzeile am Ende der Nachricht zu platzieren.
Die Nachrichten deiner vorherigen Commits werden automatisch in diese Nachricht eingefügt:
# This is a combination of 3 commits. # The first commit's message is: (mingle-fr-2012-69) Adding a custom filter for risky countries. Adding method customFilterFunctionGetRiskyCountryCodeScore() to GatewayAdapter. # This is the 2nd commit message: Adding $wgDonationInterfaceCustomFiltersFunctionsRiskyCountries to donationinterface.php # This is the 3rd commit message: Fix a typo Change-Id: I33e44ec0d93628d9a53c15e08eb89f352b7d5fe0 # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # Not currently on any branch. # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: donationinterface.php # modified: gateway_common/gateway.adapter.php #
Denk daran, deine (aktualisierte) Zusammenfassungsnachricht in den Commit aufzunehmen. In diesem Fall ist die neue Zusammenfassungsnachricht:
(mingle-fr-2012-69) Adding a custom filter for risky countries.
Change-Id du wählst.Wenn alles gut geht, solltest du eine Meldung über einen erfolgreichen Rebase sehen:
[detached HEAD 02f5e63] (mingle-fr-2012-69) Adding a custom filter for risky countries. 2 files changed, 92 insertions(+), 3 deletions(-) Successfully rebased and updated refs/heads/mingle-fr-2012-69.
Reiche anschließend deinen Patch zum Review ein:
git review
Du solltest eine Meldung wie diese sehen, die anzeigt, dass dein Git-Review an Gerrit übermittelt wurde (in diesem Beispiel an https://gerrit.wikimedia.org/r/7187):
remote: Resolving deltas: 100% (4/4) remote: (W) 02f5e63: commit message lines >70 characters; manually wrap lines remote: remote: New Changes: remote: https://gerrit.wikimedia.org/r/7187 remote: To ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/DonationInterface.git * [new branch] HEAD -> refs/for/master/mingle-fr-2012-69
Änderungen anpassen
Manchmal musst du möglicherweise eine bereits eingereichte Änderung anpassen. Du kannst eine Änderung anpassen, solange sie noch nicht zusammengeführt wurde.
Du kannst deine eigenen Änderungen anpassen. Um von jemand anderem eingereichte Änderungen anzupassen, musst du Mitglied der Trusted-Contributors-Gruppe in Gerrit sein. Um Mitglied von Trusted-Contributors zu werden, suche jemanden, der bereits Mitglied ist, und bitte ihn, dich hinzuzufügen. Die Gruppe ist viral, da Mitglieder neue Mitglieder hinzufügen können, nutze deine Befugnisse verantwortungsvoll.
Um eine lokal angepasste Änderung zu bearbeiten, wechsel zunächst zum entsprechenden Branch:
git checkout branch-name
Um eine externe Änderung anzupassen, wähle die Änderung direkt aus:
git review -d changeNumber
... wobei changeNumber das numerische Suffix in der URL deiner Gerrit-Code-Review-Seite ist.
Alternativ akzeptiert git review -d die Change-Id, um eine Änderung auszuwählen.
Nimm Änderungen vor und wende bei Bedarf git add an. Übermittle die Änderung als Anpassung:
git commit --amend
Pushe die Änderung:
git review
Rebasing (Aktualisierung des Patches zur Einbeziehung anderer Änderungen)
Manchmal möchtest du deinen Patch vielleicht aktualisieren, um alle Änderungen einzubeziehen, die seit der Einreichung im Repository vorgenommen wurden. Dies nennt man "Rebasing". Normalerweise ist das nicht erforderlich, außer der Review-Prozess zieht sich in die Länge und du möchtest sicherstellen, dass deine Änderungen auch mit der neuesten Softwareversion funktionieren, oder Gerrit meldet einen Merge-Konflikt bei deiner Änderung.
Du kannst dies lokal mithilfe des Befehls git rebase und der entsprechenden Optionen erledigen, doch die Weboberfläche von Gerrit bietet hierfür eine komfortablere Möglichkeit.
Im einfachsten Fall klicke einfach auf "Rebase", behalten die Standardauswahl "Rebase on top of the master branch" bei und klicke zur Bestätigung erneut auf "Rebase".
Wenn dein Patch einen Merge-Konflikt hat, erhältst du eine Fehlermeldung. Du kannst dann die Option "Allow rebase with conflicts" aktivieren und es erneut versuchen, wodurch dein Patch um Konfliktmarkierungen ergänzt wird, ähnlich denen, die von Git-Befehlen erzeugt werden. Du musst ihn dann selbst anpassen und die Dateien manuell bearbeiten, um die Konflikte zu beheben.
Manchmal möchtest du deinen Patch vielleicht auch aktualisieren, um Änderungen einzubeziehen, die in einem anderen Patch vorgeschlagen wurden (indem du eine Abhängigkeit von diesem Patch hinzufügst), die jedoch noch nicht zusammengeführt wurden. Wähle in diesem Fall stattdessen "Rebase on a specific change, ref, or commit" aus und gib die Änderung im Eingabefeld an.
Wenn dein Patch bereits eine solche Abhängigkeit hat, erhältst du zudem die Option, "Rebase on top of the master branch (breaks relation chain)" zu wählen, um diese zu entfernen. Du erhältst außerdem die Option, "Rebase all ancestors" auszuwählen, wodurch der Patch zusammen mit der Abhängigkeit rebased wird.
Wenn du den Befehl git rebase verwendest, ist es ratsam, Rebase-Aktualisierungen als separaten Patch vorzunehmen, sodass deine Code-Reviewer leichter erkennen können, welche Änderungen von dir stammen und welche aus anderen Patches resultieren.
Fehlerbehebung
Für Probleme und wie man die behebt, siehe Gerrit/Fehlerbehebung.
Siehe auch
Auch nutzvoll sind diese Seiten:
Third party guides to Git
- Video tutorials how to use Git (on Wikimedia Commons)
- Try Git (interactive demo)
- GitMagic A git guide with translations
- Git's website with documentation
- Another useful OpenStack Git guide (if you subtract away GitHub stuff)
- Understanding the Git Workflow by Benjamin Sandofsky
- Using Git in Eclipse