SlideShare ist ein Scribd-Unternehmen logo
1 von 201
Downloaden Sie, um offline zu lesen
Quelle: http://git-scm.com/downloads/logos
TRAINING
Verteilte Versionskontrolle mit Git
Jan Dittberner 27. April 2016 1
AUFBAU
GIT-GRUNDLAGEN
Basiswissen
Git-Kommandos
Jan Dittberner 27. April 2016 2
AUFBAU
GIT-ARBEITSWEISE
Branches, Tags, Merge und Rebase
Repository-Organisation
Hooks
FAQ
Weiterführendes
Jan Dittberner 27. April 2016 3
Teil I
GIT-GRUNDLAGEN
Jan Dittberner 27. April 2016 5
Basiswissen
Git-Kommandos
Jan Dittberner 27. April 2016 6
EINLEITUNG
WARUM VERSIONSVERWALTUNG
Jan Dittberner 27. April 2016 7
EINLEITUNG
WARUM VERSIONSVERWALTUNG
Zwischenstände von Dateien sichern
Jan Dittberner 27. April 2016 7
EINLEITUNG
WARUM VERSIONSVERWALTUNG
Zwischenstände von Dateien sichern
Gemeinsames Arbeiten an Dateien
Jan Dittberner 27. April 2016 7
EINLEITUNG
WARUM VERSIONSVERWALTUNG
Zwischenstände von Dateien sichern
Gemeinsames Arbeiten an Dateien
Möglichkeit zu alten Dateiversionen zurückzukehren
Jan Dittberner 27. April 2016 7
EINLEITUNG
WARUM VERSIONSVERWALTUNG
Zwischenstände von Dateien sichern
Gemeinsames Arbeiten an Dateien
Möglichkeit zu alten Dateiversionen zurückzukehren
Möglichkeit in die Historie von Projekten zu sehen
Jan Dittberner 27. April 2016 7
EINLEITUNG
EINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG
Jan Dittberner 27. April 2016 8
EINLEITUNG
EINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG
Dateien/Verzeichnisse kopieren
oldskool.c oldskool-backup-1.c
Jan Dittberner 27. April 2016 8
EINLEITUNG
EINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG
Dateien/Verzeichnisse kopieren
oldskool.c oldskool-backup-1.c
Dateibasierte Versionierung
SCCS (1972), RCS (Anfang 1980er)
Jan Dittberner 27. April 2016 8
EINLEITUNG
EINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG
Dateien/Verzeichnisse kopieren
oldskool.c oldskool-backup-1.c
Dateibasierte Versionierung
SCCS (1972), RCS (Anfang 1980er)
zentrale Versionsverwaltung
CVS (1989), Subversion (2000), Synergy, Perforce, Visual SourceSafe, …
Jan Dittberner 27. April 2016 8
EINLEITUNG
EINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG
Dateien/Verzeichnisse kopieren
oldskool.c oldskool-backup-1.c
Dateibasierte Versionierung
SCCS (1972), RCS (Anfang 1980er)
zentrale Versionsverwaltung
CVS (1989), Subversion (2000), Synergy, Perforce, Visual SourceSafe, …
verteilte Versionsverwaltung
BitKeeper (1999), Bazaar (2005), Mercurial (2005), Git (2005), …
Jan Dittberner 27. April 2016 8
EINLEITUNG
EINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG
Git has won
Abbildung: Companies and Projects using Git Quelle https://git-scm.com, 26.04.2016
Jan Dittberner 27. April 2016 9
BASISWISSEN
Inhalte von Git-Repositories
Installation und Ersteinrichtung
Hilfe
Jan Dittberner 27. April 2016 10
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Identifizierbare Artefakte
Blob
Tree
Jan Dittberner 27. April 2016 11
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Identifizierbare Artefakte
Durch SHA1-Hash identifizierbar:
Blob (Datei)
Tree
Commit
Blob
Tree
Jan Dittberner 27. April 2016 11
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Identifizierbare Artefakte
Durch SHA1-Hash identifizierbar:
Blob (Datei)
Tree
Commit
Verweise auf Commits:
Branches
Tags Blob
Tree
Jan Dittberner 27. April 2016 11
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Bereiche (lokaler) Repositories
Jan Dittberner 27. April 2016 12
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Bereiche (lokaler) Repositories
Repository mit historischen Daten
Jan Dittberner 27. April 2016 12
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Bereiche (lokaler) Repositories
Repository mit historischen Daten
Staging Area (Vorbereitung des nächsten Commits)
Jan Dittberner 27. April 2016 12
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Bereiche (lokaler) Repositories
Repository mit historischen Daten
Staging Area (Vorbereitung des nächsten Commits)
Working Copy
Jan Dittberner 27. April 2016 12
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Bereiche (lokaler) Repositories
Repository mit historischen Daten
Staging Area (Vorbereitung des nächsten Commits)
Working Copy
Stash
Jan Dittberner 27. April 2016 12
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Bereiche (lokaler) Repositories
Repository mit historischen Daten
Staging Area (Vorbereitung des nächsten Commits)
Working Copy
Stash
Notes (Notizen zu Objekten)
Jan Dittberner 27. April 2016 12
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Eigenschaften von Commits
Jan Dittberner 27. April 2016 13
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Eigenschaften von Commits
gerichteter azyklischer Graph (directed acyclic graph, DAG)
Jan Dittberner 27. April 2016 13
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Eigenschaften von Commits
gerichteter azyklischer Graph (directed acyclic graph, DAG)
jeder Commit (außer initialem Commit) hat 1-n Parents
Jan Dittberner 27. April 2016 13
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Eigenschaften von Commits
gerichteter azyklischer Graph (directed acyclic graph, DAG)
jeder Commit (außer initialem Commit) hat 1-n Parents
Commits sind Referenzen auf einen Tree plus Metadaten (Author, Zeitstempel,
Kommentar, …)
Jan Dittberner 27. April 2016 13
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Sonstiges
Jan Dittberner 27. April 2016 14
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Sonstiges
Hooks (Skripte)
Jan Dittberner 27. April 2016 14
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Sonstiges
Hooks (Skripte)
.git/config (Repository-lokale Konfiguration)
Jan Dittberner 27. April 2016 14
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Sonstiges
Hooks (Skripte)
.git/config (Repository-lokale Konfiguration)
Remotes (Referenzen auf andere Repositories)
Jan Dittberner 27. April 2016 14
BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Sonstiges
Hooks (Skripte)
.git/config (Repository-lokale Konfiguration)
Remotes (Referenzen auf andere Repositories)
Gitlinks (für Submodule)
Jan Dittberner 27. April 2016 14
BASISWISSEN
INSTALLATION UND ERSTEINRICHTUNG
git installieren
Windows: Installation mit cygwin [1] setup.exe oder
Git for Windows [2] (früher msysgit)
MacOS-X: Installation mit dem Mac-OS-Installer [3]
RedHat: yum install git
Debian: aptitude install git
Jan Dittberner 27. April 2016 15
BASISWISSEN
INSTALLATION UND ERSTEINRICHTUNG
Setup
Jan Dittberner 27. April 2016 16
BASISWISSEN
INSTALLATION UND ERSTEINRICHTUNG
Setup
Wer bin ich?
git config --global user.name "Jan␣Dittberner"
git config --global user.email
jan.dittberner@t -systems.com
Jan Dittberner 27. April 2016 16
BASISWISSEN
INSTALLATION UND ERSTEINRICHTUNG
Setup
Wer bin ich?
git config --global user.name "Jan␣Dittberner"
git config --global user.email
jan.dittberner@t -systems.com
Einstellungen für Zeilenenden
git config --global core.autocrlf false
Jan Dittberner 27. April 2016 16
BASISWISSEN
HILFE
Use the docs!
Jan Dittberner 27. April 2016 17
BASISWISSEN
HILFE
Use the docs!
git -h
Jan Dittberner 27. April 2016 17
BASISWISSEN
HILFE
Use the docs!
git -h
git help oder git --help
Jan Dittberner 27. April 2016 17
BASISWISSEN
HILFE
Use the docs!
git -h
git help oder git --help
git <command> -h
Jan Dittberner 27. April 2016 17
BASISWISSEN
HILFE
Use the docs!
git -h
git help oder git --help
git <command> -h
git help <command> oder git
<command> --help
Jan Dittberner 27. April 2016 17
GIT-KOMMANDOS
Repository anlegen
Repository klonen
lokales Arbeiten
Jan Dittberner 27. April 2016 18
GIT-KOMMANDOS
REPOSITORY ANLEGEN
Jan Dittberner 27. April 2016 19
GIT-KOMMANDOS
REPOSITORY ANLEGEN
neues lokales Entwicklungsrepository:
git init <repo>
Jan Dittberner 27. April 2016 19
GIT-KOMMANDOS
REPOSITORY ANLEGEN
neues lokales Entwicklungsrepository:
git init <repo>
neues lokales Bare-Repository:
git init --bare <repo.git>
Jan Dittberner 27. April 2016 19
GIT-KOMMANDOS
REPOSITORY KLONEN
git clone <repourl> [<target>]
origin
a
b master
Jan Dittberner 27. April 2016 20
GIT-KOMMANDOS
REPOSITORY KLONEN
git clone <repourl> [<target>]
origin
a
b master
user 1
a
b origin/master
master
Jan Dittberner 27. April 2016 20
GIT-KOMMANDOS
REPOSITORY KLONEN
git clone <repourl> [<target>]
origin
a
b master
user 1
a
b origin/master
master
user 2
a
b origin/master
master
Jan Dittberner 27. April 2016 20
GIT-KOMMANDOS
LOKALES ARBEITEN
Umgang mit der Staging-Area
Jan Dittberner 27. April 2016 21
GIT-KOMMANDOS
LOKALES ARBEITEN
Umgang mit der Staging-Area
Änderungen zur Staging-Area hinzufügen:
git add [<file> …]
Jan Dittberner 27. April 2016 21
GIT-KOMMANDOS
LOKALES ARBEITEN
Umgang mit der Staging-Area
Änderungen zur Staging-Area hinzufügen:
git add [<file> …]
Dateien löschen:
git rm [<file> …]
Jan Dittberner 27. April 2016 21
GIT-KOMMANDOS
LOKALES ARBEITEN
Informationen abfragen
Jan Dittberner 27. April 2016 22
GIT-KOMMANDOS
LOKALES ARBEITEN
Informationen abfragen
Aktuellen Status von Staging-Area und Working Copy:
git status
Jan Dittberner 27. April 2016 22
GIT-KOMMANDOS
LOKALES ARBEITEN
Informationen abfragen
Aktuellen Status von Staging-Area und Working Copy:
git status
Informationen zu Objekt:
git show <refname> (später bei Exkurs: Revision-Spezifikation mehr dazu)
Jan Dittberner 27. April 2016 22
GIT-KOMMANDOS
LOKALES ARBEITEN
Informationen abfragen
Aktuellen Status von Staging-Area und Working Copy:
git status
Informationen zu Objekt:
git show <refname> (später bei Exkurs: Revision-Spezifikation mehr dazu)
Unterschied zwischen Staging-Area und Working Copy:
git diff
Jan Dittberner 27. April 2016 22
GIT-KOMMANDOS
LOKALES ARBEITEN
History ansehen
Jan Dittberner 27. April 2016 23
GIT-KOMMANDOS
LOKALES ARBEITEN
History ansehen
Log für aktuellen Branch:
git log
Jan Dittberner 27. April 2016 23
GIT-KOMMANDOS
LOKALES ARBEITEN
History ansehen
Log für aktuellen Branch:
git log
Tipp:
git config --global alias.lga "log␣--graph␣
--decorate␣--oneline␣--color␣--all"
git lga
Jan Dittberner 27. April 2016 23
GIT-KOMMANDOS
LOKALES ARBEITEN
History ansehen
Log für aktuellen Branch:
git log
Tipp:
git config --global alias.lga "log␣--graph␣
--decorate␣--oneline␣--color␣--all"
git lga
Letzte Änderungen am lokalen Repository:
git reflog
Jan Dittberner 27. April 2016 23
GIT-KOMMANDOS
LOKALES ARBEITEN
Selektives Arbeiten mit der Staging-Area
Dateien patch-weise in Staging-Area übernehmen:
git add -p [<file> …]
Jan Dittberner 27. April 2016 24
GIT-KOMMANDOS
LOKALES ARBEITEN
Selektives Arbeiten mit der Staging-Area
Dateien patch-weise in Staging-Area übernehmen:
git add -p [<file> …]
Dateien interaktiv in Staging-Area übernehmen:
git add -i [<file> …]
Jan Dittberner 27. April 2016 24
GIT-KOMMANDOS
LOKALES ARBEITEN
Selektives Arbeiten mit der Staging-Area
Dateien patch-weise in Staging-Area übernehmen:
git add -p [<file> …]
Dateien interaktiv in Staging-Area übernehmen:
git add -i [<file> …]
nur Dateien stagen die schon getrackt werden, gelöschte Dateien aus
Staging-Area entfernen:
git add -u [<file> …]
Jan Dittberner 27. April 2016 24
GIT-KOMMANDOS
LOKALES ARBEITEN
Änderungen übernehmen
Jan Dittberner 27. April 2016 25
GIT-KOMMANDOS
LOKALES ARBEITEN
Änderungen übernehmen
Dateien aus Staging-Area ins lokale Repository übernehmen:
git commit
Jan Dittberner 27. April 2016 25
GIT-KOMMANDOS
LOKALES ARBEITEN
Änderungen übernehmen
Dateien aus Staging-Area ins lokale Repository übernehmen:
git commit
Dateien aus der Arbeitskopie ins lokale Repository übernehmen:
git commit -a
(Abkürzung für git add . ; git commit)
Jan Dittberner 27. April 2016 25
GIT-KOMMANDOS
LOKALES ARBEITEN
git commit
origin
a
b master
user 2
a
b origin/master
master
user 1
a
b origin/master
master
Jan Dittberner 27. April 2016 26
GIT-KOMMANDOS
LOKALES ARBEITEN
git commit
origin
a
b master
user 2
a
b origin/master
master
user 1
a
b origin/master
c master
Jan Dittberner 27. April 2016 26
GIT-KOMMANDOS
LOKALES ARBEITEN
git commit
origin
a
b master
user 1
a
b origin/master
c master
user 2
a
b origin/master
master
Jan Dittberner 27. April 2016 26
GIT-KOMMANDOS
LOKALES ARBEITEN
git commit
origin
a
b master
user 1
a
b origin/master
c master
user 2
a
b origin/master
d master
Jan Dittberner 27. April 2016 26
GIT-KOMMANDOS
LOKALES ARBEITEN
git commit
origin
a
b master
user 1
a
b origin/master
c master
user 2
a
b origin/master
d master
Jan Dittberner 27. April 2016 26
GIT-KOMMANDOS
LOKALES ARBEITEN
Aktionen rückgängig machen
Dateienzustand in Staging-Area verwerfen:
git reset [<file> …]
Jan Dittberner 27. April 2016 27
GIT-KOMMANDOS
LOKALES ARBEITEN
Aktionen rückgängig machen
Dateienzustand in Staging-Area verwerfen:
git reset [<file> …]
Dateien in Working Copy zurücksetzen:
git checkout [<file> …]
Jan Dittberner 27. April 2016 27
GIT-KOMMANDOS
LOKALES ARBEITEN
Aktionen rückgängig machen
Dateienzustand in Staging-Area verwerfen:
git reset [<file> …]
Dateien in Working Copy zurücksetzen:
git checkout [<file> …]
Working Copy verwerfen:
git reset --hard HEAD
Jan Dittberner 27. April 2016 27
GIT-KOMMANDOS
LOKALES ARBEITEN
Aktionen rückgängig machen
Dateienzustand in Staging-Area verwerfen:
git reset [<file> …]
Dateien in Working Copy zurücksetzen:
git checkout [<file> …]
Working Copy verwerfen:
git reset --hard HEAD
Commit erzeugen, der anderen Commit rückgängig macht:
git revert [<commitid>]
Jan Dittberner 27. April 2016 27
Teil II
GIT-ARBEITSWEISE
Jan Dittberner 27. April 2016 28
Branches, Tags, Merge und Rebase
Repository-Organisation
Hooks
FAQ
Weiterführendes
Jan Dittberner 27. April 2016 29
BRANCHES, TAGS, MERGE UND REBASE
Allgemeines zu Branches
Exkurs: Revision-Spezifikation
Tags
Stash (Git-Kommando)
Branching-Modelle
Merging
Merge-Tools
Cherry-Picking
Rebasing
Merging von Commits in mehrere Branches
Patch-Workflow
Jan Dittberner 27. April 2016 30
BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Branches nutzen z.B. für:
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Branches nutzen z.B. für:
Ausprobieren von
Änderungen/Experimente
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Branches nutzen z.B. für:
Ausprobieren von
Änderungen/Experimente
Isolation von Features
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Branches nutzen z.B. für:
Ausprobieren von
Änderungen/Experimente
Isolation von Features
Umschalten zwischen Aufgaben
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Branches nutzen z.B. für:
Ausprobieren von
Änderungen/Experimente
Isolation von Features
Umschalten zwischen Aufgaben
Releases
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Branches nutzen z.B. für:
Ausprobieren von
Änderungen/Experimente
Isolation von Features
Umschalten zwischen Aufgaben
Releases
Qualitätssicherung
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Branches nutzen z.B. für:
Ausprobieren von
Änderungen/Experimente
Isolation von Features
Umschalten zwischen Aufgaben
Releases
Qualitätssicherung
Wartungsbranches
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Kommandos
git branch <branchname >
git checkout <branchname >
git checkout -b <branchname >
git branch -d <branchname >
git branch
git branch -D <branchname >
git show-branch
Jan Dittberner 27. April 2016 32
BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
git help rev-parse
Jan Dittberner 27. April 2016 33
BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
git help rev-parse
verwendbar für viele Operationen (log, push/pull, diff, …)
Jan Dittberner 27. April 2016 33
BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
git help rev-parse
verwendbar für viele Operationen (log, push/pull, diff, …)
<sha1> (auch abgekürzt) für Blobs, Commits, Trees
Jan Dittberner 27. April 2016 33
BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
git help rev-parse
verwendbar für viele Operationen (log, push/pull, diff, …)
<sha1> (auch abgekürzt) für Blobs, Commits, Trees
<refname> z.B.:
Jan Dittberner 27. April 2016 33
BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
git help rev-parse
verwendbar für viele Operationen (log, push/pull, diff, …)
<sha1> (auch abgekürzt) für Blobs, Commits, Trees
<refname> z.B.:
master, heads/master, refs/heads/master für lokale Branches
Jan Dittberner 27. April 2016 33
BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
git help rev-parse
verwendbar für viele Operationen (log, push/pull, diff, …)
<sha1> (auch abgekürzt) für Blobs, Commits, Trees
<refname> z.B.:
master, heads/master, refs/heads/master für lokale Branches
r1.1, refs/tags/r1.1 für Tags
Jan Dittberner 27. April 2016 33
BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
git help rev-parse
verwendbar für viele Operationen (log, push/pull, diff, …)
<sha1> (auch abgekürzt) für Blobs, Commits, Trees
<refname> z.B.:
master, heads/master, refs/heads/master für lokale Branches
r1.1, refs/tags/r1.1 für Tags
origin/development oder refs/remotes/origin/development für
Remote-Tracking-Branches
Jan Dittberner 27. April 2016 33
BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
Informationen zu Branches
Commits in Branch
git log <branchname>
Jan Dittberner 27. April 2016 34
BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
Informationen zu Branches
Commits in Branch
git log <branchname>
Commits in development die nicht in master sind:
git log master..development
Jan Dittberner 27. April 2016 34
BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
Informationen zu Branches
Commits in Branch
git log <branchname>
Commits in development die nicht in master sind:
git log master..development
Unterschied zwischen development und master:
git diff master..development
Jan Dittberner 27. April 2016 34
BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
Informationen zu Branches
Commits in Branch
git log <branchname>
Commits in development die nicht in master sind:
git log master..development
Unterschied zwischen development und master:
git diff master..development
mehr in git help rev-parse unter SPECIFYING REVISIONS und
SPECIFYING RANGES
Jan Dittberner 27. April 2016 34
BRANCHES, TAGS, MERGE UND REBASE
TAGS
Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuen
Commits verschoben)
Jan Dittberner 27. April 2016 35
BRANCHES, TAGS, MERGE UND REBASE
TAGS
Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuen
Commits verschoben)
Anders als bei SVN ist ein Tag kein Branch
Jan Dittberner 27. April 2016 35
BRANCHES, TAGS, MERGE UND REBASE
TAGS
Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuen
Commits verschoben)
Anders als bei SVN ist ein Tag kein Branch
kann (mit GnuPG/PGP) signiert werden
Jan Dittberner 27. April 2016 35
BRANCHES, TAGS, MERGE UND REBASE
TAGS
Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuen
Commits verschoben)
Anders als bei SVN ist ein Tag kein Branch
kann (mit GnuPG/PGP) signiert werden
Verwendung als Marker (z.B. für bestimmte Jenkins-Workflows)
Jan Dittberner 27. April 2016 35
BRANCHES, TAGS, MERGE UND REBASE
TAGS
Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuen
Commits verschoben)
Anders als bei SVN ist ein Tag kein Branch
kann (mit GnuPG/PGP) signiert werden
Verwendung als Marker (z.B. für bestimmte Jenkins-Workflows)
Verwendung für Markierung von Lieferständen/Releases
Jan Dittberner 27. April 2016 35
BRANCHES, TAGS, MERGE UND REBASE
STASH (GIT-KOMMANDO)
kurzes Zwischenlagern von Änderungen an der Working Copy
Jan Dittberner 27. April 2016 36
BRANCHES, TAGS, MERGE UND REBASE
STASH (GIT-KOMMANDO)
kurzes Zwischenlagern von Änderungen an der Working Copy
rein lokal
Jan Dittberner 27. April 2016 36
BRANCHES, TAGS, MERGE UND REBASE
STASH (GIT-KOMMANDO)
kurzes Zwischenlagern von Änderungen an der Working Copy
rein lokal
kann zum Transplantieren in andere Branches genutzt werden
Jan Dittberner 27. April 2016 36
BRANCHES, TAGS, MERGE UND REBASE
STASH (GIT-KOMMANDO)
kurzes Zwischenlagern von Änderungen an der Working Copy
rein lokal
kann zum Transplantieren in andere Branches genutzt werden
funktioniert wie ein Stack
Jan Dittberner 27. April 2016 36
BRANCHES, TAGS, MERGE UND REBASE
STASH (GIT-KOMMANDO)
kurzes Zwischenlagern von Änderungen an der Working Copy
rein lokal
kann zum Transplantieren in andere Branches genutzt werden
funktioniert wie ein Stack
Kommandos:
git stash [save]
git stash pop
git stash apply
Jan Dittberner 27. April 2016 36
BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
SVN-like (Entwicklungsbranch + ggf. Release-Branches)
Jan Dittberner 27. April 2016 37
BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
SVN-like (Entwicklungsbranch + ggf. Release-Branches)
evtl. + QA-Branch, z.B. für Integration mit CI-Tools wie Jenkins
Jan Dittberner 27. April 2016 37
BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
SVN-like (Entwicklungsbranch + ggf. Release-Branches)
evtl. + QA-Branch, z.B. für Integration mit CI-Tools wie Jenkins
Feature-Branches, User-Branches
Jan Dittberner 27. April 2016 37
BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
SVN-like (Entwicklungsbranch + ggf. Release-Branches)
evtl. + QA-Branch, z.B. für Integration mit CI-Tools wie Jenkins
Feature-Branches, User-Branches
+ Bugfix-Branches
Jan Dittberner 27. April 2016 37
BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
SVN-like (Entwicklungsbranch + ggf. Release-Branches)
evtl. + QA-Branch, z.B. für Integration mit CI-Tools wie Jenkins
Feature-Branches, User-Branches
+ Bugfix-Branches
…
Jan Dittberner 27. April 2016 37
BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
git-flow
Best Practice für Arbeit mit Feature-Branches, Hotfixes, Releases, Tags
Jan Dittberner 27. April 2016 38
BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
git-flow
Best Practice für Arbeit mit Feature-Branches, Hotfixes, Releases, Tags
beschrieben in „A successful git branching model“ [5]
Jan Dittberner 27. April 2016 38
BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
git-flow
Best Practice für Arbeit mit Feature-Branches, Hotfixes, Releases, Tags
beschrieben in „A successful git branching model“ [5]
Tool-Unterstützung für shell mit git-flow [6]
git flow feature
git flow release
Jan Dittberner 27. April 2016 38
BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
git-flow
Best Practice für Arbeit mit Feature-Branches, Hotfixes, Releases, Tags
beschrieben in „A successful git branching model“ [5]
Tool-Unterstützung für shell mit git-flow [6]
git flow feature
git flow release
Unterstützung in Atlassian SourceTree [7]
Jan Dittberner 27. April 2016 38
BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
git-flow
Best Practice für Arbeit mit Feature-Branches, Hotfixes, Releases, Tags
beschrieben in „A successful git branching model“ [5]
Tool-Unterstützung für shell mit git-flow [6]
git flow feature
git flow release
Unterstützung in Atlassian SourceTree [7]
Unterstützung in Eclipse EGit [8]
Jan Dittberner 27. April 2016 38
BRANCHES, TAGS, MERGE UND REBASE
MERGING
Content-Tracking statt Patch-Serie
(wie z.B. bei SVN)
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 39
BRANCHES, TAGS, MERGE UND REBASE
MERGING
Content-Tracking statt Patch-Serie
(wie z.B. bei SVN)
es existieren mehrere
Merge-Strategien (Standard
recursive, mehr unter git help
merge)
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 39
BRANCHES, TAGS, MERGE UND REBASE
MERGING
Content-Tracking statt Patch-Serie
(wie z.B. bei SVN)
es existieren mehrere
Merge-Strategien (Standard
recursive, mehr unter git help
merge)
Mergekonflikte müssen wie bei
anderen VCS aufgelöst werden, dafür
können Tools eingebunden werden
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 39
BRANCHES, TAGS, MERGE UND REBASE
MERGING
Content-Tracking statt Patch-Serie
(wie z.B. bei SVN)
es existieren mehrere
Merge-Strategien (Standard
recursive, mehr unter git help
merge)
Mergekonflikte müssen wie bei
anderen VCS aufgelöst werden, dafür
können Tools eingebunden werden
Kommando: git merge
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 39
BRANCHES, TAGS, MERGE UND REBASE
MERGING
ACHTUNG:
Wenn ein Merge abgebrochen werden soll, statt
den Mergekonflikt zu lösen (z.B. mit git reset
--hard), IMMER git merge --abort
benutzen, da sonst der nachfolgende Commit
automatisch ein Merge-Commit wird und die
Änderungen aus dem ursprünglich für den Merge
vorgesehenen Branch dann nicht enthalten sind.
Jan Dittberner 27. April 2016 40
BRANCHES, TAGS, MERGE UND REBASE
MERGE-TOOLS
Jan Dittberner 27. April 2016 41
BRANCHES, TAGS, MERGE UND REBASE
MERGE-TOOLS
Eclipse mit EGit [8]
Jan Dittberner 27. April 2016 41
BRANCHES, TAGS, MERGE UND REBASE
MERGE-TOOLS
Eclipse mit EGit [8]
TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert)
Jan Dittberner 27. April 2016 41
BRANCHES, TAGS, MERGE UND REBASE
MERGE-TOOLS
Eclipse mit EGit [8]
TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert)
vimdiff
Jan Dittberner 27. April 2016 41
BRANCHES, TAGS, MERGE UND REBASE
MERGE-TOOLS
Eclipse mit EGit [8]
TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert)
vimdiff
…
Jan Dittberner 27. April 2016 41
BRANCHES, TAGS, MERGE UND REBASE
MERGE-TOOLS
Eclipse mit EGit [8]
TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert)
vimdiff
…
Standard-Merge-Tool kann konfiguriert (git help config, Suchbegriff
merge.tool) und über git mergetool aufgerufen werden
Jan Dittberner 27. April 2016 41
BRANCHES, TAGS, MERGE UND REBASE
CHERRY-PICKING
Jan Dittberner 27. April 2016 42
BRANCHES, TAGS, MERGE UND REBASE
CHERRY-PICKING
einzelne Commits aus anderem Branch in aktuellen Branch übernehmen
Jan Dittberner 27. April 2016 42
BRANCHES, TAGS, MERGE UND REBASE
CHERRY-PICKING
einzelne Commits aus anderem Branch in aktuellen Branch übernehmen
z.B. für Hotfixes
Jan Dittberner 27. April 2016 42
BRANCHES, TAGS, MERGE UND REBASE
CHERRY-PICKING
einzelne Commits aus anderem Branch in aktuellen Branch übernehmen
z.B. für Hotfixes
git cherry-pick <commits> (<commits> kann mit Rev-Spezifikation
definiert werden)
Jan Dittberner 27. April 2016 42
BRANCHES, TAGS, MERGE UND REBASE
REBASING
Jan Dittberner 27. April 2016 43
BRANCHES, TAGS, MERGE UND REBASE
REBASING
History eines (lokalen) Branches
umpflanzen
Jan Dittberner 27. April 2016 43
BRANCHES, TAGS, MERGE UND REBASE
REBASING
History eines (lokalen) Branches
umpflanzen
git rebase <branchname>
Jan Dittberner 27. April 2016 43
BRANCHES, TAGS, MERGE UND REBASE
REBASING
History eines (lokalen) Branches
umpflanzen
git rebase <branchname>
ACHTUNG: rebasing von bereits
publizierten Branches ist BÖSE
Jan Dittberner 27. April 2016 43
BRANCHES, TAGS, MERGE UND REBASE
MERGING VON COMMITS IN MEHRERE BRANCHES
Jan Dittberner 27. April 2016 44
BRANCHES, TAGS, MERGE UND REBASE
MERGING VON COMMITS IN MEHRERE BRANCHES
Mehrere Varianten:
Jan Dittberner 27. April 2016 44
BRANCHES, TAGS, MERGE UND REBASE
MERGING VON COMMITS IN MEHRERE BRANCHES
Mehrere Varianten:
git checkout <branch> und git merge <feature>
Jan Dittberner 27. April 2016 44
BRANCHES, TAGS, MERGE UND REBASE
MERGING VON COMMITS IN MEHRERE BRANCHES
Mehrere Varianten:
git checkout <branch> und git merge <feature>
git cherry-pick
Jan Dittberner 27. April 2016 44
BRANCHES, TAGS, MERGE UND REBASE
MERGING VON COMMITS IN MEHRERE BRANCHES
Mehrere Varianten:
git checkout <branch> und git merge <feature>
git cherry-pick
git stash und git stash apply in mehrere Branches
Jan Dittberner 27. April 2016 44
BRANCHES, TAGS, MERGE UND REBASE
MERGING VON COMMITS IN MEHRERE BRANCHES
Mehrere Varianten:
git checkout <branch> und git merge <feature>
git cherry-pick
git stash und git stash apply in mehrere Branches
Tipp:
git rerere Aufzeichnung/Replay von Merge-Konflikt-Behebungen
Jan Dittberner 27. April 2016 44
BRANCHES, TAGS, MERGE UND REBASE
PATCH-WORKFLOW
Neben git merge kann auch mit Patches gearbeitet werden:
git format-patch zum Erstellen,
git send-email zum Versenden von Patch-Serien,
git am (Apply Mail) zum Integrieren
Diese Vorgehensweise kommt noch recht häufig bei Free/Open Source Software
Projekten zum Einsatz
Jan Dittberner 27. April 2016 45
REPOSITORY-ORGANISATION
gebräuchliche Repository-Strukturen
Interaktion mit Repositories
Jan Dittberner 27. April 2016 46
REPOSITORY-ORGANISATION
GEBRÄUCHLICHE REPOSITORY-STRUKTUREN
zentrales Repository mit Entwickler-Clones (wie SVN)
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 47
REPOSITORY-ORGANISATION
GEBRÄUCHLICHE REPOSITORY-STRUKTUREN
mehrere zentrale Repositories (z.B. für QA, Entwickler, Kunden, …)
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 48
REPOSITORY-ORGANISATION
GEBRÄUCHLICHE REPOSITORY-STRUKTUREN
mehrstufige Repositories (Dictator, Lieutenant)
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 49
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
Klone erstellen
git clone <url>
Jan Dittberner 27. April 2016 50
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
Klone erstellen
git clone <url>
Umgang mit Remotes
Jan Dittberner 27. April 2016 50
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
Klone erstellen
git clone <url>
Umgang mit Remotes
hinzufügen
git remote add
Jan Dittberner 27. April 2016 50
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
Klone erstellen
git clone <url>
Umgang mit Remotes
hinzufügen
git remote add
löschen
git remote rm
Jan Dittberner 27. April 2016 50
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
Klone erstellen
git clone <url>
Umgang mit Remotes
hinzufügen
git remote add
löschen
git remote rm
Branches von remote abrufen
git fetch <remote> <branch>
Jan Dittberner 27. April 2016 50
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
Klone erstellen
git clone <url>
Umgang mit Remotes
hinzufügen
git remote add
löschen
git remote rm
Branches von remote abrufen
git fetch <remote> <branch>
Branch abrufen und mit HEAD mergen
git pull
Jan Dittberner 27. April 2016 50
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
Klone erstellen
git clone <url>
Umgang mit Remotes
hinzufügen
git remote add
löschen
git remote rm
Branches von remote abrufen
git fetch <remote> <branch>
Branch abrufen und mit HEAD mergen
git pull
lokale Commits/Tags publizieren
git push
Jan Dittberner 27. April 2016 50
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git clone
origin
a
b master
Jan Dittberner 27. April 2016 51
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git clone
origin
a
b master
user 1
a
b origin/master
master
Jan Dittberner 27. April 2016 51
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git clone
origin
a
b master
user 1
a
b origin/master
master
user 2
a
b origin/master
master
Jan Dittberner 27. April 2016 51
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git commit
origin
a
b master
user 2
a
b origin/master
master
user 1
a
b origin/master
master
Jan Dittberner 27. April 2016 52
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git commit
origin
a
b master
user 2
a
b origin/master
master
user 1
a
b origin/master
c master
Jan Dittberner 27. April 2016 52
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git commit
origin
a
b master
user 1
a
b origin/master
c master
user 2
a
b origin/master
master
Jan Dittberner 27. April 2016 52
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git commit
origin
a
b master
user 1
a
b origin/master
c master
user 2
a
b origin/master
d master
Jan Dittberner 27. April 2016 52
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git commit
origin
a
b master
user 1
a
b origin/master
c master
user 2
a
b origin/master
d master
Jan Dittberner 27. April 2016 52
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git push
origin
a
b master
user 1
a
b origin/master
c master
user 2
a
b origin/master
d master
Jan Dittberner 27. April 2016 53
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git push
origin
a
b
c master
user 1
a
b
c origin/master
master
user 2
a
b origin/master
d master
Jan Dittberner 27. April 2016 53
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git push
origin
a
b
c master
user 1
a
b
c origin/master
master
user 2
a
b origin/master
d master
Jan Dittberner 27. April 2016 53
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git push
origin
a
b
c master
user 1
a
b
c origin/master
master
user 2
a
b origin/master
d master
Jan Dittberner 27. April 2016 53
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git pull, git fetch + git merge
origin
a
b
c master
user 1
a
b
c origin/master
master
user 2
a
b origin/master
d master
Jan Dittberner 27. April 2016 54
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git pull, git fetch + git merge
origin
a
b
c master
user 1
a
b
c origin/master
master
user 2
a
b
d c origin/mastermaster
Jan Dittberner 27. April 2016 54
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git pull, git fetch + git merge
origin
a
b
c master
user 1
a
b
c origin/master
master
user 2
a
b
d c
e
origin/master
master
Jan Dittberner 27. April 2016 54
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git pull -r, git fetch + git rebase
origin
a
b
c master
user 1
a
b
c origin/master
master
user 2
a
b origin/master
d master
Jan Dittberner 27. April 2016 55
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git pull -r, git fetch + git rebase
origin
a
b
c master
user 1
a
b
c origin/master
master
user 2
a
b
d c origin/mastermaster
Jan Dittberner 27. April 2016 55
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git pull -r, git fetch + git rebase
origin
a
b
c master
user 1
a
b
c origin/master
master
user 2
a
b
cd origin/mastermaster
Jan Dittberner 27. April 2016 55
REPOSITORY-ORGANISATION
INTERAKTION MIT REPOSITORIES
git pull -r, git fetch + git rebase
origin
a
b
c master
user 1
a
b
c origin/master
master
user 2
a
b
c
d
origin/master
master
Jan Dittberner 27. April 2016 55
HOOKS
Jan Dittberner 27. April 2016 56
HOOKS
Skripte in .git/hooks für Eingriff in verschiedenen Phasen
Jan Dittberner 27. April 2016 57
HOOKS
Skripte in .git/hooks für Eingriff in verschiedenen Phasen
lokal für jeweiliges Repository
Jan Dittberner 27. April 2016 57
HOOKS
Skripte in .git/hooks für Eingriff in verschiedenen Phasen
lokal für jeweiliges Repository
werden bei git clone nicht kopiert
Jan Dittberner 27. April 2016 57
HOOKS
Skripte in .git/hooks für Eingriff in verschiedenen Phasen
lokal für jeweiliges Repository
werden bei git clone nicht kopiert
git help hooks
Jan Dittberner 27. April 2016 57
FAQ
Frequently Asked Questions
Jan Dittberner 27. April 2016 58
FAQ
FREQUENTLY ASKED QUESTIONS
Wie geht Git mit symbolischen Links um?
Git behandelt Symlinks als Verweise auf Pfade (wie UNIX):
Jan Dittberner 27. April 2016 59
FAQ
FREQUENTLY ASKED QUESTIONS
Wie geht Git mit symbolischen Links um?
Git behandelt Symlinks als Verweise auf Pfade (wie UNIX):
Linux / UNIX / MacOS-X: funktioniert einfach
Jan Dittberner 27. April 2016 59
FAQ
FREQUENTLY ASKED QUESTIONS
Wie geht Git mit symbolischen Links um?
Git behandelt Symlinks als Verweise auf Pfade (wie UNIX):
Linux / UNIX / MacOS-X: funktioniert einfach
Windows mit cygwin git: funktioniert nur innerhalb von cygwin
Jan Dittberner 27. April 2016 59
FAQ
FREQUENTLY ASKED QUESTIONS
Wie geht Git mit symbolischen Links um?
Git behandelt Symlinks als Verweise auf Pfade (wie UNIX):
Linux / UNIX / MacOS-X: funktioniert einfach
Windows mit cygwin git: funktioniert nur innerhalb von cygwin
Windows mit git for Windows: es wird eine Datei mit dem Verweisziel des
Symlinks als Inhalt angelegt
Jan Dittberner 27. April 2016 59
FAQ
FREQUENTLY ASKED QUESTIONS
Wie geht Git mit symbolischen Links um?
Git behandelt Symlinks als Verweise auf Pfade (wie UNIX):
Linux / UNIX / MacOS-X: funktioniert einfach
Windows mit cygwin git: funktioniert nur innerhalb von cygwin
Windows mit git for Windows: es wird eine Datei mit dem Verweisziel des
Symlinks als Inhalt angelegt
Fazit: Vermeiden, wenn das Repository auf Windows-Clients bearbeitet werden muss
Jan Dittberner 27. April 2016 59
FAQ
FREQUENTLY ASKED QUESTIONS
Wie lösche ich einen Remote-Branch?
Jan Dittberner 27. April 2016 60
FAQ
FREQUENTLY ASKED QUESTIONS
Wie lösche ich einen Remote-Branch?
git push --delete <remote> <branch>
Jan Dittberner 27. April 2016 60
FAQ
FREQUENTLY ASKED QUESTIONS
Kann Git mit großen Binaries umgehen?
Jan Dittberner 27. April 2016 61
FAQ
FREQUENTLY ASKED QUESTIONS
Kann Git mit großen Binaries umgehen?
Große Binaries sollten nicht direkt in Git-Repositories liegen
Jan Dittberner 27. April 2016 61
FAQ
FREQUENTLY ASKED QUESTIONS
Kann Git mit großen Binaries umgehen?
Große Binaries sollten nicht direkt in Git-Repositories liegen
Metadaten können in Git mitverwaltet werden
Jan Dittberner 27. April 2016 61
FAQ
FREQUENTLY ASKED QUESTIONS
Kann Git mit großen Binaries umgehen?
Große Binaries sollten nicht direkt in Git-Repositories liegen
Metadaten können in Git mitverwaltet werden
Toolunterstützung z.B. git-lfs und git-annex (nur Linux)
Jan Dittberner 27. April 2016 61
WEITERFÜHRENDES
Jan Dittberner 27. April 2016 62
WEITERFÜHRENDES
Webseiten
Git-Webseite [10]
Git Cheatsheet [11]
Jan Dittberner 27. April 2016 63
WEITERFÜHRENDES
Bücher
Version Control with Git [12]
Pro Git [4] (auch kostenlos online lesbar)
Git: Dezentrale Versionsverwaltung im Team [13]
Jan Dittberner 27. April 2016 64
LITERATUR
Cygwin. URL: http://www.cygwin.com/.
Git for Windows. URL: https://git-for-windows.github.io/.
Mac OS-X Installer for Git. URL: http://git-scm.com/download/mac.
Scott Chacon and Ben Straub. Pro Git 2nd ed. 2014 Edition. Apress, 2014.
ISBN: 978-1-48420-077-3. URL: http://git-scm.com/book/.
Vincent Driessen. A successful Git branching model. 2010. URL: http:
//nvie.com/posts/a-successful-git-branching-model/.
Vincent Driessen. gitflow. URL: https://github.com/nvie/gitflow.
Jan Dittberner 27. April 2016 65
LITERATUR
Atlassian SourceTree, A free Mercurial and Git client for Windows or Mac.
URL: http://atlassian.com/software/sourcetree/overview.
EGit -- Eclipse Integration for Git. URL:
http://www.eclipse.org/egit/.
TortoiseGit. URL: https://tortoisegit.org/.
Git project website. URL: http://www.git-scm.com/.
Git Cheatsheet -- Categorize Git's commands based on what they affect.
URL: http://ndpsoftware.com/git-cheatsheet.html.
Jan Dittberner 27. April 2016 66
LITERATUR
Jon Loeliger and Matthew McCullough. Version Control with Git, 2nd Edition.
O’Reilly Media, 2012. ISBN: 978-1-4493-1638-9. URL:
http://shop.oreilly.com/product/0636920022862.do.
René Preißel and Bjørn Stachmann. Git: Dezentrale Versionverwaltung im
Team - Grundlagen und Workflows, 3. Auflage. dpunkt.verlag GmbH, 2015.
ISBN: 978-3-86490-311-3. URL:
http://www.dpunkt.de/buecher/5040/9783864903113-git-
12151.html.
Jan Dittberner 27. April 2016 67
KONTAKT
Jan Dittberner
E-Mail: jan.dittberner@t-systems.com
Telefon: +49-351-2802-2737
Twitter/Identi.ca: @jandd
Jan Dittberner 27. April 2016 68

