verteilte versionskontrolle mit git

201
Quelle: http://git-scm.com/downloads/logos TRAINING Verteilte Versionskontrolle mit Git Jan Dittberner 27. April 2016 1

Upload: devday-dresden

Post on 14-Apr-2017

86 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Verteilte Versionskontrolle mit Git

Quelle: http://git-scm.com/downloads/logos

TRAININGVerteilte Versionskontrolle mit Git

Jan Dittberner 27. April 2016 1

Page 2: Verteilte Versionskontrolle mit Git

AUFBAUGIT-GRUNDLAGEN

Basiswissen

Git-Kommandos

Jan Dittberner 27. April 2016 2

Page 3: Verteilte Versionskontrolle mit Git

AUFBAUGIT-ARBEITSWEISE

Branches, Tags, Merge und Rebase

Repository-Organisation

Hooks

FAQ

Weiterführendes

Jan Dittberner 27. April 2016 3

Page 4: Verteilte Versionskontrolle mit Git
Page 5: Verteilte Versionskontrolle mit Git

Teil I

GIT-GRUNDLAGEN

Jan Dittberner 27. April 2016 5

Page 6: Verteilte Versionskontrolle mit Git

Basiswissen

Git-Kommandos

Jan Dittberner 27. April 2016 6

Page 7: Verteilte Versionskontrolle mit Git

EINLEITUNGWARUM 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

Page 8: Verteilte Versionskontrolle mit Git

EINLEITUNGWARUM 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

Page 9: Verteilte Versionskontrolle mit Git

EINLEITUNGWARUM 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

Page 10: Verteilte Versionskontrolle mit Git

EINLEITUNGWARUM 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

Page 11: Verteilte Versionskontrolle mit Git

EINLEITUNGWARUM 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

Page 12: Verteilte Versionskontrolle mit Git

EINLEITUNGEINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG

Dateien/Verzeichnisse kopierenoldskool.c : oldskool-backup-1.cDateibasierte VersionierungSCCS (1972), RCS (Anfang 1980er)

zentrale VersionsverwaltungCVS (1989), Subversion (2000), Synergy, Perforce, Visual SourceSafe, …

verteilte VersionsverwaltungBitKeeper (1999), Bazaar (2005),Mercurial (2005), Git (2005), …

Jan Dittberner 27. April 2016 8

Page 13: Verteilte Versionskontrolle mit Git

EINLEITUNGEINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG

Dateien/Verzeichnisse kopierenoldskool.c : oldskool-backup-1.c

Dateibasierte VersionierungSCCS (1972), RCS (Anfang 1980er)

zentrale VersionsverwaltungCVS (1989), Subversion (2000), Synergy, Perforce, Visual SourceSafe, …

verteilte VersionsverwaltungBitKeeper (1999), Bazaar (2005),Mercurial (2005), Git (2005), …

Jan Dittberner 27. April 2016 8

Page 14: Verteilte Versionskontrolle mit Git

EINLEITUNGEINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG

Dateien/Verzeichnisse kopierenoldskool.c : oldskool-backup-1.cDateibasierte VersionierungSCCS (1972), RCS (Anfang 1980er)

zentrale VersionsverwaltungCVS (1989), Subversion (2000), Synergy, Perforce, Visual SourceSafe, …

verteilte VersionsverwaltungBitKeeper (1999), Bazaar (2005),Mercurial (2005), Git (2005), …

Jan Dittberner 27. April 2016 8

Page 15: Verteilte Versionskontrolle mit Git

EINLEITUNGEINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG

Dateien/Verzeichnisse kopierenoldskool.c : oldskool-backup-1.cDateibasierte VersionierungSCCS (1972), RCS (Anfang 1980er)

zentrale VersionsverwaltungCVS (1989), Subversion (2000), Synergy, Perforce, Visual SourceSafe, …

verteilte VersionsverwaltungBitKeeper (1999), Bazaar (2005),Mercurial (2005), Git (2005), …

Jan Dittberner 27. April 2016 8

Page 16: Verteilte Versionskontrolle mit Git

EINLEITUNGEINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG

Dateien/Verzeichnisse kopierenoldskool.c : oldskool-backup-1.cDateibasierte VersionierungSCCS (1972), RCS (Anfang 1980er)

zentrale VersionsverwaltungCVS (1989), Subversion (2000), Synergy, Perforce, Visual SourceSafe, …

verteilte VersionsverwaltungBitKeeper (1999), Bazaar (2005),Mercurial (2005), Git (2005), …

