Folge mir auf Twitter.

Webentwicklung - Versionsverwaltung Git

Hochschule für Technik und Wirtschaft Berlin

Dipl.-Inform. Thomas Ziemer

Webentwicklung - Versionsverwaltung Git

Dipl.-Inform. Thomas Ziemer

Version Control System - Zur Erinnerung

Ein VCS verwaltet über einen Zeitraum hinweg von der Vergangenheit bis zur Gegenwart alle Versionen eines Dokuments, einer Datei, einer Quelltextdatei usw. in einer zentralen Datenhaltung, dem so genannten "Repository".

"Verwalten" heißt in diesem Fall, dass stets alle Versionen des Dokuments zugreifbar sind.

Webentwicklung - Versionsverwaltung Git

Git-Topologie

Git-Topologie

Git-Topologie

Als zentrale Datenhaltung in Form des Remote Repository existieren verschiedene Lösungen. Zwei seien insbesonders zu nennen:

GitHub  Web-basierter Online-Dienst von GitHub, Inc. (seit 2008), 
Über zehn Millionen registrierte Benutzer (Stand August 2015), 
26,3 Millionen Repositories (Stand August 2015) , 
Öffentlich einsehbare Repositories sind kostenfrei 
GitLab  Web-basierter Online-Dienst, beispielsweise git.ziemers.de
Open-Source-Software unter MIT-Lizenz,
GitLab kann auf eigener Hardware betrieben werden

Webentwicklung - Versionsverwaltung Git

Grundlegende Git-Kommandos

Grundlegende Git-Kommandos

pull bzw. add, commit und push

Grundlegende Git-Kommandos

Existierendes Git-Repository in ein lokales Verzeichnis übernehmen

> git config --global user.name "<full name>"
> git config --global user.email "<mail address>"

> git clone https://<domain>/<group>/<project>.git
> cd <project>

Beispielsweise:

> git clone https://git.ziemers.de/edu/swXercise.git

Grundlegende Git-Kommandos

Existierendes Verzeichnis unter Git-Versionsverwaltung stellen

> git config --global user.name "<full name>"
> git config --global user.email "<mail address>"

> cd <directory>
> git init
> git remote add origin https://<domain>/<group>/<project>.git
> git add .
> git commit -m "<initial commit message>"
> git push -u origin master
Git funktioniert auch ohne Remote Repository. Einfach das git remote add und das git push weglassen.

Webentwicklung - Versionsverwaltung Git

Wichtige Git-Kommandos

Wichtige Git-Kommandos

Kommando  Bedeutung 
git add  Fügt Dateien zum Index (zum lokalen Git-Repository) hinzu 
git checkout  Auf einen anderen Branch wechseln oder einen neuen Branch erstellen 

Branches

Branches sind Verzweigungen in der Versionsverwaltung. Die Buchstaben stellen einzelne Commits im Branch dar (normalerweise benennt man sie aber sinnvoller). Jeder Commit enthält eine oder mehrere Dateiänderungen. Commits sind miteinander verkettet.

         A---B---C feature/master/FEA-4711_Login_einbauen
        /
---D---E---F---G---H master
            \
             A---B improvement/master/IMP-0815_Kennwort_verschlüsseln

Die Zeit schreitet von links nach rechts voran.

Branches

Die Benennung eines Branch ist beliebig, sollte aber sinnvollen Konventionen folgen:

<Typ>/<Wurzelbranch>/<Abk. Projekt>-<Ticketnr.>_<Kurzbeschr.>
  Bedeutung 
Typ  Getätigte Modifikation: bugfix, feature, improvement, style, refactor, ... 
Wurzelbranch  Ursprungsbranch master, stable etc., von dem abgeleitet wurde 
Abk. Projekt  Abkürzung des Projektnamen im Ticket-System 
Ticketnr. Nummer (Id) des Tickets im Ticket-System 
Kurzbeschr. Kurzbeschreibung des Tickets im Ticket-System 

Branches

git checkout

> git checkout <branch>

Wechselt ans Ende des gewünschten <branch>. Zum Erstellen eines neuen Branch am Ende eines existierenden Branch sind weitere Schritte erforderlich:

> git pull
> git checkout -b "feature/master/WEB-4711_Login_einbauen"
> git push -u origin "feature/master/WEB-4711_Login_einbauen"

Wichtige Git-Kommandos

Kommando  Bedeutung 
git add  Fügt eine Datei zum Index (zum lokalen Git-Repository) hinzu 
git checkout  Auf einen anderen Branch wechseln oder einen neuen Branch erstellen 
git cherry-pick  Einen entfernten (remote) Commit in den Working Tree integrieren 

Cherry-Picking

git cherry-pick

Holt die "Kirschen" (alle Dateien aus einem Commit) eines beliebigen Branch in den Working Tree (die lokalen, unter Versionsverwaltung stehenden Verzeichnisse).

> git cherry-pick [--no-commit] <commit>

