Commit often,
perfect later,
publish once.
Centralized
vs.
Distributed
$ git <verb>
$ git help <verb>
$ git <verb> --help
$ git init
$ touch file-1.txt
$ git add file-1.txt
$ git commit -m "first commit"
$ echo "42" > file-1.txt
→ Git erkennt Änderungen anhand des Dateiinhalts
Geänderte Dateien anzeigen
$ git status
Änderungen vergleichen
$ git diff
$ git difftool
Änderungen stagen und committen
$ git add file-1.txt
$ git commit -m "changed file"
$ git commit -am "changed file"
Staging Area
$ git add [-p|--patch] file-1.txt
$ git reset file-1.txt
History anzeigen
$ git log
$ git l
Dateien und Ordner von der Versionsverwaltung ausschließen
.gitignore
[Dd]ebug/
*.dll
Tags
- Entspricht einem Label im TFVC
$ git tag v1.0.0
Stash
- Ist ähnlich dem Shelven im TFVC
$ git stash
$ git stash pop
→ Existiert nur lokal
Ein Repository ist immer nur im Kontext eines Branches
- Produktive, funktionierende Version gewährleisten
- Dinge ausprobieren, ohne den vorhandenen Code zu gefährden
- Einzelne Features bzw. Programmteile im Entwicklungsprozess isolieren
- ...
- Darf kein ASCII Steuerzeichen enthalten
-
Keines der folgenden Zeichen darf vorkommen: Leerzeichen, Tilde (~), Caret (^), Doppelpunkt, Fragezeichen, Asterisk (*),
Öffnende eckige Klammer ([)
- Darf kein Backslash enthalten
Vollständige Liste: git-check-ref-format Manual Page
- Nutzerverwaltung
- ValidierungBeiPasswortAenderung
- 103279
- HochgeladeneDateiMaximal5MB
- GesperrterNutzerWirdNichtNach5MinutenEntsperrt
Besser
- Kurze und prägnante Namen
- Hierarchische Bezeichnungen
- Keine bloße Zahl
- CamelCase vermeiden, Wörter mit Minus trennen
- feature/nutzerverwaltung
- bugfix/validiere-passwort
- release/v1.0.0
- junk/ovale-buttons
Warum den Slash als Hierarchie-Trenner?
- Git behandelt die Hierarchie als Verzeichnisse
- Auto Complete in der Bash ist schneller
- Versch. grafische Tools (bspw. SourceTree) stellen die Branches ebenfalls als Ordner dar
Alles nur Best Practices, wenn es einem gar nicht zusagt, kann man es auch komplett anders machen
$ git branch develop
$ git checkout develop
$ git checkout -b develop master
Fast-Forward vs. Recursive Merge
Arbeiten mit Remote Repositories
Vorhandenes Repository klonen
$ git clone Remote-URL
Änderungen abholen
$ git fetch
Änderungen in das Arbeitsverzeichnis mergen
$ git merge
→ Entscheidet selbst, ob es ein recursive oder fast-forward Merge ist
Warum man git pull nicht verwenden sollte
Workflow: Änderungen vom zentralen Repository integrieren
- Kein pull verwenden
-
Erst fetchen (
git fetch)
-
Anschließend rebasen (
git rebase)
-
Bei Merge-Konflikten:
git mergetool
-
Anschließend
git rebase --continue aufrufen
Rebase niemals bei bereits veröffentlichten Commits anwenden!
Lokale Commits veröffentlichen
$ git push
→ Immer nur für den Branch, in dem man sich gerade befindet
Aufgabe
Erstellen einer Datei mit sechs Dingen, jedes repräsentiert dabei ein Feature
Repository klonen
https://github.com/tklepzig/git-alice-[Team-Nummer: 1-6].git
Beispiel Team 1
https://github.com/tklepzig/git-alice-1.git
Inhalt von things.txt
Six impossible things before breakfast:
Neuen Branch develop erstellen und von master abzweigen
Neue Zeile
1. There's a potion that can make you shrink.
Neue Zeile
2. And a fruit that can make you grow.
Commit often, perfect later
Letzten Commit korrigieren
2. And a fruit cake that can make you grow.
Zum Remote Repository pushen
Neue Zeile
3. Animals can talk.
Neue Zeile
4. Dogs can disappear.
Letzten Commit korrigieren
4. Dogs Cats can disappear.
Wenn committed: Warten
Zum Remote Repository pushen
Push ist nicht erlaubt
- Änderungen vom Remote Repository holen
- Anschließend pushen
Neue Zeile
5. There is a place called Wonderland.
Neue Zeile
6. I can slay the Jabberwocky.
Wenn committed: Warten
Zum Remote Repository pushen
Push ist nicht erlaubt
- Änderungen vom Remote Repository holen
- Merge-Konflikte auflösen
- Anschließend pushen
Release erstellen
-
develop nach master mergen und pushen
- Tag v1.0.0 erstellen und pushen
Fertige Datei:
Six impossible things before breakfast:
1. There's a potion that can make you shrink.
2. And a cake that can make you grow.
3. Animals can talk.
4. Cats can disappear.
5. There is a place called Wonderland.
6. I can slay the Jabberwocky.
;)
Gommid offdn,
bärfäggd lädor,
bablisch wohnns.
Commit often,
perfect later,
publish once.