Jan Dittberner 27. April 2016 8

Page 17: Verteilte Versionskontrolle mit Git

EINLEITUNGEINE 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

Page 18: Verteilte Versionskontrolle mit Git

BASISWISSEN

Inhalte von Git-RepositoriesInstallation und ErsteinrichtungHilfe

Jan Dittberner 27. April 2016 10

Page 19: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE VON GIT-REPOSITORIES

Identifizierbare Artefakte

Durch SHA1-Hash identifizierbar:Blob (Datei)TreeCommit

Verweise auf Commits:BranchesTags

Blob

Tree

Jan Dittberner 27. April 2016 11

Page 20: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE VON GIT-REPOSITORIES

Identifizierbare Artefakte

Durch SHA1-Hash identifizierbar:Blob (Datei)TreeCommit

Verweise auf Commits:BranchesTags

Blob

Tree

Jan Dittberner 27. April 2016 11

Page 21: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE VON GIT-REPOSITORIES

Identifizierbare Artefakte

Durch SHA1-Hash identifizierbar:Blob (Datei)TreeCommit

Verweise auf Commits:BranchesTags Blob

Tree

Jan Dittberner 27. April 2016 11

Page 22: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 23: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 24: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 25: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 26: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 27: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 28: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 29: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 30: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 31: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 32: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 33: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 34: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 35: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 36: Verteilte Versionskontrolle mit Git

BASISWISSENINHALTE 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

Page 37: Verteilte Versionskontrolle mit Git

BASISWISSENINSTALLATION UND ERSTEINRICHTUNG

git installieren

Windows: Installation mit cygwin [1] setup.exe oderGit for Windows [2] (früher msysgit)

MacOS-X: Installation mit dem Mac-OS-Installer [3]RedHat: yum install gitDebian: aptitude install git

Jan Dittberner 27. April 2016 15

Page 38: Verteilte Versionskontrolle mit Git

BASISWISSENINSTALLATION 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

Page 39: Verteilte Versionskontrolle mit Git

BASISWISSENINSTALLATION 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

Page 40: Verteilte Versionskontrolle mit Git

BASISWISSENINSTALLATION 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

Page 41: Verteilte Versionskontrolle mit Git

BASISWISSENHILFE

Use the docs!

git -hgit help oder git --helpgit <command> -hgit help <command> oder git<command> --help

Jan Dittberner 27. April 2016 17

Page 42: Verteilte Versionskontrolle mit Git

BASISWISSENHILFE

Use the docs!

git -h

git help oder git --helpgit <command> -hgit help <command> oder git<command> --help

Jan Dittberner 27. April 2016 17

Page 43: Verteilte Versionskontrolle mit Git

BASISWISSENHILFE

Use the docs!

git -hgit help oder git --help

git <command> -hgit help <command> oder git<command> --help

Jan Dittberner 27. April 2016 17

Page 44: Verteilte Versionskontrolle mit Git

BASISWISSENHILFE

Use the docs!

git -hgit help oder git --helpgit <command> -h

git help <command> oder git<command> --help

Jan Dittberner 27. April 2016 17

Page 45: Verteilte Versionskontrolle mit Git

BASISWISSENHILFE

Use the docs!

git -hgit help oder git --helpgit <command> -hgit help <command> oder git<command> --help

Jan Dittberner 27. April 2016 17

Page 46: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOS

Repository anlegenRepository klonenlokales Arbeiten

Jan Dittberner 27. April 2016 18

Page 47: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSREPOSITORY ANLEGEN

neues lokales Entwicklungsrepository:git init <repo>neues lokales Bare-Repository:git init --bare <repo.git>

Jan Dittberner 27. April 2016 19

Page 48: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSREPOSITORY ANLEGEN

neues lokales Entwicklungsrepository:git init <repo>

neues lokales Bare-Repository:git init --bare <repo.git>

Jan Dittberner 27. April 2016 19

Page 49: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSREPOSITORY ANLEGEN

neues lokales Entwicklungsrepository:git init <repo>neues lokales Bare-Repository:git init --bare <repo.git>

Jan Dittberner 27. April 2016 19

Page 50: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSREPOSITORY KLONEN

git clone <repourl> [<target>]

origin

a

b master

Jan Dittberner 27. April 2016 20

Page 51: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSREPOSITORY KLONEN

git clone <repourl> [<target>]

origin

a

b master

user 1

a

b origin/master

master

Jan Dittberner 27. April 2016 20

Page 52: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSREPOSITORY 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

Page 53: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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

Page 54: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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

Page 55: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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

