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