Weitere ähnliche Inhalte

Andere mochten auch

Software Language Design & Engineering: Mobl & Spoofax
Software Language Design & Engineering: Mobl & SpoofaxSoftware Language Design & Engineering: Mobl & Spoofax
Software Language Design & Engineering: Mobl & SpoofaxEelco Visser
 
Transforming Software Development
Transforming Software Development Transforming Software Development
Transforming Software Development Amazon Web Services
 
#win8acad : Tiles and notifications
#win8acad : Tiles and notifications#win8acad : Tiles and notifications
#win8acad : Tiles and notificationsFrederik De Bruyne
 
Rethinking The Business Benefits of The Cloud
Rethinking The Business Benefits of The CloudRethinking The Business Benefits of The Cloud
Rethinking The Business Benefits of The CloudMicrosoft Azure
 
Empirical Software Engineering at Microsoft Research
Empirical Software Engineering at Microsoft ResearchEmpirical Software Engineering at Microsoft Research
Empirical Software Engineering at Microsoft ResearchThomas Zimmermann
 
Can we induce change with what we measure?
Can we induce change with what we measure?Can we induce change with what we measure?
Can we induce change with what we measure?Michaela Greiler
 
Feedback on AWS re:invent 2016
Feedback on AWS re:invent 2016Feedback on AWS re:invent 2016
Feedback on AWS re:invent 2016Laurent Bernaille
 