Page 56: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES ARBEITEN

Informationen abfragen

Aktuellen Status von Staging-Area und Working Copy:git statusInformationen 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

Page 57: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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

Page 58: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES ARBEITEN

Informationen abfragen

Aktuellen Status von Staging-Area und Working Copy:git statusInformationen 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

Page 59: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES ARBEITEN

Informationen abfragen

Aktuellen Status von Staging-Area und Working Copy:git statusInformationen 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

Page 60: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES ARBEITEN

History ansehen

Log für aktuellen Branch:git logTipp:

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

Page 61: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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

Page 62: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES ARBEITEN

History ansehen

Log für aktuellen Branch:git logTipp:

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

Page 63: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES ARBEITEN

History ansehen

Log für aktuellen Branch:git logTipp:

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

Page 64: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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 ausStaging-Area entfernen:git add -u [<file> …]

Jan Dittberner 27. April 2016 24

Page 65: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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 ausStaging-Area entfernen:git add -u [<file> …]

Jan Dittberner 27. April 2016 24

Page 66: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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 ausStaging-Area entfernen:git add -u [<file> …]

Jan Dittberner 27. April 2016 24

Page 67: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES ARBEITEN

Änderungen übernehmen

Dateien aus Staging-Area ins lokale Repository übernehmen:git commitDateien aus der Arbeitskopie ins lokale Repository übernehmen:git commit -a(Abkürzung für git add . ; git commit)

Jan Dittberner 27. April 2016 25

Page 68: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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

Page 69: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES ARBEITEN

Änderungen übernehmen

Dateien aus Staging-Area ins lokale Repository übernehmen:git commitDateien aus der Arbeitskopie ins lokale Repository übernehmen:git commit -a(Abkürzung für git add . ; git commit)

Jan Dittberner 27. April 2016 25

Page 70: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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

Page 71: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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

Page 72: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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

Page 73: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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

Page 74: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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

Page 75: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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 HEADCommit erzeugen, der anderen Commit rückgängig macht:git revert [<commitid>]

Jan Dittberner 27. April 2016 27

Page 76: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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 HEADCommit erzeugen, der anderen Commit rückgängig macht:git revert [<commitid>]

Jan Dittberner 27. April 2016 27

Page 77: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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

Page 78: Verteilte Versionskontrolle mit Git

GIT-KOMMANDOSLOKALES 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 HEADCommit erzeugen, der anderen Commit rückgängig macht:git revert [<commitid>]

Jan Dittberner 27. April 2016 27

Page 79: Verteilte Versionskontrolle mit Git

Teil II

GIT-ARBEITSWEISE

Jan Dittberner 27. April 2016 28

Page 80: Verteilte Versionskontrolle mit Git

Branches, Tags, Merge und Rebase

Repository-Organisation

Hooks

FAQ

Weiterführendes

Jan Dittberner 27. April 2016 29

Page 81: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASE

Allgemeines zu BranchesExkurs: Revision-SpezifikationTagsStash (Git-Kommando)Branching-ModelleMergingMerge-ToolsCherry-PickingRebasingMerging von Commits in mehrere BranchesPatch-Workflow

Jan Dittberner 27. April 2016 30

Page 82: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEALLGEMEINES ZU BRANCHES

Branches sind leichtgewichtig, d.h.keine Kopien sondern nur Zeiger aufCommits

Branches nutzen z.B. für:

Ausprobieren vonÄnderungen/ExperimenteIsolation von FeaturesUmschalten zwischen AufgabenReleasesQualitätssicherungWartungsbranches

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 31

Page 83: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEALLGEMEINES ZU BRANCHES

Branches sind leichtgewichtig, d.h.keine Kopien sondern nur Zeiger aufCommitsBranches nutzen z.B. für:

Ausprobieren vonÄnderungen/ExperimenteIsolation von FeaturesUmschalten zwischen AufgabenReleasesQualitätssicherungWartungsbranches

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 31

Page 84: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEALLGEMEINES ZU BRANCHES

Branches sind leichtgewichtig, d.h.keine Kopien sondern nur Zeiger aufCommitsBranches nutzen z.B. für:

Ausprobieren vonÄnderungen/Experimente

Isolation von FeaturesUmschalten zwischen AufgabenReleasesQualitätssicherungWartungsbranches

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 31

Page 85: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEALLGEMEINES ZU BRANCHES

Branches sind leichtgewichtig, d.h.keine Kopien sondern nur Zeiger aufCommitsBranches nutzen z.B. für:

Ausprobieren vonÄnderungen/ExperimenteIsolation von Features

Umschalten zwischen AufgabenReleasesQualitätssicherungWartungsbranches

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 31

Page 86: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEALLGEMEINES ZU BRANCHES

Branches sind leichtgewichtig, d.h.keine Kopien sondern nur Zeiger aufCommitsBranches nutzen z.B. für:

Ausprobieren vonÄnderungen/ExperimenteIsolation von FeaturesUmschalten zwischen Aufgaben

ReleasesQualitätssicherungWartungsbranches

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 31

Page 87: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEALLGEMEINES ZU BRANCHES

Branches sind leichtgewichtig, d.h.keine Kopien sondern nur Zeiger aufCommitsBranches nutzen z.B. für:

Ausprobieren vonÄnderungen/ExperimenteIsolation von FeaturesUmschalten zwischen AufgabenReleases

QualitätssicherungWartungsbranches

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 31

Page 88: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEALLGEMEINES ZU BRANCHES

Branches sind leichtgewichtig, d.h.keine Kopien sondern nur Zeiger aufCommitsBranches nutzen z.B. für:

Ausprobieren vonÄnderungen/ExperimenteIsolation von FeaturesUmschalten zwischen AufgabenReleasesQualitätssicherung

Wartungsbranches

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 31

Page 89: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEALLGEMEINES ZU BRANCHES

Branches sind leichtgewichtig, d.h.keine Kopien sondern nur Zeiger aufCommitsBranches nutzen z.B. für:

Ausprobieren vonÄnderungen/ExperimenteIsolation von FeaturesUmschalten zwischen AufgabenReleasesQualitätssicherungWartungsbranches

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 31

Page 90: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEALLGEMEINES ZU BRANCHES

Kommandos

git branch <branchname >git checkout <branchname >git checkout -b <branchname >git branch -d <branchname >git branchgit branch -D <branchname >git show-branch

Jan Dittberner 27. April 2016 32

Page 91: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEEXKURS: 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 Branchesr1.1, refs/tags/r1.1 für Tagsorigin/development oder refs/remotes/origin/development fürRemote-Tracking-Branches

Jan Dittberner 27. April 2016 33

Page 92: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEEXKURS: REVISION-SPEZIFIKATION

git help rev-parseverwendbar 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 Branchesr1.1, refs/tags/r1.1 für Tagsorigin/development oder refs/remotes/origin/development fürRemote-Tracking-Branches

Jan Dittberner 27. April 2016 33

Page 93: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEEXKURS: REVISION-SPEZIFIKATION

git help rev-parseverwendbar 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 Branchesr1.1, refs/tags/r1.1 für Tagsorigin/development oder refs/remotes/origin/development fürRemote-Tracking-Branches

Jan Dittberner 27. April 2016 33

Page 94: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEEXKURS: REVISION-SPEZIFIKATION

git help rev-parseverwendbar 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 Branchesr1.1, refs/tags/r1.1 für Tagsorigin/development oder refs/remotes/origin/development fürRemote-Tracking-Branches

Jan Dittberner 27. April 2016 33

Page 95: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEEXKURS: REVISION-SPEZIFIKATION

git help rev-parseverwendbar 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 Tagsorigin/development oder refs/remotes/origin/development fürRemote-Tracking-Branches

Jan Dittberner 27. April 2016 33

Page 96: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEEXKURS: REVISION-SPEZIFIKATION

git help rev-parseverwendbar 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 Branchesr1.1, refs/tags/r1.1 für Tags

origin/development oder refs/remotes/origin/development fürRemote-Tracking-Branches

Jan Dittberner 27. April 2016 33

Page 97: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEEXKURS: REVISION-SPEZIFIKATION

git help rev-parseverwendbar 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 Branchesr1.1, refs/tags/r1.1 für Tagsorigin/development oder refs/remotes/origin/development fürRemote-Tracking-Branches

Jan Dittberner 27. April 2016 33

Page 98: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEEXKURS: REVISION-SPEZIFIKATION

Informationen zu Branches

Commits in Branchgit log <branchname>

Commits in development die nicht in master sind:git log master..developmentUnterschied zwischen development und master:git diff master..developmentmehr in git help rev-parse unter SPECIFYING REVISIONS undSPECIFYING RANGES

Jan Dittberner 27. April 2016 34

Page 99: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEEXKURS: REVISION-SPEZIFIKATION

Informationen zu Branches

Commits in Branchgit log <branchname>Commits in development die nicht in master sind:git log master..development

