Um das Zusammenspiel zwischen Git und Gerrit zu vereinfachen gibt es die Erweiterung git-review. Leider ist die Dokumentation im Netz nicht besonders ausführlich und die man page schlicht fehlerhaft. So kommt es immer wieder einmal zu Missverständnissen. Insbesondere die sehr praktische Datei .gitreview scheint weitgehend unbekannt zu sein. Aber das lässt sich ändern 🙂
git-review macht immer ein rebase -i
Häufig wird übersehen, dass git-review vor dem push automatisch ein rebase -i auf den aktuellen remote master (bzw. den target branch) durchführt. Zusammen mit einem merge commit führt das unweigerlich zu Ärger. Lokale merges sind zwar meiner Meinung ohnehin falsch und darüber hinaus bei Verwendung von gerrit ohne das entsprechende Recht nicht erlaubt – aber das mag jedes Team für sich entscheiden. Spätestens beim Versuch einen merge commit zu squashen knallt es jedenfalls. Abhilfe hiervon schafft der Parameter ‚-R‘ also git review -R statt git review . git-review macht dann kein rebase und pusht (nach einer Nachfrage, ob das denn so wirklich gewollt sei) alle offenen commits zu gerrit. Wen die Nachfrage stört kann das mit –yes oder -y umgehen.
git-review braucht kein remote namens gerrit
In fast allen Projekten, die mit Gerrit und git-review arbeiten findet man die folgende Konfiguration:
> git remote -v origin ssh://user@gerrit.flavia-it.de:29418/Project (fetch) origin ssh://user@gerrit.flavia-it.de:29418/Project (push) gerrit ssh://user@gerrit.flavia-it.de:29418/Project (fetch) gerrit ssh://user@gerrit.flavia-it.de:29418/Project (push)
In der Regel wird erst das Projekt geklont und dann ein redundantes remote namens ‚gerrit‘ hinzugefügt. Das liegt daran, dass git-review erstmal davon ausgeht, dass es ein remote mit diesem Namen gibt. Es gibt mindestens drei Möglichkeiten es besser zu machen.
- Bei jedem Aufruf über den Schalter ‚-r‘ ein anderes remote angeben. Also git review -r origin -R
- Statt mit git remote add gerrit ssh://user@gerrit.flavia-it.de:29418/Project das remote doppelt anzulegen kann man es einfach mittels git remote rename origin gerrit umbenennen.
- Man ändert das default remote. Das geht? Ja, das geht.
.gitreview
Die ganze Geschichte kann man sich sehr viel leichter machen, wenn man im Wurzelverzeichnes seines Repositories eine Datei namens ‚.gitreview‘ anlegt. Soweit ich es in Erfahrung bringen konnte können dort sechs Werte definiert werden:
[gerrit] host=gerrit.flavia-it.de port=29418 project=Project.git defaultbranch=master defaultremote=origin defaultrebase=0
Ob das mit dem project so funktioniert habe ich im Übrigen nicht ausprobiert. Die ersten drei Einträge ergeben sich ja eigentlich über das remote und ich habe sie noch nicht verwendet. Die letzten beiden (defaultremote und defaultrebase) sind hingegen wirklich hilfreich und ersparen einem den ganzen oben beschriebenen overhead.
Ich hoffe, das hilft dem Einen oder der Anderen weiter!
Eine Antwort