Für alle Anfänger und diejenigen, die lieber mit einem visuellem Tool arbeiten als mit der Konsole haben wir uns entschieden SourceTree in Verbindung mit P4Merge einzusetzen.
Inhaltsverzeichnis
Vorbereitung
- Installiere SourceTree
- Installiere P4Merge
- Bei der Installation muss lediglich der Haken bei P4Merge gesetzt werden.. alle anderen Tools sind nicht notwendig.
- Erstelle einen GitHub Account
Bookmarks Verstecken
Die Bookmarks Ansicht in SourceTree ist selten notwendig. Ihr könnt diese über das View Menü verstecken.
Username & Email konfigurieren
- Starte SourceTree.
- Öffne Tools->Options
- Wechsle in den Tab "General"
- Full Name erscheint als solches in Github.
- Email muss der Github Email entsprechen.
Merge Tool konfigurieren
- Starte SourceTree.
- Öffne Tools->Options
- Wechsle in den Tab "Diff"
- Bei "External Diff Tool" und bei "Merge Tool" wähle "P4Merge"
Clone des Repositories
- Klick auf den Button "Clone / New"
- Im Tab "Clone Repository" wähle:
- URL: https://github.com/Lusito/GameDevWeek.git
- Destination Path: Ein Ort wo ihr den Code speichern wollt.
- Bookmark könnt ihr wählen, müsst ihr aber nicht.
- Es wird nun alles heruntergeladen. Dies kann etwas dauern.
Normaler Git Workflow
Einen entfernten Branch auschecken
- In der Baumstruktur Links gibt es einen Bereich "Remotes" mit dem Kind "Origin"
- Hier sind alle Branches gelistet, die im Github Repository zu finden sind.
- Im Kontextmenü der Branches kann gewählt werden "Checkout ..."
- Im folgenden Popup können die Standardeinstellungen beibehalten werden.
- Nun habt ihr den Branch lokal verfügbar und könnt jederzeit zu diesem Wechseln.
- Der Branch wird nach Checkout automatisch ausgewählt.
Änderungen Stagen
- Wenn Änderungen vorhanden sind, erscheinen diese in der Branch Ansicht als oberster Eintrag "Uncommitted changes".
- Zur Branch Ansicht wechselt man indem man in der Baumstruktur Links den aktiven Branch wählt.
- Wird dieser Eintrag ausgewählt, kann man im unteren Teil sehen, welche Änderungen erkannt wurden.
- Im linken unteren Teil sind zwei Bereiche "Staged files" und "Unstaged files".
- Diese stellen die Staging Area und die sonstigen Änderungen dar.
- Via Drag & Drop oder mit dem Setzen der Haken können Dateien zwischen den Bereichen gewechselt werden.
- Wählt man eine einzelne Datei, kann auf der rechten Seite gesehen werden, welche Änderungen dies beinhaltet.
- Hier können auch einzelne Codeschnipsel zur Staging Area hinzugefügt werden.
Änderungen Stashen
Solltet ihr Änderungen durchgeführt haben, die ihr nicht committen wollt, so könnt ihr diese auslagern und später wieder zurückführen. Dies nennt sich bei Git Stashen.
- Warnung: Beim Stashen werden alle Änderungen (Staged und Unstaged) zu einem Stash hinzugefügt. Beim wiederherstellen, erscheinen diese Änderungen alle als Unstaged.
- Dazu klickt man auf den Button "Stash" in der Toolbar und vergibt einen Namen.
- Nun erscheint Links in der Baumstruktur ein neuer Eintrag im Knoten "Stashes".
- Mit dessen Kontextmenü können die Änderungen zurück gespielt werden.
Änderungen Committen
- Wechsel in die Commit Ansicht mit dem Button "Commit" in der Toolbar.
- Links sind wie bekannt Staged und Unstaged Änderungen zu sehen.
- Diese können hier noch einmal angepasst werden.
- Unten erscheint ein Kommentar Feld. Hier sollte kurz beschrieben werden, was der Commit ändert.
- Der Haken "Push changes.." sollte nicht gewählt werden.
- Mit einem Klick auf "Commit" beim Kommentarfeld wird der Commit gespeichert.
- Diese Änderungen sind vorerst noch Lokal!
Externe Änderungen ziehen: Pull (Fetch & Merge)
Bevor die Änderungen auf den Server geschoben werden können, müssen erst Updates vom Server gezogen werden und ggf. mit dem eigenen Code gemerged werden.
- Wähle den Button "Pull" in der Toolbar
- Hier können die Standardeinstellungen übernommen werden.
- Git versucht alle Änderungen automatisch zu mergen. Sollte dies nicht funktionieren erscheint eine Fehlermeldung.
- Bei einem Konflikt muss manuell gemerged werden.
Konflikte beheben / Dateien Mergen
- Ist ein Konflikt beim Mergen entstanden, so wird dies in der Statusleiste angezeigt.
- Um diesen zu beheben wechselnt man in die Branch Ansicht und dort in den ersten Eintrag "Uncommitted changes".
- Hier erscheinen im Bereich "Unstaged files" alle Dateien die Konflikte haben.
- Für Jede Datei gehe wie folgt vor:
- Öffne das Kontextmenü der Datei.
- Wähle "Resolve Conflicts->Launch External Merge Tool".
- P4Merge wird nun gestartet. Man sieht 3 Dateien nebeneinander und eine darunter.
- In der Mitte ist die Basis Datei zu sehen
- Links sind die lokalen Änderungen zu sehen
- Rechts sind externe Änderungen zu sehen
- Unten ist die finale Version zu sehen.
- P4Merge versucht soweit es geht eine Vorauswahl zu treffen.
- Diese sollte dennoch auf Korrektheit überprüft werden.
- Im Unterren Bereich sieht man nun welche Änderungen übernommen werden.
- Auf der Rechten Seite gibt es die Möglichkeit, zu wählen ob Zeilen der Basisdatei, der Lokalen Datei oder der externen Datei genommen werden sollen.
- Man kann auch mehrere Wählen indem man Shift gedrückt hält
- Es ist auch möglich die Änderungen manuell durch zu führen.
- Sind alle Änderungen vollzogen, kann P4Merge geschlossen werden (speichern nicht vergessen)
- Danach bleibt eine Datei übrig: dateiname.orig. Diese kann gelöscht werden falls nicht weiter benötigt.
- Sind alle Konflikte behoben, kann in die "Commit" Ansicht gewechselt werden, um die behobenen Konflikte zu committen.
Änderungen zum Server pushen
- Vor dem pushen immer sicherstellen, dass man auf dem aktuellsten Stand ist (siehe Pull)
- Pushen kann man auf zwei Varianten:
- Über den "Push" Button der Toolbar. Dieser wählt allerdings alle Branches aus. Dies ist nicht zu empfehlen. Wählt hier nur den Branch aus, den ihr wirklich pushen wollt.
- Über das Kontextmenü des Branches ("Push to origin/..."). Dies wählt nur den jeweiligen Branch aus.
GitFlow
In SourceTree gibt es eine Möglichkeit das erstellen von Feature Branches etwas komfortabler zu gestalten. Dabei wird der GitFlow Workflow genutzt. Lest euch die Beschreibung nach Möglichkeit kurz durch.
Wie dies zu benutzen ist, ist in diesem Video schnell erklärt: