Upload via Gerrit
*****************

Zunaechst sei einmal auf die Manpage Git workflow verwiesen.


Upload / Push ohne Review
=========================

Ihr folgt dem Git workflow einfach vollstaendig. Eure Aenderungen
werden direkt in die aktive Mudlib uebertragen.


Upload / Push mit Review
========================

Folgt dem Git workflow bis Schritt 4 (einschliesslich). Ab dort gehts
wie folgt weiter:

   5. Pusht eure Aenderungen zum Review nach Gerrit: "git push origin
      lokalerbranch:refs/for/master" Damit werden eure Aenderungen des
      Zweigs lokalerbranch in den Review fuer den master-Zweig im MG
      uebertragen. Fuer jeden Commit wird ein Change in Gerrit
      erzeugt. Ihr bekommt in der Ausgabe auch die URL zum Change, den
      ihr erzeugt habt. Anschliessend tragt ihr entweder dort auf der
      Weboberflaeche einen oder mehrere Reviewer ein oder redet mit
      denjenigen im Mud.

   6. Die Reviewerin hat oft Wuensche, d.h. ihr muesste den Change
      nochmal ueberarbeiten. Dazu gibt es zwei Moeglichkeiten:

      1. Ihr aendert auf der Weboberflaeche selber ("Edit" und spaeter
         dann "Publish Edit"

      2. Wollt ihr bei euch lokal auf dem Rechner nur einen (den
         letzten Commit in eurem lokalen Zweig) aendern geht das am
         besten mit "git commit --amend". Spaetestens nach dieser
         Aenderungen **muss** in der Commit-Message die sog. Change-ID
         aus Gerrit als *letzte Zeile* und mit einer Leerzeile
         getrennt auftauchen, z.B. "Change-Id:
         Ie8fe15834a0eb3917318dc291b97a28e34b85b75". Anschliessend
         koennt ihr wie in Schritt 4. erneut pushen und der Change in
         Gerrit wird aktualisiert.

      3. Wollt ihr mehrere Commits bei euch lokal auf dem Rechner
         aendern, muesst in eurem lokalen Zweig ein sog. interaktives
         rebase machen und in diesem dann eure Commits editieren.
         Wechselt in euren lokalen Zweig und benutzt "git rebase -i
         master" (dies bedeutet "setze diesen Zweig neu auf den master
         auf und lass mich dabei Aenderungen vornehmen"). Spaetestens
         hierbei **muss** in allen Commit-Messages die zu diesem
         Commit passende Change-ID aus Gerrit als *letzte Zeile* und
         mit einer Leerzeile getrennt auftauchen. Anschliessend koennt
         ihr wie in Schritt 4. erneut pushen und alle Changes in
         Gerrit werden aktualisiert.

   7. Wenn die Reviewerin zufrieden ist, wird sie den Change in den
      Zweig 'master' mergen und er landet damit im MG.


Weitere Infos
=============

Es gibt noch viele weitere Informationen, wie man Aenderungen in
Gerrit bekommt (z.B. kann man direkt mit dem ersten Push automatisiert
Reviewer fuer alle Changes festlegen, Topics und Hashtags zur
Kategorisierung verwenden). Es ist empfehlenswert, in die Doku von
Gerrit zu schauen:

   * https://mg.mud.de/gerrit/Documentation/user-upload.html

   * https://mg.mud.de/gerrit/Documentation/user-
     upload.html#push_create

   * https://mg.mud.de/gerrit/Documentation/user-
     upload.html#push_replace

Mehr Informationen ueber die Change-ID bekommt ihr hier:
https://mg.mud.de/gerrit/Documentation/user-changeid.html

Ihr koennt git auch beibringen, dass in alle eure Commit-Messages die
sog. Change-ID automatisch ergaenzt wird, in dem ihr einen 'commit-
msg' hook aus Gerrit in euerem Repository installiert: "scp -p -P
29418 <user>@mg.mud.de:hooks/commit-msg .git/hooks/" Details bekommt
ihr hier: https://mg.mud.de/gerrit/Documentation/user-
changeid.html#creation

Die Doku geht auch auf haeufige Taetigkeiten im Zusammenhang mit dem
Upload von Aenderungen ein: https://mg.mud.de/gerrit/Documentation
/user-changeid.html#_git_tasks


Siehe auch
==========

   * gerrit

   * Doku von Gerrit:

     * https://mg.mud.de/gerrit/Documentation/intro-user.html

     * https://mg.mud.de/gerrit/Documentation/index.html#_tutorials

   * git-howto: Wie git benutzt wird

   * git-workflow: Wie man sinnvoll vorgehen kann beim Entwickeln

   * git-kooperation: Ein ueber git-workflow hinausgehendes Beispiel
     zur Synchronisation bzw Kooperation mehrerer Magier/Rechner

   * gerrit-sync: Wie die Synchronisierung zw. git-Repos und Mudlib
     ablaeuft

   * git-faq: haeufig gestellte Fragen/Probleme
