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

Verteilte Versionskontrolle mit Git

  • 1.
  • 2.
  • 3.
    AUFBAU GIT-ARBEITSWEISE Branches, Tags, Mergeund Rebase Repository-Organisation Hooks FAQ Weiterführendes Jan Dittberner 27. April 2016 3
  • 5.
  • 6.
  • 7.
  • 8.
    EINLEITUNG WARUM VERSIONSVERWALTUNG Zwischenstände vonDateien sichern Jan Dittberner 27. April 2016 7
  • 9.
    EINLEITUNG WARUM VERSIONSVERWALTUNG Zwischenstände vonDateien sichern Gemeinsames Arbeiten an Dateien Jan Dittberner 27. April 2016 7
  • 10.
    EINLEITUNG WARUM VERSIONSVERWALTUNG Zwischenstände vonDateien sichern Gemeinsames Arbeiten an Dateien Möglichkeit zu alten Dateiversionen zurückzukehren Jan Dittberner 27. April 2016 7
  • 11.
    EINLEITUNG WARUM VERSIONSVERWALTUNG Zwischenstände vonDateien 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
  • 12.
    EINLEITUNG EINE KURZE GESCHICHTEDER VERSIONSVERWALTUNG Jan Dittberner 27. April 2016 8
  • 13.
    EINLEITUNG EINE KURZE GESCHICHTEDER VERSIONSVERWALTUNG Dateien/Verzeichnisse kopieren oldskool.c oldskool-backup-1.c Jan Dittberner 27. April 2016 8
  • 14.
    EINLEITUNG EINE KURZE GESCHICHTEDER VERSIONSVERWALTUNG Dateien/Verzeichnisse kopieren oldskool.c oldskool-backup-1.c Dateibasierte Versionierung SCCS (1972), RCS (Anfang 1980er) Jan Dittberner 27. April 2016 8
  • 15.
    EINLEITUNG EINE KURZE GESCHICHTEDER 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
  • 16.
    EINLEITUNG EINE KURZE GESCHICHTEDER 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
  • 17.
    EINLEITUNG EINE KURZE GESCHICHTEDER VERSIONSVERWALTUNG Git has won Abbildung: Companies and Projects using Git Quelle https://git-scm.com, 26.04.2016 Jan Dittberner 27. April 2016 9
  • 18.
    BASISWISSEN Inhalte von Git-Repositories Installationund Ersteinrichtung Hilfe Jan Dittberner 27. April 2016 10
  • 19.
    BASISWISSEN INHALTE VON GIT-REPOSITORIES IdentifizierbareArtefakte Blob Tree Jan Dittberner 27. April 2016 11
  • 20.
    BASISWISSEN INHALTE VON GIT-REPOSITORIES IdentifizierbareArtefakte Durch SHA1-Hash identifizierbar: Blob (Datei) Tree Commit Blob Tree Jan Dittberner 27. April 2016 11
  • 21.
    BASISWISSEN INHALTE VON GIT-REPOSITORIES IdentifizierbareArtefakte Durch SHA1-Hash identifizierbar: Blob (Datei) Tree Commit Verweise auf Commits: Branches Tags Blob Tree Jan Dittberner 27. April 2016 11
  • 22.
    BASISWISSEN INHALTE VON GIT-REPOSITORIES Bereiche(lokaler) Repositories Jan Dittberner 27. April 2016 12
  • 23.
    BASISWISSEN INHALTE VON GIT-REPOSITORIES Bereiche(lokaler) Repositories Repository mit historischen Daten Jan Dittberner 27. April 2016 12
  • 24.
    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
  • 25.
    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
  • 26.
    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
  • 27.
    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
  • 28.
    BASISWISSEN INHALTE VON GIT-REPOSITORIES Eigenschaftenvon Commits Jan Dittberner 27. April 2016 13
  • 29.
    BASISWISSEN INHALTE VON GIT-REPOSITORIES Eigenschaftenvon Commits gerichteter azyklischer Graph (directed acyclic graph, DAG) Jan Dittberner 27. April 2016 13
  • 30.
    BASISWISSEN INHALTE VON GIT-REPOSITORIES Eigenschaftenvon Commits gerichteter azyklischer Graph (directed acyclic graph, DAG) jeder Commit (außer initialem Commit) hat 1-n Parents Jan Dittberner 27. April 2016 13
  • 31.
    BASISWISSEN INHALTE VON GIT-REPOSITORIES Eigenschaftenvon 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
  • 32.
  • 33.
    BASISWISSEN INHALTE VON GIT-REPOSITORIES Sonstiges Hooks(Skripte) Jan Dittberner 27. April 2016 14
  • 34.
    BASISWISSEN INHALTE VON GIT-REPOSITORIES Sonstiges Hooks(Skripte) .git/config (Repository-lokale Konfiguration) Jan Dittberner 27. April 2016 14
  • 35.
    BASISWISSEN INHALTE VON GIT-REPOSITORIES Sonstiges Hooks(Skripte) .git/config (Repository-lokale Konfiguration) Remotes (Referenzen auf andere Repositories) Jan Dittberner 27. April 2016 14
  • 36.
    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
  • 37.
    BASISWISSEN INSTALLATION UND ERSTEINRICHTUNG gitinstallieren 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
  • 38.
  • 39.
    BASISWISSEN INSTALLATION UND ERSTEINRICHTUNG Setup Werbin ich? git config --global user.name "Jan␣Dittberner" git config --global user.email jan.dittberner@t -systems.com Jan Dittberner 27. April 2016 16
  • 40.
    BASISWISSEN INSTALLATION UND ERSTEINRICHTUNG Setup Werbin 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
  • 41.
    BASISWISSEN HILFE Use the docs! JanDittberner 27. April 2016 17
  • 42.
    BASISWISSEN HILFE Use the docs! git-h Jan Dittberner 27. April 2016 17
  • 43.
    BASISWISSEN HILFE Use the docs! git-h git help oder git --help Jan Dittberner 27. April 2016 17
  • 44.
    BASISWISSEN HILFE Use the docs! git-h git help oder git --help git <command> -h Jan Dittberner 27. April 2016 17
  • 45.
    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
  • 46.
    GIT-KOMMANDOS Repository anlegen Repository klonen lokalesArbeiten Jan Dittberner 27. April 2016 18
  • 47.
  • 48.
    GIT-KOMMANDOS REPOSITORY ANLEGEN neues lokalesEntwicklungsrepository: git init <repo> Jan Dittberner 27. April 2016 19
  • 49.
    GIT-KOMMANDOS REPOSITORY ANLEGEN neues lokalesEntwicklungsrepository: git init <repo> neues lokales Bare-Repository: git init --bare <repo.git> Jan Dittberner 27. April 2016 19
  • 50.
    GIT-KOMMANDOS REPOSITORY KLONEN git clone<repourl> [<target>] origin a b master Jan Dittberner 27. April 2016 20
  • 51.
    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
  • 52.
    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
  • 53.
    GIT-KOMMANDOS LOKALES ARBEITEN Umgang mitder Staging-Area Jan Dittberner 27. April 2016 21
  • 54.
    GIT-KOMMANDOS LOKALES ARBEITEN Umgang mitder Staging-Area Änderungen zur Staging-Area hinzufügen: git add [<file> …] Jan Dittberner 27. April 2016 21
  • 55.
    GIT-KOMMANDOS LOKALES ARBEITEN Umgang mitder Staging-Area Änderungen zur Staging-Area hinzufügen: git add [<file> …] Dateien löschen: git rm [<file> …] Jan Dittberner 27. April 2016 21
  • 56.
  • 57.
    GIT-KOMMANDOS LOKALES ARBEITEN Informationen abfragen AktuellenStatus von Staging-Area und Working Copy: git status Jan Dittberner 27. April 2016 22
  • 58.
    GIT-KOMMANDOS LOKALES ARBEITEN Informationen abfragen AktuellenStatus 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
  • 59.
    GIT-KOMMANDOS LOKALES ARBEITEN Informationen abfragen AktuellenStatus 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
  • 60.
  • 61.
    GIT-KOMMANDOS LOKALES ARBEITEN History ansehen Logfür aktuellen Branch: git log Jan Dittberner 27. April 2016 23
  • 62.
    GIT-KOMMANDOS LOKALES ARBEITEN History ansehen Logfü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
  • 63.
    GIT-KOMMANDOS LOKALES ARBEITEN History ansehen Logfü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
  • 64.
    GIT-KOMMANDOS LOKALES ARBEITEN Selektives Arbeitenmit der Staging-Area Dateien patch-weise in Staging-Area übernehmen: git add -p [<file> …] Jan Dittberner 27. April 2016 24
  • 65.
    GIT-KOMMANDOS LOKALES ARBEITEN Selektives Arbeitenmit 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
  • 66.
    GIT-KOMMANDOS LOKALES ARBEITEN Selektives Arbeitenmit 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
  • 67.
  • 68.
    GIT-KOMMANDOS LOKALES ARBEITEN Änderungen übernehmen Dateienaus Staging-Area ins lokale Repository übernehmen: git commit Jan Dittberner 27. April 2016 25
  • 69.
    GIT-KOMMANDOS LOKALES ARBEITEN Änderungen übernehmen Dateienaus 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
  • 70.
    GIT-KOMMANDOS LOKALES ARBEITEN git commit origin a bmaster user 2 a b origin/master master user 1 a b origin/master master Jan Dittberner 27. April 2016 26
  • 71.
    GIT-KOMMANDOS LOKALES ARBEITEN git commit origin a bmaster user 2 a b origin/master master user 1 a b origin/master c master Jan Dittberner 27. April 2016 26
  • 72.
    GIT-KOMMANDOS LOKALES ARBEITEN git commit origin a bmaster user 1 a b origin/master c master user 2 a b origin/master master Jan Dittberner 27. April 2016 26
  • 73.
    GIT-KOMMANDOS LOKALES ARBEITEN git commit origin a bmaster user 1 a b origin/master c master user 2 a b origin/master d master Jan Dittberner 27. April 2016 26
  • 74.
    GIT-KOMMANDOS LOKALES ARBEITEN git commit origin a bmaster user 1 a b origin/master c master user 2 a b origin/master d master Jan Dittberner 27. April 2016 26
  • 75.
    GIT-KOMMANDOS LOKALES ARBEITEN Aktionen rückgängigmachen Dateienzustand in Staging-Area verwerfen: git reset [<file> …] Jan Dittberner 27. April 2016 27
  • 76.
    GIT-KOMMANDOS LOKALES ARBEITEN Aktionen rückgängigmachen Dateienzustand in Staging-Area verwerfen: git reset [<file> …] Dateien in Working Copy zurücksetzen: git checkout [<file> …] Jan Dittberner 27. April 2016 27
  • 77.
    GIT-KOMMANDOS LOKALES ARBEITEN Aktionen rückgängigmachen 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
  • 78.
    GIT-KOMMANDOS LOKALES ARBEITEN Aktionen rückgängigmachen 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
  • 79.
  • 80.
    Branches, Tags, Mergeund Rebase Repository-Organisation Hooks FAQ Weiterführendes Jan Dittberner 27. April 2016 29
  • 81.
    BRANCHES, TAGS, MERGEUND 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
  • 82.
    BRANCHES, TAGS, MERGEUND 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
  • 83.
    BRANCHES, TAGS, MERGEUND 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
  • 84.
    BRANCHES, TAGS, MERGEUND 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
  • 85.
    BRANCHES, TAGS, MERGEUND 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
  • 86.
    BRANCHES, TAGS, MERGEUND 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
  • 87.
    BRANCHES, TAGS, MERGEUND 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
  • 88.
    BRANCHES, TAGS, MERGEUND 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
  • 89.
    BRANCHES, TAGS, MERGEUND 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
  • 90.
    BRANCHES, TAGS, MERGEUND 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
  • 91.
    BRANCHES, TAGS, MERGEUND REBASE EXKURS: REVISION-SPEZIFIKATION git help rev-parse Jan Dittberner 27. April 2016 33
  • 92.
    BRANCHES, TAGS, MERGEUND REBASE EXKURS: REVISION-SPEZIFIKATION git help rev-parse verwendbar für viele Operationen (log, push/pull, diff, …) Jan Dittberner 27. April 2016 33
  • 93.
    BRANCHES, TAGS, MERGEUND 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
  • 94.
    BRANCHES, TAGS, MERGEUND 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
  • 95.
    BRANCHES, TAGS, MERGEUND 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
  • 96.
    BRANCHES, TAGS, MERGEUND 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
  • 97.
    BRANCHES, TAGS, MERGEUND 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
  • 98.
    BRANCHES, TAGS, MERGEUND REBASE EXKURS: REVISION-SPEZIFIKATION Informationen zu Branches Commits in Branch git log <branchname> Jan Dittberner 27. April 2016 34
  • 99.
    BRANCHES, TAGS, MERGEUND 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
  • 100.
    BRANCHES, TAGS, MERGEUND 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
  • 101.
    BRANCHES, TAGS, MERGEUND 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
  • 102.
    BRANCHES, TAGS, MERGEUND REBASE TAGS Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuen Commits verschoben) Jan Dittberner 27. April 2016 35
  • 103.
    BRANCHES, TAGS, MERGEUND 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
  • 104.
    BRANCHES, TAGS, MERGEUND 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
  • 105.
    BRANCHES, TAGS, MERGEUND 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
  • 106.
    BRANCHES, TAGS, MERGEUND 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
  • 107.
    BRANCHES, TAGS, MERGEUND REBASE STASH (GIT-KOMMANDO) kurzes Zwischenlagern von Änderungen an der Working Copy Jan Dittberner 27. April 2016 36
  • 108.
    BRANCHES, TAGS, MERGEUND REBASE STASH (GIT-KOMMANDO) kurzes Zwischenlagern von Änderungen an der Working Copy rein lokal Jan Dittberner 27. April 2016 36
  • 109.
    BRANCHES, TAGS, MERGEUND 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
  • 110.
    BRANCHES, TAGS, MERGEUND 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
  • 111.
    BRANCHES, TAGS, MERGEUND 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
  • 112.
    BRANCHES, TAGS, MERGEUND REBASE BRANCHING-MODELLE SVN-like (Entwicklungsbranch + ggf. Release-Branches) Jan Dittberner 27. April 2016 37
  • 113.
    BRANCHES, TAGS, MERGEUND 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
  • 114.
    BRANCHES, TAGS, MERGEUND 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
  • 115.
    BRANCHES, TAGS, MERGEUND 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
  • 116.
    BRANCHES, TAGS, MERGEUND 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
  • 117.
    BRANCHES, TAGS, MERGEUND REBASE BRANCHING-MODELLE git-flow Best Practice für Arbeit mit Feature-Branches, Hotfixes, Releases, Tags Jan Dittberner 27. April 2016 38
  • 118.
    BRANCHES, TAGS, MERGEUND 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
  • 119.
    BRANCHES, TAGS, MERGEUND 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
  • 120.
    BRANCHES, TAGS, MERGEUND 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
  • 121.
    BRANCHES, TAGS, MERGEUND 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
  • 122.
    BRANCHES, TAGS, MERGEUND REBASE MERGING Content-Tracking statt Patch-Serie (wie z.B. bei SVN) Quelle: ProGit [4] Jan Dittberner 27. April 2016 39
  • 123.
    BRANCHES, TAGS, MERGEUND 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
  • 124.
    BRANCHES, TAGS, MERGEUND 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
  • 125.
    BRANCHES, TAGS, MERGEUND 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
  • 126.
    BRANCHES, TAGS, MERGEUND 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
  • 127.
    BRANCHES, TAGS, MERGEUND REBASE MERGE-TOOLS Jan Dittberner 27. April 2016 41
  • 128.
    BRANCHES, TAGS, MERGEUND REBASE MERGE-TOOLS Eclipse mit EGit [8] Jan Dittberner 27. April 2016 41
  • 129.
    BRANCHES, TAGS, MERGEUND REBASE MERGE-TOOLS Eclipse mit EGit [8] TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert) Jan Dittberner 27. April 2016 41
  • 130.
    BRANCHES, TAGS, MERGEUND REBASE MERGE-TOOLS Eclipse mit EGit [8] TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert) vimdiff Jan Dittberner 27. April 2016 41
  • 131.
    BRANCHES, TAGS, MERGEUND REBASE MERGE-TOOLS Eclipse mit EGit [8] TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert) vimdiff … Jan Dittberner 27. April 2016 41
  • 132.
    BRANCHES, TAGS, MERGEUND 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
  • 133.
    BRANCHES, TAGS, MERGEUND REBASE CHERRY-PICKING Jan Dittberner 27. April 2016 42
  • 134.
    BRANCHES, TAGS, MERGEUND REBASE CHERRY-PICKING einzelne Commits aus anderem Branch in aktuellen Branch übernehmen Jan Dittberner 27. April 2016 42
  • 135.
    BRANCHES, TAGS, MERGEUND REBASE CHERRY-PICKING einzelne Commits aus anderem Branch in aktuellen Branch übernehmen z.B. für Hotfixes Jan Dittberner 27. April 2016 42
  • 136.
    BRANCHES, TAGS, MERGEUND 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
  • 137.
    BRANCHES, TAGS, MERGEUND REBASE REBASING Jan Dittberner 27. April 2016 43
  • 138.
    BRANCHES, TAGS, MERGEUND REBASE REBASING History eines (lokalen) Branches umpflanzen Jan Dittberner 27. April 2016 43
  • 139.
    BRANCHES, TAGS, MERGEUND REBASE REBASING History eines (lokalen) Branches umpflanzen git rebase <branchname> Jan Dittberner 27. April 2016 43
  • 140.
    BRANCHES, TAGS, MERGEUND 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
  • 141.
    BRANCHES, TAGS, MERGEUND REBASE MERGING VON COMMITS IN MEHRERE BRANCHES Jan Dittberner 27. April 2016 44
  • 142.
    BRANCHES, TAGS, MERGEUND REBASE MERGING VON COMMITS IN MEHRERE BRANCHES Mehrere Varianten: Jan Dittberner 27. April 2016 44
  • 143.
    BRANCHES, TAGS, MERGEUND REBASE MERGING VON COMMITS IN MEHRERE BRANCHES Mehrere Varianten: git checkout <branch> und git merge <feature> Jan Dittberner 27. April 2016 44
  • 144.
    BRANCHES, TAGS, MERGEUND 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
  • 145.
    BRANCHES, TAGS, MERGEUND 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
  • 146.
    BRANCHES, TAGS, MERGEUND 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
  • 147.
    BRANCHES, TAGS, MERGEUND 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
  • 148.
  • 149.
    REPOSITORY-ORGANISATION GEBRÄUCHLICHE REPOSITORY-STRUKTUREN zentrales Repositorymit Entwickler-Clones (wie SVN) Quelle: ProGit [4] Jan Dittberner 27. April 2016 47
  • 150.
    REPOSITORY-ORGANISATION GEBRÄUCHLICHE REPOSITORY-STRUKTUREN mehrere zentraleRepositories (z.B. für QA, Entwickler, Kunden, …) Quelle: ProGit [4] Jan Dittberner 27. April 2016 48
  • 151.
    REPOSITORY-ORGANISATION GEBRÄUCHLICHE REPOSITORY-STRUKTUREN mehrstufige Repositories(Dictator, Lieutenant) Quelle: ProGit [4] Jan Dittberner 27. April 2016 49
  • 152.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES Kloneerstellen git clone <url> Jan Dittberner 27. April 2016 50
  • 153.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES Kloneerstellen git clone <url> Umgang mit Remotes Jan Dittberner 27. April 2016 50
  • 154.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES Kloneerstellen git clone <url> Umgang mit Remotes hinzufügen git remote add Jan Dittberner 27. April 2016 50
  • 155.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES Kloneerstellen git clone <url> Umgang mit Remotes hinzufügen git remote add löschen git remote rm Jan Dittberner 27. April 2016 50
  • 156.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES Kloneerstellen 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
  • 157.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES Kloneerstellen 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
  • 158.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES Kloneerstellen 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
  • 159.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitclone origin a b master Jan Dittberner 27. April 2016 51
  • 160.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitclone origin a b master user 1 a b origin/master master Jan Dittberner 27. April 2016 51
  • 161.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitclone origin a b master user 1 a b origin/master master user 2 a b origin/master master Jan Dittberner 27. April 2016 51
  • 162.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitcommit origin a b master user 2 a b origin/master master user 1 a b origin/master master Jan Dittberner 27. April 2016 52
  • 163.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitcommit 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
  • 164.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitcommit 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
  • 165.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitcommit 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
  • 166.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitcommit 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
  • 167.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitpush 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
  • 168.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitpush 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
  • 169.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitpush 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
  • 170.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitpush 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
  • 171.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitpull, 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
  • 172.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitpull, 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
  • 173.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitpull, 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
  • 174.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitpull -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
  • 175.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitpull -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
  • 176.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitpull -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
  • 177.
    REPOSITORY-ORGANISATION INTERAKTION MIT REPOSITORIES gitpull -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
  • 178.
  • 179.
    HOOKS Skripte in .git/hooksfür Eingriff in verschiedenen Phasen Jan Dittberner 27. April 2016 57
  • 180.
    HOOKS Skripte in .git/hooksfür Eingriff in verschiedenen Phasen lokal für jeweiliges Repository Jan Dittberner 27. April 2016 57
  • 181.
    HOOKS Skripte in .git/hooksfür Eingriff in verschiedenen Phasen lokal für jeweiliges Repository werden bei git clone nicht kopiert Jan Dittberner 27. April 2016 57
  • 182.
    HOOKS Skripte in .git/hooksfü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
  • 183.
    FAQ Frequently Asked Questions JanDittberner 27. April 2016 58
  • 184.
    FAQ FREQUENTLY ASKED QUESTIONS Wiegeht Git mit symbolischen Links um? Git behandelt Symlinks als Verweise auf Pfade (wie UNIX): Jan Dittberner 27. April 2016 59
  • 185.
    FAQ FREQUENTLY ASKED QUESTIONS Wiegeht 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
  • 186.
    FAQ FREQUENTLY ASKED QUESTIONS Wiegeht 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
  • 187.
    FAQ FREQUENTLY ASKED QUESTIONS Wiegeht 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
  • 188.
    FAQ FREQUENTLY ASKED QUESTIONS Wiegeht 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
  • 189.
    FAQ FREQUENTLY ASKED QUESTIONS Wielösche ich einen Remote-Branch? Jan Dittberner 27. April 2016 60
  • 190.
    FAQ FREQUENTLY ASKED QUESTIONS Wielösche ich einen Remote-Branch? git push --delete <remote> <branch> Jan Dittberner 27. April 2016 60
  • 191.
    FAQ FREQUENTLY ASKED QUESTIONS KannGit mit großen Binaries umgehen? Jan Dittberner 27. April 2016 61
  • 192.
    FAQ FREQUENTLY ASKED QUESTIONS KannGit mit großen Binaries umgehen? Große Binaries sollten nicht direkt in Git-Repositories liegen Jan Dittberner 27. April 2016 61
  • 193.
    FAQ FREQUENTLY ASKED QUESTIONS KannGit 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
  • 194.
    FAQ FREQUENTLY ASKED QUESTIONS KannGit 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
  • 195.
  • 196.
  • 197.
    WEITERFÜHRENDES Bücher Version Control withGit [12] Pro Git [4] (auch kostenlos online lesbar) Git: Dezentrale Versionsverwaltung im Team [13] Jan Dittberner 27. April 2016 64
  • 198.
    LITERATUR Cygwin. URL: http://www.cygwin.com/. Gitfor 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
  • 199.
    LITERATUR Atlassian SourceTree, Afree 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
  • 200.
    LITERATUR Jon Loeliger andMatthew 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
  • 201.
    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