DevDay 2016: Dave Farley - Acceptance testing for continuous delivery
DevDay 2016: Dave Farley - Acceptance testing for continuous deliveryDevDay 2016: Dave Farley - Acceptance testing for continuous delivery
DevDay 2016: Dave Farley - Acceptance testing for continuous deliveryDevDay Dresden
 
DevDay 2016: Dave Farley - The Rationale for Continuous Delivery
DevDay 2016: Dave Farley - The Rationale for Continuous DeliveryDevDay 2016: Dave Farley - The Rationale for Continuous Delivery
DevDay 2016: Dave Farley - The Rationale for Continuous DeliveryDevDay Dresden
 
It transformation - DevOps Day - 02/02/2017
It transformation - DevOps Day - 02/02/2017It transformation - DevOps Day - 02/02/2017
It transformation - DevOps Day - 02/02/2017Clara Feuillet
 
DevDay 2016: Artur Speth - DevOps - Microsoft Developer Divisions Weg ins näc...
DevDay 2016: Artur Speth - DevOps - Microsoft Developer Divisions Weg ins näc...DevDay 2016: Artur Speth - DevOps - Microsoft Developer Divisions Weg ins näc...
DevDay 2016: Artur Speth - DevOps - Microsoft Developer Divisions Weg ins näc...DevDay Dresden
 
