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