blob: be948846fd6f6245264efa2c1d01f777380562ae [file] [log] [blame]
Zesstra0389bae2020-04-05 11:10:22 +02001Git workflow
2============
3
Zesstra2c7ce6e2020-04-05 11:01:00 +02004Typischer Arbeitsablauf
Zesstra0389bae2020-04-05 11:10:22 +02005-----------------------
Zesstra2c7ce6e2020-04-05 11:01:00 +02006
7(Es gibt andere Arbeitsweisen, aber dies hier ist eine, die sich bewaehrt
8 hat.)
9
10Nehmen wir an, ich moechte etwas neues einbauen, einen Bug fixen etc.
11Alle der folgenden Schritt werden auf eurem eigenen Rechner in eurem lokalen
12Clone des jeweiligen Repositories durchgefuehrt.
13
141. Repository clonen und/oder updaten::
15
16 git clone ssh://mgg/dings/bums
17 git checkout master
18 git pull
19
20 Zuerst einmal wird ein checkout des Zweiges 'master' gemacht. Und in diesen
21 Zweig hol ich mir erstmal den aktuellen Stand aus dem Mud (pull).
22
23 Jetzt moechte ich alle Aenderungen erstmal in einem separaten Zweig machen.
24 Warum? Weil dann der 'master' (das ist der aktive Zweig im Mud!) immer in
25 einem benutzbaren Zustand ist. Desweiteren kann man einen Zweig einfach
26 wegwerfen, wenn irgendwas groesseres schiefgelaufen ist...
27 Ausserdem ist es dann einfacher, zwischenzeitliche Aenderungen aus dem Mud zu
28 integrieren.
29
Zesstra0389bae2020-04-05 11:10:22 +0200302. Neuen Zweig erstellen::
Zesstra2c7ce6e2020-04-05 11:01:00 +020031
32 git checkout -b neue_kampftaktik
33
34 Hiermit wird ein neuer Zweig erstellt und gleichzeitig in ihn gewechselt.
35
36 Hier mach ich jetzt alle moeglichen Arbeiten und Basteleien, die ich fuer die
37 neue Kampftaktik brauche. Tipps dazu:
38
39 * Viele und haeufige Commits machen! Je kleiner einzelne Commits sind,
40 desto besser kann man Aenderungen spaeter verfolgen (was z.B. super ist,
41 wenn jemand was abnehmen muss!) und desto besser kann man einzelne
42 Aenderungen spaeter bei Bedarf auch rueckgaengig machen, wenn man merkt,
43 dass man stellenweise Unsinn gebaut hat. ;-)
44 * Thematisch unterschiedliche Dinge in verschiedene Commits packen. Also
45 z.B. erst Syntaxfehler editieren und commiten, dann eine neue Methode
46 fuer etwas ganz andere schreiben und commiten.
47
483. Aenderungen pruefen und commiten
49
50 Hiermit lasse ich mir anzeigen, welche Dateien nicht-committete Aenderungen
51 enthalten (oder neu sind/geloescht wurden)::
52
53 git status
54
55 Dies zeigt mir alle nicht-committeten Aenderungen an - zeilenweise
56 verglichen mit dem vorherigen Zustand::
57
58 git diff
59
60
614. Aenderungen in lokales Repository commiten
62
63 Hiermit merke gemachten Aenderungen fuer den naechsten Commit vor.
64 Ich kann hier einzelne Dateien auswaehlen, bestimmte Dateien oder sogar nur
65 bestimmte Teile der Aenderungen in einer Datei. (Hierzu bitte die
66 Git-Doku bemuehen.)::
67
68 git add <file> // einzelne Files auswaehlen
69 git add -A ./ // alle Files auswaehlen
70
71 Hiermit erstelle ich einen Commit, der die bisherigen Aenderungen umfasst.
72 Dabei wird ein Editor geoeffnet, in den ich eine informative Nachricht
73 ueber meine Aenderungen hinterlassen kann. Das ist besonders wichtig, wenn
74 ich in fremden Gebieten arbeite, aber auch fuer mich und einen etwaigen
75 abnehmenden Magier sehr sinnvoll.
76 Anregung: Die erste Zeile ist das sog. Betreff des Commits - vergleichbar
77 mit dem Betreff einer eMail. (bitte nur so 50-60 Zeichen). Anschliessend
78 muss eine leere Zeile folgen und danach eine laengere Beschreibung eingeben
79 werden::
80
81 git commit
82
83 Wenn ich an diesem Punkt mit dem Bugfix oder Feature noch nicht fertig bin:
84 einfach den Schritt 4 beliebig oft wiederholen, d.h. beliebig viele weitere
85 Commits machen.
86
875. Aenderungen in lokalen Master-Zweig mergen
88
89 Bin ich dann schliesslich aber mal fertig, gehe ich erstmal zurueck zum
90 master-Zweig::
91
92 git checkout master
93
94 Huch! Ploetzlich sind alle Dateien auf dem alten Stand! Keine Sorge,
95 unsere Aenderungen sind im Zweig 'neue_kampftaktik' sicher verwahrt.
96
97 Achtung: wenn ihr mit anderen zusammen arbeitet, koennte jemand
98 anderes im MUD Aenderungen vorgenommen haben. Ein einfaches ``git pull``
99 um die Dateien im 'master'-Zweig auf den neuesten Stand zu bringen,
100 zeigt euch auch Aenderungen. Wenn da jetzt
101 ``Already up-to-date.`` steht, ist alles in Butter, ansonsten siehe unten.
102
103 Mit diesem Kommando hole ich nun alle Aenderungen aus meinem Zweig
104 'neue_kampftaktik' in den Zweig 'master' (merge)::
105
106 git merge neue_kampftaktik
107
1086. Aenderungen in das MUD-Repository uebertragen
109 Jetzt bin ich bereit, die Aenderungen ins Mud zu uebertragen::
110
111 git push origin <lokaler_zweigname>:<zweigname_im_mg>
112
113 Job done!
114 (Hinweis: nur der Branch "master" wird ins Mud selber synchronisiert, alle
115 anderen Zweige existieren nur in den git-Repositories.)
116
117Sonderfaelle und erweiterte Moeglichkeiten
118------------------------------------------
119
120A) Zwischenzeitliche Aenderungen im MUD beruecksichtigen
121
122 Es koennte sein, dass man fuer den Branch ne ganze Weile gebraucht hat -
123 und dass waehrend meiner Arbeit jemand anders Aenderungen (im Mud oder
124 Repo) gemacht hat.
125
126 Diese Aenderungen sollte man sich wie geschrieben als erstes nach dem
127 Umschalten zum master-Zweig holen::
128
129 git pull
130
131 Jetzt geh ich wieder in meinen Zweig (ohne -b)::
132
133 git checkout neue_kampftaktik
134
135 und mache ein sog. Rebase. Damit verschiebe ich sozusagen, den Punkt, an dem
136 mein Zweig vom 'master' abzweigt und tue so, als ob die eben geholten
137 Aenderungen schon da gewesen waeren, als ich den Zweig erstellte.
138 (Andere Sichtweise: ich nehme meine Zweig und setz ihn auf den aktuellen
139 'master' dran.)::
140
141 git rebase master
142
143 Der Vorteil ist: wenn jetzt was kaputt gegangen ist, es also Konflikte gibt,
144 dann gibt es die nur in meinem Zweig 'neue_kampftaktik' und dort kann ich
145 sie in aller Ruhe reparieren. Sowohl der 'master' im MUD als auch mein
146 lokaler 'master' sind intakt.
147
148 Und jetzt geht es wie oben weiter.
149
150
151SIEHE AUCH
152----------
153
154 * gerrit
155 * Doku von Gerrit:
156
Zesstra08d43312020-04-05 11:45:01 +0200157 * https://mg.mud.de/gerrit/Documentation/intro-user.html
158 * https://mg.mud.de/gerrit/Documentation/index.html#_tutorials
Zesstra2c7ce6e2020-04-05 11:01:00 +0200159
160 * `gerrit-upload`: Wie man Dinge in Gerrit hochlaedt
161 * git-howto: Wie git benutzt wird
162 * git-kooperation: Ein ueber git-workflow hinausgehendes Beispiel zur
163 Synchronisation bzw Kooperation mehrerer Magier/Rechner
164 * gerrit-sync: Wie die Synchronisierung zw. git-Repos und Mudlib ablaeuft
165 * git-faq: haeufig gestellte Fragen/Probleme
166