Container microservices
Container microservicesContainer microservices
Container microservicesTsuyoshi Ushio
 
AWS re:Invent 2016 Recap: What Happened, What It Means
AWS re:Invent 2016 Recap: What Happened, What It MeansAWS re:Invent 2016 Recap: What Happened, What It Means
AWS re:Invent 2016 Recap: What Happened, What It MeansRightScale
 
AWS re:Invent 2016 Fast Forward
AWS re:Invent 2016 Fast ForwardAWS re:Invent 2016 Fast Forward
AWS re:Invent 2016 Fast ForwardShuen-Huei Guan
 
Devopsguys DevOps 101 for recruiters
Devopsguys   DevOps 101 for recruitersDevopsguys   DevOps 101 for recruiters
Devopsguys DevOps 101 for recruitersDevOpsGroup
 
Microsoft Azure & Hybrid Cloud
Microsoft Azure & Hybrid CloudMicrosoft Azure & Hybrid Cloud
Microsoft Azure & Hybrid CloudAidan Finn
 

Andere mochten auch (17)

Software Language Design & Engineering: Mobl & Spoofax
Software Language Design & Engineering: Mobl & SpoofaxSoftware Language Design & Engineering: Mobl & Spoofax
Software Language Design & Engineering: Mobl & Spoofax
 
Transforming Software Development
Transforming Software Development Transforming Software Development
Transforming Software Development
 
#win8acad : Tiles and notifications
#win8acad : Tiles and notifications#win8acad : Tiles and notifications
#win8acad : Tiles and notifications
 
Chowdhury webtech
Chowdhury webtechChowdhury webtech
Chowdhury webtech
 
Rethinking The Business Benefits of The Cloud
Rethinking The Business Benefits of The CloudRethinking The Business Benefits of The Cloud
Rethinking The Business Benefits of The Cloud
 
Empirical Software Engineering at Microsoft Research
Empirical Software Engineering at Microsoft ResearchEmpirical Software Engineering at Microsoft Research
Empirical Software Engineering at Microsoft Research
 
Can we induce change with what we measure?
Can we induce change with what we measure?Can we induce change with what we measure?
Can we induce change with what we measure?
 
Feedback on AWS re:invent 2016
Feedback on AWS re:invent 2016Feedback on AWS re:invent 2016
Feedback on AWS re:invent 2016
 
DevDay 2016: Dave Farley - Acceptance testing for continuous delivery
DevDay 2016: Dave Farley - Acceptance testing for continuous deliveryDevDay 2016: Dave Farley - Acceptance testing for continuous delivery
DevDay 2016: Dave Farley - Acceptance testing for continuous delivery
 
