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