Für <commit> wird der Hash-Wert des Quelle-Commits angegeben. Der Parameter --no-commit fügt dem Working Tree die Dateien hinzu, ohne einen neuen Commit darin zu erstellen.

Wichtige Git-Kommandos

Kommando  Bedeutung 
git add  Fügt eine Datei zum Index (zum lokalen Git-Repository) hinzu 
git checkout  Auf einen anderen Branch wechseln oder einen neuen Branch erstellen 
git cherry-pick  Einen entfernten (remote) Commit in den Working Tree integrieren 
git merge  Zwei Branches zusammenführen (evtl. mit Konfliktauflösung

Merging

git merge

Verzweigungen (Branches) werden irgendwann wieder in denjenigen Zweig zurückgespielt, von dem sie einst abgeleitet wurden:

         A---B---C bugfix/stable/BUG-4242_Kennwort_verschluesseln
        /
---D---E---F---G stable

Konvention: Bugfixes werden üblicherweise vom stable-Branch abgeleitet, und Features, Improvements etc. vom master.

Merging

         A---B---C bugfix/stable/BUG-4242_Kennwort_verschluesseln
        /
---D---E---F---G stable

Angenommen, der augenblickliche Branch im Working Tree ist bereits stable (siehe auch git checkout), dann mergt man den Bugfix-Branch folgendermaßen in stable hinein:

> git merge bugfix/stable/BUG-4242_Kennwort_verschluesseln

Das Ergebnis sieht dann so aus:

         A---B---C bugfix/stable/BUG-4242_Kennwort_verschluesseln
        /         \
---D---E---F---G---H stable

Merging

Einen Branch in den master mergen (ein neuer Commit wird dabei erstellt):

> git checkout master
> git pull
> git merge style/master/STY-0815_Css_machen
> git push

Ohne neuen Commit mergen (so genanntes Premerging):

> git merge style/master/STY-0815_Css_machen --no-commit --no-ff

Danach geht's mit git commit -m "Commit-Message" oder git merge --abort (so genannter Dry-Run) weiter, je nachdem, ob das Mergen funktioniert hat.

Merging - Konfliktauflösung

Was passiert beim Mergen, wenn beispielweise die beiden Commits C und F Änderungen an denselben Dateien enthalten?

         A---B---C bugfix/stable/BUG-4242_Kennwort_verschluesseln
        /
---D---E---F---G stable
Antwort:

Wichtige Git-Kommandos

Kommando  Bedeutung 
git add  Fügt eine Datei zum Index (zum lokalen Git-Repository) hinzu 
git checkout  Auf einen anderen Branch wechseln oder einen neuen Branch erstellen 
git cherry-pick  Einen entfernten (remote) Commit in den Working Tree integrieren 
git merge  Zwei Branches zusammenführen (evtl. mit Konfliktauflösung
git pull  Entfernten (remote) Projektstand in den Working Tree integrieren 

Das Git-Kommando pull wurde bereits beschrieben.

Wichtige Git-Kommandos

Kommando  Bedeutung 
git add  Fügt eine Datei zum Index (zum lokalen Git-Repository) hinzu 
git checkout  Auf einen anderen Branch wechseln oder einen neuen Branch erstellen 
git cherry-pick  Einen entfernten (remote) Commit in den Working Tree integrieren 
git merge  Zwei Branches zusammenführen (evtl. mit Konfliktauflösung
git pull  Entfernten (remote) Projektstand in den Working Tree integrieren 
git stash  Eigene Änderungen lokal "wegsichern" oder wiederholen 

Stashing

git stash
wird benutzt, wenn Änderungen im Working Tree zwar rückgängig gemacht werden, aber nicht verloren gehen sollen (vielleicht beim Branch-Wechsel). Mit

> git stash [<stash>]

sichert man alle Änderungen im Working Tree. Dieser ist dann wieder "clean". Mit

> git stash pop [<stash>]
holt man die ge'stash'ten Änderungen wieder zurück in den Working Tree. Man kann sich das Stashing wie "Schubladen" im lokalen Repository vorstellen.

Wichtige Git-Kommandos

Kommando  Bedeutung 
git add  Fügt eine Datei zum Index (zum lokalen Git-Repository) hinzu 
git checkout  Auf einen anderen Branch wechseln oder einen neuen Branch erstellen 
git cherry-pick  Einen entfernten (remote) Commit in den Working Tree integrieren 
git merge  Zwei Branches zusammenführen (evtl. mit Konfliktauflösung
git pull  Entfernten (remote) Projektstand in den Working Tree integrieren 
git stash  Eigene Änderungen lokal "wegsichern" oder wiederholen 
git status  Status des lokalen Git-Repositories anzeigen 

Status des Working Tree

git status

Zeigt den augenblicklichen Zustand des Working Tree (die lokalen, unter Versionsverwaltung stehenden Verzeichnisse).

> git status

Puh, fertig!