DevDay 2016: Dave Farley - The Rationale for Continuous Delivery
DevDay 2016: Dave Farley - The Rationale for Continuous DeliveryDevDay 2016: Dave Farley - The Rationale for Continuous Delivery
DevDay 2016: Dave Farley - The Rationale for Continuous Delivery
 
It transformation - DevOps Day - 02/02/2017
It transformation - DevOps Day - 02/02/2017It transformation - DevOps Day - 02/02/2017
It transformation - DevOps Day - 02/02/2017
 
DevDay 2016: Artur Speth - DevOps - Microsoft Developer Divisions Weg ins näc...
DevDay 2016: Artur Speth - DevOps - Microsoft Developer Divisions Weg ins näc...DevDay 2016: Artur Speth - DevOps - Microsoft Developer Divisions Weg ins näc...
DevDay 2016: Artur Speth - DevOps - Microsoft Developer Divisions Weg ins näc...
 
Container microservices
Container microservicesContainer microservices
Container microservices
 
AWS re:Invent 2016 Recap: What Happened, What It Means
AWS re:Invent 2016 Recap: What Happened, What It MeansAWS re:Invent 2016 Recap: What Happened, What It Means
AWS re:Invent 2016 Recap: What Happened, What It Means
 
AWS re:Invent 2016 Fast Forward
AWS re:Invent 2016 Fast ForwardAWS re:Invent 2016 Fast Forward
AWS re:Invent 2016 Fast Forward
 