Unterschied zwischen development und master:git diff master..developmentmehr in git help rev-parse unter SPECIFYING REVISIONS undSPECIFYING RANGES

Jan Dittberner 27. April 2016 34

Page 100: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEEXKURS: REVISION-SPEZIFIKATION

Informationen zu Branches

Commits in Branchgit log <branchname>Commits in development die nicht in master sind:git log master..developmentUnterschied zwischen development und master:git diff master..development

mehr in git help rev-parse unter SPECIFYING REVISIONS undSPECIFYING RANGES

Jan Dittberner 27. April 2016 34

Page 101: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEEXKURS: REVISION-SPEZIFIKATION

Informationen zu Branches

Commits in Branchgit log <branchname>Commits in development die nicht in master sind:git log master..developmentUnterschied zwischen development und master:git diff master..developmentmehr in git help rev-parse unter SPECIFYING REVISIONS undSPECIFYING RANGES

Jan Dittberner 27. April 2016 34

Page 102: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASETAGS

Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuenCommits 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

Page 103: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASETAGS

Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuenCommits 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

Page 104: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASETAGS

Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuenCommits 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

Page 105: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASETAGS

Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuenCommits 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

Page 106: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASETAGS

Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuenCommits 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

Page 107: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASESTASH (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 popgit stash apply

Jan Dittberner 27. April 2016 36

Page 108: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASESTASH (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 popgit stash apply

Jan Dittberner 27. April 2016 36

Page 109: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASESTASH (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 popgit stash apply

Jan Dittberner 27. April 2016 36

Page 110: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASESTASH (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 popgit stash apply

Jan Dittberner 27. April 2016 36

Page 111: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASESTASH (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 popgit stash apply

Jan Dittberner 27. April 2016 36

Page 112: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEBRANCHING-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

Page 113: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEBRANCHING-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

Page 114: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEBRANCHING-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

Page 115: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEBRANCHING-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

Page 116: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEBRANCHING-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

Page 117: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEBRANCHING-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 featuregit flow release

Unterstützung in Atlassian SourceTree [7]

Unterstützung in Eclipse EGit [8]

Jan Dittberner 27. April 2016 38

Page 118: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEBRANCHING-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 featuregit flow release

Unterstützung in Atlassian SourceTree [7]

Unterstützung in Eclipse EGit [8]

Jan Dittberner 27. April 2016 38

Page 119: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEBRANCHING-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 featuregit flow release

Unterstützung in Atlassian SourceTree [7]

Unterstützung in Eclipse EGit [8]

Jan Dittberner 27. April 2016 38

Page 120: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEBRANCHING-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 featuregit flow release

Unterstützung in Atlassian SourceTree [7]

Unterstützung in Eclipse EGit [8]

Jan Dittberner 27. April 2016 38

Page 121: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEBRANCHING-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 featuregit flow release

Unterstützung in Atlassian SourceTree [7]

Unterstützung in Eclipse EGit [8]

Jan Dittberner 27. April 2016 38

Page 122: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGING

Content-Tracking statt Patch-Serie(wie z.B. bei SVN)

es existieren mehrereMerge-Strategien (Standardrecursive, mehr unter git helpmerge)Mergekonflikte müssen wie beianderen VCS aufgelöst werden, dafürkönnen Tools eingebunden werden

Kommando: git merge

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 39

Page 123: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGING

Content-Tracking statt Patch-Serie(wie z.B. bei SVN)

es existieren mehrereMerge-Strategien (Standardrecursive, mehr unter git helpmerge)

Mergekonflikte müssen wie beianderen VCS aufgelöst werden, dafürkönnen Tools eingebunden werden

Kommando: git merge

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 39

Page 124: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGING

Content-Tracking statt Patch-Serie(wie z.B. bei SVN)

es existieren mehrereMerge-Strategien (Standardrecursive, mehr unter git helpmerge)Mergekonflikte müssen wie beianderen VCS aufgelöst werden, dafürkönnen Tools eingebunden werden

Kommando: git merge

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 39

Page 125: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGING

Content-Tracking statt Patch-Serie(wie z.B. bei SVN)

es existieren mehrereMerge-Strategien (Standardrecursive, mehr unter git helpmerge)Mergekonflikte müssen wie beianderen VCS aufgelöst werden, dafürkönnen Tools eingebunden werden

Kommando: git merge

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 39

Page 126: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGING

ACHTUNG:

Wenn ein Merge abgebrochen werden soll, stattden Mergekonflikt zu lösen (z.B. mit git reset--hard), IMMER git merge --abortbenutzen, da sonst der nachfolgende Commitautomatisch ein Merge-Commit wird und dieÄnderungen aus dem ursprünglich für den Mergevorgesehenen Branch dann nicht enthalten sind.

Jan Dittberner 27. April 2016 40

Page 127: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGE-TOOLS

Eclipse mit EGit [8]

TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert)

vimdiff

Standard-Merge-Tool kann konfiguriert (git help config, Suchbegriffmerge.tool) und über git mergetool aufgerufen werden

Jan Dittberner 27. April 2016 41

Page 128: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGE-TOOLS

Eclipse mit EGit [8]

TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert)

vimdiff

Standard-Merge-Tool kann konfiguriert (git help config, Suchbegriffmerge.tool) und über git mergetool aufgerufen werden

Jan Dittberner 27. April 2016 41

Page 129: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGE-TOOLS

Eclipse mit EGit [8]

TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert)

vimdiff

Standard-Merge-Tool kann konfiguriert (git help config, Suchbegriffmerge.tool) und über git mergetool aufgerufen werden

Jan Dittberner 27. April 2016 41

Page 130: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGE-TOOLS

Eclipse mit EGit [8]

TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert)

vimdiff

Standard-Merge-Tool kann konfiguriert (git help config, Suchbegriffmerge.tool) und über git mergetool aufgerufen werden

Jan Dittberner 27. April 2016 41

Page 131: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGE-TOOLS

Eclipse mit EGit [8]

TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert)

