verteilte versionskontrolle mit git
TRANSCRIPT
Quelle: http://git-scm.com/downloads/logos
TRAININGVerteilte Versionskontrolle mit Git
Jan Dittberner 27. April 2016 1
AUFBAUGIT-GRUNDLAGEN
Basiswissen
Git-Kommandos
Jan Dittberner 27. April 2016 2
AUFBAUGIT-ARBEITSWEISE
Branches, Tags, Merge und Rebase
Repository-Organisation
Hooks
FAQ
Weiterführendes
Jan Dittberner 27. April 2016 3
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
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
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
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
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
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
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
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
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
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
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
BASISWISSEN
Inhalte von Git-RepositoriesInstallation und ErsteinrichtungHilfe
Jan Dittberner 27. April 2016 10
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
BASISWISSENHILFE
Use the docs!
git -hgit help oder git --helpgit <command> -hgit help <command> oder git<command> --help
Jan Dittberner 27. April 2016 17
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
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
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
BASISWISSENHILFE
Use the docs!
git -hgit help oder git --helpgit <command> -hgit help <command> oder git<command> --help
Jan Dittberner 27. April 2016 17
GIT-KOMMANDOS
Repository anlegenRepository klonenlokales Arbeiten
Jan Dittberner 27. April 2016 18
GIT-KOMMANDOSREPOSITORY ANLEGEN
neues lokales Entwicklungsrepository:git init <repo>neues lokales Bare-Repository:git init --bare <repo.git>
Jan Dittberner 27. April 2016 19
GIT-KOMMANDOSREPOSITORY ANLEGEN
neues lokales Entwicklungsrepository:git init <repo>
neues lokales Bare-Repository:git init --bare <repo.git>
Jan Dittberner 27. April 2016 19
GIT-KOMMANDOSREPOSITORY ANLEGEN
neues lokales Entwicklungsrepository:git init <repo>neues lokales Bare-Repository:git init --bare <repo.git>
Jan Dittberner 27. April 2016 19
GIT-KOMMANDOSREPOSITORY KLONEN
git clone <repourl> [<target>]
origin
a
b master
Jan Dittberner 27. April 2016 20
GIT-KOMMANDOSREPOSITORY KLONEN
git clone <repourl> [<target>]
origin
a
b master
user 1
a
b origin/master
master
Jan Dittberner 27. April 2016 20
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Branches, Tags, Merge und Rebase
Repository-Organisation
Hooks
FAQ
Weiterführendes
Jan Dittberner 27. April 2016 29
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
REPOSITORY-ORGANISATION
gebräuchliche Repository-StrukturenInteraktion mit Repositories
Jan Dittberner 27. April 2016 46
REPOSITORY-ORGANISATIONGEBRÄUCHLICHE REPOSITORY-STRUKTUREN
zentrales Repository mit Entwickler-Clones (wie SVN)
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 47
REPOSITORY-ORGANISATIONGEBRÄUCHLICHE REPOSITORY-STRUKTUREN
mehrere zentrale Repositories (z.B. für QA, Entwickler, Kunden, …)
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 48
REPOSITORY-ORGANISATIONGEBRÄUCHLICHE REPOSITORY-STRUKTUREN
mehrstufige Repositories (Dictator, Lieutenant)
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 49
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
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
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
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
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
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
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
REPOSITORY-ORGANISATIONINTERAKTION MIT REPOSITORIES
git clone
origin
a
b master
Jan Dittberner 27. April 2016 51
REPOSITORY-ORGANISATIONINTERAKTION MIT REPOSITORIES
git clone
origin
a
b master
user 1
a
b origin/master
master
Jan Dittberner 27. April 2016 51
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
FAQFREQUENTLY ASKED QUESTIONS
Wie lösche ich einen Remote-Branch?
git push --delete <remote> <branch>
Jan Dittberner 27. April 2016 60
FAQFREQUENTLY ASKED QUESTIONS
Wie lösche ich einen Remote-Branch?
git push --delete <remote> <branch>
Jan Dittberner 27. April 2016 60
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
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
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
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
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 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
KONTAKT
Jan DittbernerE-Mail: [email protected]
Telefon: +49-351-2802-2737Twitter/Identi.ca: @jandd
Jan Dittberner 27. April 2016 68