Devopsguys DevOps 101 for recruiters
Devopsguys   DevOps 101 for recruitersDevopsguys   DevOps 101 for recruiters
Devopsguys DevOps 101 for recruiters
 
Microsoft Azure & Hybrid Cloud
Microsoft Azure & Hybrid CloudMicrosoft Azure & Hybrid Cloud
Microsoft Azure & Hybrid Cloud
 

Mehr von DevDay Dresden

The Architecture of Uncertainty - Kevlin Henney
The Architecture of Uncertainty - Kevlin HenneyThe Architecture of Uncertainty - Kevlin Henney
The Architecture of Uncertainty - Kevlin HenneyDevDay Dresden
 
Dev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
Dev Day 2021 - Stephan Pirnbaum - AnwendungsmodernisierungDev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
Dev Day 2021 - Stephan Pirnbaum - AnwendungsmodernisierungDevDay Dresden
 
Tobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-Projekten
Tobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-ProjektenTobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-Projekten
Tobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-ProjektenDevDay Dresden
 
Andreas Roth - GraphQL erfolgreich im Backend einsetzen
Andreas Roth - GraphQL erfolgreich im Backend einsetzenAndreas Roth - GraphQL erfolgreich im Backend einsetzen
Andreas Roth - GraphQL erfolgreich im Backend einsetzenDevDay Dresden
 
