Webentwicklung - Versionsverwaltung GitHochschule für Technik und Wirtschaft Berlin, Dipl.-Inform. Thomas Ziemer |
|
|
Dipl.-Inform. Thomas Ziemer
%messages.pagePresentation.showMaximized%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 |
pull bzw. add, commit und push
pull
eines Remote Commits in den Working Treeadd
dem Working Tree hinzugefügt und zum nächsten Commit vorgemerktadd
zum Commit vorgemerktcommit
ins lokale Repositorypush
ins Remote Repository übernommenExistierendes 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
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. 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 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.
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 |
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"
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 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.
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 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.
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
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.
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:
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.
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 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. 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 |
git status
Zeigt den augenblicklichen Zustand des Working Tree (die lokalen, unter Versionsverwaltung stehenden Verzeichnisse).
> git status
.gitignore
stehen).