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.


Editieren per Web-GUI
=====================

In gerrit kann man auch in der Web-GUI editieren:
Repo auswaehlen -> Commands -> Create Change


Upload / Push aus der Shell (fuer Erzmagier+)
=============================================

* Hat man auf der Shell was in den regionen (!= Public Lib) geaendert,
  kann man
  ~/scripts/gerrit-sac <dir> <msg>
  zum Commit nutzen.
* Hat man auf der Shell in der Public Lib was gemacht:
  [git pull] ; git add; git commit; git push.


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