vimdiff

Standard-Merge-Tool kann konfiguriert (git help config, Suchbegriffmerge.tool) und über git mergetool aufgerufen werden

Jan Dittberner 27. April 2016 41

Page 132: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGE-TOOLS

Eclipse mit EGit [8]

TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert)

vimdiff

Standard-Merge-Tool kann konfiguriert (git help config, Suchbegriffmerge.tool) und über git mergetool aufgerufen werden

Jan Dittberner 27. April 2016 41

Page 133: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASECHERRY-PICKING

einzelne Commits aus anderem Branch in aktuellen Branch übernehmen

z.B. für Hotfixes

git cherry-pick <commits> (<commits> kann mit Rev-Spezifikationdefiniert werden)

Jan Dittberner 27. April 2016 42

Page 134: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASECHERRY-PICKING

einzelne Commits aus anderem Branch in aktuellen Branch übernehmen

z.B. für Hotfixes

git cherry-pick <commits> (<commits> kann mit Rev-Spezifikationdefiniert werden)

Jan Dittberner 27. April 2016 42

Page 135: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASECHERRY-PICKING

einzelne Commits aus anderem Branch in aktuellen Branch übernehmen

z.B. für Hotfixes

git cherry-pick <commits> (<commits> kann mit Rev-Spezifikationdefiniert werden)

Jan Dittberner 27. April 2016 42

Page 136: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASECHERRY-PICKING

einzelne Commits aus anderem Branch in aktuellen Branch übernehmen

z.B. für Hotfixes

git cherry-pick <commits> (<commits> kann mit Rev-Spezifikationdefiniert werden)

Jan Dittberner 27. April 2016 42

Page 137: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEREBASING

History eines (lokalen) Branchesumpflanzen

git rebase <branchname>ACHTUNG: rebasing von bereitspublizierten Branches ist BÖSE

Jan Dittberner 27. April 2016 43

Page 138: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEREBASING

History eines (lokalen) Branchesumpflanzen

git rebase <branchname>ACHTUNG: rebasing von bereitspublizierten Branches ist BÖSE

Jan Dittberner 27. April 2016 43

Page 139: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEREBASING

History eines (lokalen) Branchesumpflanzen

git rebase <branchname>

ACHTUNG: rebasing von bereitspublizierten Branches ist BÖSE

Jan Dittberner 27. April 2016 43

Page 140: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEREBASING

History eines (lokalen) Branchesumpflanzen

git rebase <branchname>ACHTUNG: rebasing von bereitspublizierten Branches ist BÖSE

Jan Dittberner 27. April 2016 43

Page 141: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGING VON COMMITS IN MEHRERE BRANCHES

Mehrere Varianten:

git checkout <branch> und git merge <feature>git cherry-pickgit stash und git stash apply in mehrere Branches

Tipp:

git rerere Aufzeichnung/Replay von Merge-Konflikt-Behebungen

Jan Dittberner 27. April 2016 44

Page 142: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGING VON COMMITS IN MEHRERE BRANCHES

Mehrere Varianten:

