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