blob: 843338204df743a99220c4fcdc3c8a74041cacbc [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +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
11# Schritt 1: Repository clonen und/oder updaten
Zesstra8cad02c2016-09-01 22:25:25 +020012> git clone ssh://mgg/dings/bums
MG Mud User88f12472016-06-24 23:31:02 +020013> git checkout master
14> git pull
15Zuerst einmal wird ein checkout des Zweiges 'master' gemacht. Und in diesen
16Zweig hol ich mir erstmal den aktuellen Stand aus dem Mud (pull).
17
18Jetzt moechte ich alle Aenderungen erstmal in einem separaten Zweig machen.
19Warum? Weil dann der 'master' (das ist der aktive Zweig im Mud!) immer in
20einem benutzbaren Zustand ist. Desweiteren kann man einen Zweig einfach
21wegwerfen, wenn irgendwas groesseres schiefgelaufen ist...
22Ausserdem ist es dann einfacher, zwischenzeitliche Aenderungen aus dem Mud zu
23integrieren.
24
25# Schritt 2: Neuen Zweig erstellen
26> git checkout -b neue_kampftaktik
27Hiermit wird ein neuer Zweig erstellt und gleichzeitig in ihn gewechselt.
28
29Hier mach ich jetzt alle moeglichen Arbeiten und Basteleien, die ich fuer die
30neue Kampftaktik brauche. Tipps dazu:
31* Viele und haeufige Commits machen! Je kleiner einzelne Commits sind, desto
32 besser kann man Aenderungen spaeter verfolgen (was z.B. super ist, wenn
33 jemand was abnehmen muss!) und desto besser kann man einzelne Aenderungen
34 spaeter bei Bedarf auch rueckgaengig machen, wenn man merkt, dass man
35 stellenweise Unsinn gebaut hat. ;-)
36* Thematisch unterschiedliche Dinge in verschiedene Commits packen. Also zB
37 erst Syntaxfehler editieren und commiten, dann eine neue Methode fuer
38 etwas ganz andere schreiben und commiten.
39
40# Schritt 3.1: Aenderungen pruefen
41> git status
42Hiermit lasse ich mir anzeigen, welche Dateien nicht-committete Aenderungen
43enthalten (oder neu sind/geloescht wurden).
44
45> git diff
46Dies zeigt mir alle nicht-committeten Aenderungen an - zeilenweise verglichen
47mit dem vorherigen Zustand.
48
49# Schritt 3.2: Aenderungen in lokales Repository commiten
50> git add <file> // einzelne Files auswaehlen
51ODER
52> git add -A ./ // alle Files auswaehlen
53Hiermit merke alle gemachten Aenderungen fuer den naechsten Commit vor.
54Ich koennte hier aber auch einzelne Dateien auswaehlen oder sogar nur
55bestimmte Teile der Aenderungen in einer Datei. (Hierzu bitte die
56Git-Doku bemuehen.)
57
58> git commit
59Hiermit erstelle ich einen Commit, der die bisherigen Aenderungen umfasst.
60Dabei wird ein Editor geoeffnet, in den ich eine informative Nachricht ueber
61meine Aenderungen hinterlassen kann. Das ist besonders wichtig, wenn ich in
62fremden Gebieten arbeite, aber auch fuer mich und einen etwaigen abnehmenden
63Magier sehr sinnvoll.
64Anregung: Die erste Zeile ist das sog. Betreff des Commits - vergleichbar mit
65dem Betreff einer eMail. Anschliessend sollte eine leere Zeile folgen und
66danach eine laengere Beschreibung eingeben werden, sofern noetig/sinnvoll.
67
68Wenn ich an diesem Punkt mit dem Bugfix oder Feature noch nicht fertig bin:
69einfach die letzten 4 Befehle aus Schritt 3 beliebig oft wiederholen, d.h.
70beliebig viele weitere Commits machen.
71
72# Schritt 4: Aenderungen in lokalen Master-Zweig mergen
73Bin ich dann schliesslich aber mal fertig, gehe ich erstmal zurueck zum
74master-Zweig:
75
76> git checkout master
77Huch! Ploetzlich sind alle Dateien auf dem alten Stand! Keine Sorge,
78unsere Aenderungen sind im Zweig 'neue_kampftaktik' sicher verwahrt.
79
80Achtung: wenn ihr mit anderen zusammen arbeitet, koennte jemand
81anderes im MUD Aenderungen vorgenommen haben. Ein einfaches
82> git pull
83um die Dateien im 'master'-Zweig auf den neuesten Stand zu bringen,
84zeigt euch auch Aenderungen. Wenn da jetzt
85 'Already up-to-date.'
86steht, ist alles in Butter, ansonsten siehe unten bei 4.1.extra.
87
88> git merge neue_kampftaktik
89Mit diesem Kommando hole ich nun alle Aenderungen aus meinem Zweig
90'neue_kampftaktik' in den Zweig 'master' (merge).
91
92# Schritt 5: Aenderungen in das MUD-Repository uebertragen
93Jetzt bin ich bereit, die Aenderungen ins Mud zu uebertragen:
Zesstra8cad02c2016-09-01 22:25:25 +020094> git push origin <lokaler_zweigname>:<zweigname_im_mg>
MG Mud User88f12472016-06-24 23:31:02 +020095Job done!
Zesstra8cad02c2016-09-01 22:25:25 +020096(Hinweis: nur der Branch "master" wird ins Mud selber synchronisiert, alle
97 anderen Zweige existieren nur in den git-Repositories.)
MG Mud User88f12472016-06-24 23:31:02 +020098
99# Sonderfaelle und erweiterte Moeglichkeiten
100# Schritt 4.1.extra: Zwischenzeitliche Aenderungen im MUD beruecksichtigen
101
102Es koennte sein, dass man fuer den Branch ne ganze Weile gebraucht hat -
103und dass waehrend meiner Arbeit jemand anders Aenderungen (im Mud oder
104Repo) gemacht hat.
105
106Diese Aenderungen sollte man sich wie geschrieben als erstes nach dem
107Umschalten zum master-Zweig holen:
108> git pull
109
110Jetzt geh ich wieder in meinen Zweig (ohne -b)
111> git checkout neue_kampftaktik
112und mache ein sog. Rebase. Damit verschiebe ich sozusagen, den Punkt,
113an dem mein Zweig vom 'master' abzweigt und tue so, als ob die eben
114geholten Aenderungen schon da gewesen waeren, als ich den Zweig erstellte.
115(Andere Sichtweise: ich nehme meine Zweig und setz ihn auf den aktuellen
116 'master' dran.)
117> git rebase master
118
119Der Vorteil ist: wenn jetzt was kaputt gegangen ist, es also Konflikte gibt,
120dann gibt es die nur in meinem Zweig 'neue_kampftaktik' und dort kann ich
121sie in aller Ruhe reparieren. Sowohl der 'master' im MUD als auch mein
122lokaler 'master' sind intakt.
123
124Und jetzt geht es wie oben weiter.
125
126SIEHE AUCH
Zesstra8cad02c2016-09-01 22:25:25 +0200127 gerrit
MG Mud User88f12472016-06-24 23:31:02 +0200128 git-howto: Wie git benutzt wird
129 git-kooperation: Ein ueber git-workflow hinausgehendes Beispiel zur
130 Synchronisation bzw Kooperation mehrerer Magier/Rechner
Zesstra8cad02c2016-09-01 22:25:25 +0200131 gerrit-sync: Wie die Synchronisierung zw. git-Repos und Mudlib ablaeuft
MG Mud User88f12472016-06-24 23:31:02 +0200132 git-faq: haeufig gestellte Fragen/Probleme
133