git checkout <branch> und git merge <feature>git cherry-pickgit stash und git stash apply in mehrere Branches

Tipp:

git rerere Aufzeichnung/Replay von Merge-Konflikt-Behebungen

Jan Dittberner 27. April 2016 44

Page 143: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGING VON COMMITS IN MEHRERE BRANCHES

Mehrere Varianten:

git checkout <branch> und git merge <feature>

git cherry-pickgit stash und git stash apply in mehrere Branches

Tipp:

git rerere Aufzeichnung/Replay von Merge-Konflikt-Behebungen

Jan Dittberner 27. April 2016 44

Page 144: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGING 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

Page 145: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGING VON COMMITS IN MEHRERE BRANCHES

Mehrere Varianten:

git checkout <branch> und git merge <feature>git cherry-pickgit stash und git stash apply in mehrere Branches

Tipp:

git rerere Aufzeichnung/Replay von Merge-Konflikt-Behebungen

Jan Dittberner 27. April 2016 44

Page 146: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEMERGING VON COMMITS IN MEHRERE BRANCHES

Mehrere Varianten:

git checkout <branch> und git merge <feature>git cherry-pickgit stash und git stash apply in mehrere Branches

Tipp:

git rerere Aufzeichnung/Replay von Merge-Konflikt-Behebungen

Jan Dittberner 27. April 2016 44

Page 147: Verteilte Versionskontrolle mit Git

BRANCHES, TAGS, MERGE UND REBASEPATCH-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 SoftwareProjekten zum Einsatz

Jan Dittberner 27. April 2016 45

Page 148: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATION

gebräuchliche Repository-StrukturenInteraktion mit Repositories

Jan Dittberner 27. April 2016 46

Page 149: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONGEBRÄUCHLICHE REPOSITORY-STRUKTUREN

zentrales Repository mit Entwickler-Clones (wie SVN)

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 47

Page 150: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONGEBRÄUCHLICHE REPOSITORY-STRUKTUREN

mehrere zentrale Repositories (z.B. für QA, Entwickler, Kunden, …)

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 48

Page 151: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONGEBRÄUCHLICHE REPOSITORY-STRUKTUREN

mehrstufige Repositories (Dictator, Lieutenant)

Quelle: ProGit [4]

Jan Dittberner 27. April 2016 49

Page 152: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION MIT REPOSITORIES

Klone erstellengit clone <url>

Umgang mit Remotes

hinzufügengit remote addlöschengit remote rm

Branches von remote abrufengit fetch <remote> <branch>Branch abrufen und mit HEAD mergengit pulllokale Commits/Tags publizierengit push

Jan Dittberner 27. April 2016 50

Page 153: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION MIT REPOSITORIES

Klone erstellengit clone <url>Umgang mit Remotes

hinzufügengit remote addlöschengit remote rm

Branches von remote abrufengit fetch <remote> <branch>Branch abrufen und mit HEAD mergengit pulllokale Commits/Tags publizierengit push

Jan Dittberner 27. April 2016 50

Page 154: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION MIT REPOSITORIES

Klone erstellengit clone <url>Umgang mit Remotes

hinzufügengit remote add

löschengit remote rm

Branches von remote abrufengit fetch <remote> <branch>Branch abrufen und mit HEAD mergengit pulllokale Commits/Tags publizierengit push

Jan Dittberner 27. April 2016 50

Page 155: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION MIT REPOSITORIES

Klone erstellengit clone <url>Umgang mit Remotes

hinzufügengit remote addlöschengit remote rm

Branches von remote abrufengit fetch <remote> <branch>Branch abrufen und mit HEAD mergengit pulllokale Commits/Tags publizierengit push

Jan Dittberner 27. April 2016 50

Page 156: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION MIT REPOSITORIES

Klone erstellengit clone <url>Umgang mit Remotes

hinzufügengit remote addlöschengit remote rm

Branches von remote abrufengit fetch <remote> <branch>

Branch abrufen und mit HEAD mergengit pulllokale Commits/Tags publizierengit push

Jan Dittberner 27. April 2016 50

Page 157: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION MIT REPOSITORIES

Klone erstellengit clone <url>Umgang mit Remotes

hinzufügengit remote addlöschengit remote rm

Branches von remote abrufengit fetch <remote> <branch>Branch abrufen und mit HEAD mergengit pull

lokale Commits/Tags publizierengit push

Jan Dittberner 27. April 2016 50

Page 158: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION MIT REPOSITORIES

Klone erstellengit clone <url>Umgang mit Remotes

