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