Alexander Reelsen - Seccomp for Developers
Alexander Reelsen - Seccomp for DevelopersAlexander Reelsen - Seccomp for Developers
Alexander Reelsen - Seccomp for DevelopersDevDay Dresden
 
DevDay 19 Accessibility: Praxistipps für Entwickler
DevDay 19 Accessibility: Praxistipps für EntwicklerDevDay 19 Accessibility: Praxistipps für Entwickler
DevDay 19 Accessibility: Praxistipps für EntwicklerDevDay Dresden
 
Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
Dev Day 2019: Phillip Krenn – Aggregierte Logging PatternsDev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
Dev Day 2019: Phillip Krenn – Aggregierte Logging PatternsDevDay Dresden
 
Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...
Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...
Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...DevDay Dresden
 
Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...
Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...
Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...DevDay Dresden
 
Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...
Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...
Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...DevDay Dresden
 
Dev Day 2019: Markus Winand – Die Mutter aller Abfragesprachen: SQL im 21. Ja...
Dev Day 2019: Markus Winand – Die Mutter aller Abfragesprachen: SQL im 21. Ja...Dev Day 2019: Markus Winand – Die Mutter aller Abfragesprachen: SQL im 21. Ja...
Dev Day 2019: Markus Winand – Die Mutter aller Abfragesprachen: SQL im 21. Ja...DevDay Dresden
 
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...DevDay Dresden
 
Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...
Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...
Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...DevDay Dresden
 
Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101
Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101
Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101DevDay Dresden
 
Dev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-Teams
Dev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-TeamsDev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-Teams
Dev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-TeamsDevDay Dresden
 
Dev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den Radverkehr
Dev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den RadverkehrDev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den Radverkehr
Dev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den RadverkehrDevDay Dresden
 
Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...
Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...
Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...DevDay Dresden
 
Dev Day 2019: Martin Schurz - Manual Work Is A Bug!
Dev Day 2019: Martin Schurz - Manual Work Is A Bug!Dev Day 2019: Martin Schurz - Manual Work Is A Bug!
Dev Day 2019: Martin Schurz - Manual Work Is A Bug!DevDay Dresden
 
Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“
Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“
Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“DevDay Dresden
 
Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"
Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"
Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"DevDay Dresden
 

Mehr von DevDay Dresden (20)

The Architecture of Uncertainty - Kevlin Henney
The Architecture of Uncertainty - Kevlin HenneyThe Architecture of Uncertainty - Kevlin Henney
The Architecture of Uncertainty - Kevlin Henney
 
Dev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
Dev Day 2021 - Stephan Pirnbaum - AnwendungsmodernisierungDev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
Dev Day 2021 - Stephan Pirnbaum - Anwendungsmodernisierung
 
Tobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-Projekten
Tobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-ProjektenTobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-Projekten
Tobias Nebel - Herausforderungen und Changen in Full-Stack-IoT-Projekten
 
Andreas Roth - GraphQL erfolgreich im Backend einsetzen
Andreas Roth - GraphQL erfolgreich im Backend einsetzenAndreas Roth - GraphQL erfolgreich im Backend einsetzen
Andreas Roth - GraphQL erfolgreich im Backend einsetzen
 
Alexander Reelsen - Seccomp for Developers
Alexander Reelsen - Seccomp for DevelopersAlexander Reelsen - Seccomp for Developers
Alexander Reelsen - Seccomp for Developers
 
DevDay 19 Accessibility: Praxistipps für Entwickler
DevDay 19 Accessibility: Praxistipps für EntwicklerDevDay 19 Accessibility: Praxistipps für Entwickler
DevDay 19 Accessibility: Praxistipps für Entwickler
 
Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
Dev Day 2019: Phillip Krenn – Aggregierte Logging PatternsDev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
Dev Day 2019: Phillip Krenn – Aggregierte Logging Patterns
 
Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...
Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...
Dev Day 2019: Mirko Seifert – Next Level Integration Testing mit Docker und T...
 
Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...
Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...
Dev Day 2019: Nathan Mattes – Kommunikation ist wichtig, scheiße wichtig und ...
 
Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...
Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...
Dev Day 2019: Stephan Birnbaum – Die Glaskugel hat ausgedient, wir machen Sof...
 
Dev Day 2019: Markus Winand – Die Mutter aller Abfragesprachen: SQL im 21. Ja...
Dev Day 2019: Markus Winand – Die Mutter aller Abfragesprachen: SQL im 21. Ja...Dev Day 2019: Markus Winand – Die Mutter aller Abfragesprachen: SQL im 21. Ja...
Dev Day 2019: Markus Winand – Die Mutter aller Abfragesprachen: SQL im 21. Ja...
 
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
 
Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...
Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...
Dev Day 2019: Kathrin Friedrich/Michael Kunze – Design better together - Styl...
 
Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101
Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101
Dev Day 2019: Benjamin Wolf – "Some fixes" - Commit Message 101
 
Dev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-Teams
Dev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-TeamsDev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-Teams
Dev Day 2019: Lucas Fiedler – DevOps-Dashboard: Transparenz für DevOps-Teams
 
Dev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den Radverkehr
Dev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den RadverkehrDev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den Radverkehr
Dev Day 2019: Ulrich Deiters – Offene Daten und IT-Lösungen für den Radverkehr
 
Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...
Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...
Dev Day 2019: Alexander Lichter - JAMstack - Eine neuartige Webanwendungs-Arc...
 
Dev Day 2019: Martin Schurz - Manual Work Is A Bug!
Dev Day 2019: Martin Schurz - Manual Work Is A Bug!Dev Day 2019: Martin Schurz - Manual Work Is A Bug!
Dev Day 2019: Martin Schurz - Manual Work Is A Bug!
 
Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“
Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“
Dev Day 2019: Stefan Schleyer: How to build an cloud-based IoT application“
 
Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"
Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"
Dev Day 2019: Mirko Zeibig – "Hallo " <> "Elixir"
 

Verteilte Versionskontrolle mit Git