hinzufügengit remote addlöschengit remote rm

Branches von remote abrufengit fetch <remote> <branch>Branch abrufen und mit HEAD mergengit pulllokale Commits/Tags publizierengit push

Jan Dittberner 27. April 2016 50

Page 159: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION MIT REPOSITORIES

git clone

origin

a

b master

Jan Dittberner 27. April 2016 51

Page 160: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION MIT REPOSITORIES

git clone

origin

a

b master

user 1

a

b origin/master

master

Jan Dittberner 27. April 2016 51

Page 161: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 162: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 163: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 164: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 165: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 166: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 167: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 168: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 169: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 170: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

E

Jan Dittberner 27. April 2016 53

Page 171: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 172: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 173: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 174: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 175: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 176: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 177: Verteilte Versionskontrolle mit Git

REPOSITORY-ORGANISATIONINTERAKTION 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

Page 178: Verteilte Versionskontrolle mit Git

HOOKS

Jan Dittberner 27. April 2016 56

Page 179: Verteilte Versionskontrolle mit Git

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

Page 180: Verteilte Versionskontrolle mit Git

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

Page 181: Verteilte Versionskontrolle mit Git

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

Page 182: Verteilte Versionskontrolle mit Git

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

Page 183: Verteilte Versionskontrolle mit Git

FAQ

Frequently Asked Questions

Jan Dittberner 27. April 2016 58

Page 184: Verteilte Versionskontrolle mit Git

FAQFREQUENTLY 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 desSymlinks als Inhalt angelegt

Fazit: Vermeiden, wenn das Repository auf Windows-Clients bearbeitet werden muss

Jan Dittberner 27. April 2016 59

Page 185: Verteilte Versionskontrolle mit Git

FAQFREQUENTLY 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 desSymlinks als Inhalt angelegt

Fazit: Vermeiden, wenn das Repository auf Windows-Clients bearbeitet werden muss

Jan Dittberner 27. April 2016 59

Page 186: Verteilte Versionskontrolle mit Git

FAQFREQUENTLY 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 desSymlinks als Inhalt angelegt

Fazit: Vermeiden, wenn das Repository auf Windows-Clients bearbeitet werden muss

Jan Dittberner 27. April 2016 59

Page 187: Verteilte Versionskontrolle mit Git

FAQFREQUENTLY 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 desSymlinks als Inhalt angelegt

Fazit: Vermeiden, wenn das Repository auf Windows-Clients bearbeitet werden muss

Jan Dittberner 27. April 2016 59

Page 188: Verteilte Versionskontrolle mit Git

FAQFREQUENTLY 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 desSymlinks als Inhalt angelegt

Fazit: Vermeiden, wenn das Repository auf Windows-Clients bearbeitet werden muss

Jan Dittberner 27. April 2016 59

Page 189: Verteilte Versionskontrolle mit Git

FAQFREQUENTLY ASKED QUESTIONS

Wie lösche ich einen Remote-Branch?

git push --delete <remote> <branch>

Jan Dittberner 27. April 2016 60

Page 190: Verteilte Versionskontrolle mit Git

FAQFREQUENTLY ASKED QUESTIONS

Wie lösche ich einen Remote-Branch?

git push --delete <remote> <branch>

Jan Dittberner 27. April 2016 60

Page 191: Verteilte Versionskontrolle mit Git

FAQFREQUENTLY 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

Page 192: Verteilte Versionskontrolle mit Git

FAQFREQUENTLY 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

Page 193: Verteilte Versionskontrolle mit Git

FAQFREQUENTLY 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

Page 194: Verteilte Versionskontrolle mit Git

FAQFREQUENTLY 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

Page 195: Verteilte Versionskontrolle mit Git

WEITERFÜHRENDES

Jan Dittberner 27. April 2016 62

Page 196: Verteilte Versionskontrolle mit Git

WEITERFÜHRENDES

Webseiten

Git-Webseite [10]

Git Cheatsheet [11]

Jan Dittberner 27. April 2016 63

Page 197: Verteilte Versionskontrolle mit Git

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

Page 198: Verteilte Versionskontrolle mit Git

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

Page 199: Verteilte Versionskontrolle mit Git

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

Page 200: Verteilte Versionskontrolle mit Git

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 imTeam - 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

Page 201: Verteilte Versionskontrolle mit Git

KONTAKT

Jan DittbernerE-Mail: [email protected]

Telefon: +49-351-2802-2737Twitter/Identi.ca: @jandd

Jan Dittberner 27. April 2016 68