11. EINLEITUNG
WARUM VERSIONSVERWALTUNG
Zwischenstände von Dateien sichern
Gemeinsames Arbeiten an Dateien
Möglichkeit zu alten Dateiversionen zurückzukehren
Möglichkeit in die Historie von Projekten zu sehen
Jan Dittberner 27. April 2016 7
13. EINLEITUNG
EINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG
Dateien/Verzeichnisse kopieren
oldskool.c oldskool-backup-1.c
Jan Dittberner 27. April 2016 8
14. EINLEITUNG
EINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG
Dateien/Verzeichnisse kopieren
oldskool.c oldskool-backup-1.c
Dateibasierte Versionierung
SCCS (1972), RCS (Anfang 1980er)
Jan Dittberner 27. April 2016 8
15. EINLEITUNG
EINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG
Dateien/Verzeichnisse kopieren
oldskool.c oldskool-backup-1.c
Dateibasierte Versionierung
SCCS (1972), RCS (Anfang 1980er)
zentrale Versionsverwaltung
CVS (1989), Subversion (2000), Synergy, Perforce, Visual SourceSafe, …
Jan Dittberner 27. April 2016 8
16. EINLEITUNG
EINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG
Dateien/Verzeichnisse kopieren
oldskool.c oldskool-backup-1.c
Dateibasierte Versionierung
SCCS (1972), RCS (Anfang 1980er)
zentrale Versionsverwaltung
CVS (1989), Subversion (2000), Synergy, Perforce, Visual SourceSafe, …
verteilte Versionsverwaltung
BitKeeper (1999), Bazaar (2005), Mercurial (2005), Git (2005), …
Jan Dittberner 27. April 2016 8
17. EINLEITUNG
EINE KURZE GESCHICHTE DER VERSIONSVERWALTUNG
Git has won
Abbildung: Companies and Projects using Git Quelle https://git-scm.com, 26.04.2016
Jan Dittberner 27. April 2016 9
25. BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Bereiche (lokaler) Repositories
Repository mit historischen Daten
Staging Area (Vorbereitung des nächsten Commits)
Working Copy
Jan Dittberner 27. April 2016 12
26. BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Bereiche (lokaler) Repositories
Repository mit historischen Daten
Staging Area (Vorbereitung des nächsten Commits)
Working Copy
Stash
Jan Dittberner 27. April 2016 12
27. BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Bereiche (lokaler) Repositories
Repository mit historischen Daten
Staging Area (Vorbereitung des nächsten Commits)
Working Copy
Stash
Notes (Notizen zu Objekten)
Jan Dittberner 27. April 2016 12
31. BASISWISSEN
INHALTE VON GIT-REPOSITORIES
Eigenschaften von Commits
gerichteter azyklischer Graph (directed acyclic graph, DAG)
jeder Commit (außer initialem Commit) hat 1-n Parents
Commits sind Referenzen auf einen Tree plus Metadaten (Author, Zeitstempel,
Kommentar, …)
Jan Dittberner 27. April 2016 13
37. BASISWISSEN
INSTALLATION UND ERSTEINRICHTUNG
git installieren
Windows: Installation mit cygwin [1] setup.exe oder
Git for Windows [2] (früher msysgit)
MacOS-X: Installation mit dem Mac-OS-Installer [3]
RedHat: yum install git
Debian: aptitude install git
Jan Dittberner 27. April 2016 15
45. BASISWISSEN
HILFE
Use the docs!
git -h
git help oder git --help
git <command> -h
git help <command> oder git
<command> --help
Jan Dittberner 27. April 2016 17
52. GIT-KOMMANDOS
REPOSITORY KLONEN
git clone <repourl> [<target>]
origin
a
b master
user 1
a
b origin/master
master
user 2
a
b origin/master
master
Jan Dittberner 27. April 2016 20
59. GIT-KOMMANDOS
LOKALES ARBEITEN
Informationen abfragen
Aktuellen Status von Staging-Area und Working Copy:
git status
Informationen zu Objekt:
git show <refname> (später bei Exkurs: Revision-Spezifikation mehr dazu)
Unterschied zwischen Staging-Area und Working Copy:
git diff
Jan Dittberner 27. April 2016 22
65. GIT-KOMMANDOS
LOKALES ARBEITEN
Selektives Arbeiten mit der Staging-Area
Dateien patch-weise in Staging-Area übernehmen:
git add -p [<file> …]
Dateien interaktiv in Staging-Area übernehmen:
git add -i [<file> …]
Jan Dittberner 27. April 2016 24
66. GIT-KOMMANDOS
LOKALES ARBEITEN
Selektives Arbeiten mit der Staging-Area
Dateien patch-weise in Staging-Area übernehmen:
git add -p [<file> …]
Dateien interaktiv in Staging-Area übernehmen:
git add -i [<file> …]
nur Dateien stagen die schon getrackt werden, gelöschte Dateien aus
Staging-Area entfernen:
git add -u [<file> …]
Jan Dittberner 27. April 2016 24
69. GIT-KOMMANDOS
LOKALES ARBEITEN
Änderungen übernehmen
Dateien aus Staging-Area ins lokale Repository übernehmen:
git commit
Dateien aus der Arbeitskopie ins lokale Repository übernehmen:
git commit -a
(Abkürzung für git add . ; git commit)
Jan Dittberner 27. April 2016 25
80. Branches, Tags, Merge und Rebase
Repository-Organisation
Hooks
FAQ
Weiterführendes
Jan Dittberner 27. April 2016 29
81. BRANCHES, TAGS, MERGE UND REBASE
Allgemeines zu Branches
Exkurs: Revision-Spezifikation
Tags
Stash (Git-Kommando)
Branching-Modelle
Merging
Merge-Tools
Cherry-Picking
Rebasing
Merging von Commits in mehrere Branches
Patch-Workflow
Jan Dittberner 27. April 2016 30
82. BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
83. BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Branches nutzen z.B. für:
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
84. BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Branches nutzen z.B. für:
Ausprobieren von
Änderungen/Experimente
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
85. BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Branches nutzen z.B. für:
Ausprobieren von
Änderungen/Experimente
Isolation von Features
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
86. BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Branches nutzen z.B. für:
Ausprobieren von
Änderungen/Experimente
Isolation von Features
Umschalten zwischen Aufgaben
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
87. BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Branches nutzen z.B. für:
Ausprobieren von
Änderungen/Experimente
Isolation von Features
Umschalten zwischen Aufgaben
Releases
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
88. BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Branches nutzen z.B. für:
Ausprobieren von
Änderungen/Experimente
Isolation von Features
Umschalten zwischen Aufgaben
Releases
Qualitätssicherung
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
89. BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Branches sind leichtgewichtig, d.h.
keine Kopien sondern nur Zeiger auf
Commits
Branches nutzen z.B. für:
Ausprobieren von
Änderungen/Experimente
Isolation von Features
Umschalten zwischen Aufgaben
Releases
Qualitätssicherung
Wartungsbranches
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 31
90. BRANCHES, TAGS, MERGE UND REBASE
ALLGEMEINES ZU BRANCHES
Kommandos
git branch <branchname >
git checkout <branchname >
git checkout -b <branchname >
git branch -d <branchname >
git branch
git branch -D <branchname >
git show-branch
Jan Dittberner 27. April 2016 32
91. BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
git help rev-parse
Jan Dittberner 27. April 2016 33
92. BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
git help rev-parse
verwendbar für viele Operationen (log, push/pull, diff, …)
Jan Dittberner 27. April 2016 33
93. BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
git help rev-parse
verwendbar für viele Operationen (log, push/pull, diff, …)
<sha1> (auch abgekürzt) für Blobs, Commits, Trees
Jan Dittberner 27. April 2016 33
94. BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
git help rev-parse
verwendbar für viele Operationen (log, push/pull, diff, …)
<sha1> (auch abgekürzt) für Blobs, Commits, Trees
<refname> z.B.:
Jan Dittberner 27. April 2016 33
95. BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
git help rev-parse
verwendbar für viele Operationen (log, push/pull, diff, …)
<sha1> (auch abgekürzt) für Blobs, Commits, Trees
<refname> z.B.:
master, heads/master, refs/heads/master für lokale Branches
Jan Dittberner 27. April 2016 33
96. BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
git help rev-parse
verwendbar für viele Operationen (log, push/pull, diff, …)
<sha1> (auch abgekürzt) für Blobs, Commits, Trees
<refname> z.B.:
master, heads/master, refs/heads/master für lokale Branches
r1.1, refs/tags/r1.1 für Tags
Jan Dittberner 27. April 2016 33
97. BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
git help rev-parse
verwendbar für viele Operationen (log, push/pull, diff, …)
<sha1> (auch abgekürzt) für Blobs, Commits, Trees
<refname> z.B.:
master, heads/master, refs/heads/master für lokale Branches
r1.1, refs/tags/r1.1 für Tags
origin/development oder refs/remotes/origin/development für
Remote-Tracking-Branches
Jan Dittberner 27. April 2016 33
98. BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
Informationen zu Branches
Commits in Branch
git log <branchname>
Jan Dittberner 27. April 2016 34
99. BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
Informationen zu Branches
Commits in Branch
git log <branchname>
Commits in development die nicht in master sind:
git log master..development
Jan Dittberner 27. April 2016 34
100. BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
Informationen zu Branches
Commits in Branch
git log <branchname>
Commits in development die nicht in master sind:
git log master..development
Unterschied zwischen development und master:
git diff master..development
Jan Dittberner 27. April 2016 34
101. BRANCHES, TAGS, MERGE UND REBASE
EXKURS: REVISION-SPEZIFIKATION
Informationen zu Branches
Commits in Branch
git log <branchname>
Commits in development die nicht in master sind:
git log master..development
Unterschied zwischen development und master:
git diff master..development
mehr in git help rev-parse unter SPECIFYING REVISIONS und
SPECIFYING RANGES
Jan Dittberner 27. April 2016 34
102. BRANCHES, TAGS, MERGE UND REBASE
TAGS
Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuen
Commits verschoben)
Jan Dittberner 27. April 2016 35
103. BRANCHES, TAGS, MERGE UND REBASE
TAGS
Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuen
Commits verschoben)
Anders als bei SVN ist ein Tag kein Branch
Jan Dittberner 27. April 2016 35
104. BRANCHES, TAGS, MERGE UND REBASE
TAGS
Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuen
Commits verschoben)
Anders als bei SVN ist ein Tag kein Branch
kann (mit GnuPG/PGP) signiert werden
Jan Dittberner 27. April 2016 35
105. BRANCHES, TAGS, MERGE UND REBASE
TAGS
Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuen
Commits verschoben)
Anders als bei SVN ist ein Tag kein Branch
kann (mit GnuPG/PGP) signiert werden
Verwendung als Marker (z.B. für bestimmte Jenkins-Workflows)
Jan Dittberner 27. April 2016 35
106. BRANCHES, TAGS, MERGE UND REBASE
TAGS
Markierung/Name für Commit (anders als ein Branch wird dieser nicht bei neuen
Commits verschoben)
Anders als bei SVN ist ein Tag kein Branch
kann (mit GnuPG/PGP) signiert werden
Verwendung als Marker (z.B. für bestimmte Jenkins-Workflows)
Verwendung für Markierung von Lieferständen/Releases
Jan Dittberner 27. April 2016 35
107. BRANCHES, TAGS, MERGE UND REBASE
STASH (GIT-KOMMANDO)
kurzes Zwischenlagern von Änderungen an der Working Copy
Jan Dittberner 27. April 2016 36
108. BRANCHES, TAGS, MERGE UND REBASE
STASH (GIT-KOMMANDO)
kurzes Zwischenlagern von Änderungen an der Working Copy
rein lokal
Jan Dittberner 27. April 2016 36
109. BRANCHES, TAGS, MERGE UND REBASE
STASH (GIT-KOMMANDO)
kurzes Zwischenlagern von Änderungen an der Working Copy
rein lokal
kann zum Transplantieren in andere Branches genutzt werden
Jan Dittberner 27. April 2016 36
110. BRANCHES, TAGS, MERGE UND REBASE
STASH (GIT-KOMMANDO)
kurzes Zwischenlagern von Änderungen an der Working Copy
rein lokal
kann zum Transplantieren in andere Branches genutzt werden
funktioniert wie ein Stack
Jan Dittberner 27. April 2016 36
111. BRANCHES, TAGS, MERGE UND REBASE
STASH (GIT-KOMMANDO)
kurzes Zwischenlagern von Änderungen an der Working Copy
rein lokal
kann zum Transplantieren in andere Branches genutzt werden
funktioniert wie ein Stack
Kommandos:
git stash [save]
git stash pop
git stash apply
Jan Dittberner 27. April 2016 36
112. BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
SVN-like (Entwicklungsbranch + ggf. Release-Branches)
Jan Dittberner 27. April 2016 37
113. BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
SVN-like (Entwicklungsbranch + ggf. Release-Branches)
evtl. + QA-Branch, z.B. für Integration mit CI-Tools wie Jenkins
Jan Dittberner 27. April 2016 37
114. BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
SVN-like (Entwicklungsbranch + ggf. Release-Branches)
evtl. + QA-Branch, z.B. für Integration mit CI-Tools wie Jenkins
Feature-Branches, User-Branches
Jan Dittberner 27. April 2016 37
115. BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
SVN-like (Entwicklungsbranch + ggf. Release-Branches)
evtl. + QA-Branch, z.B. für Integration mit CI-Tools wie Jenkins
Feature-Branches, User-Branches
+ Bugfix-Branches
Jan Dittberner 27. April 2016 37
116. BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
SVN-like (Entwicklungsbranch + ggf. Release-Branches)
evtl. + QA-Branch, z.B. für Integration mit CI-Tools wie Jenkins
Feature-Branches, User-Branches
+ Bugfix-Branches
…
Jan Dittberner 27. April 2016 37
117. BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
git-flow
Best Practice für Arbeit mit Feature-Branches, Hotfixes, Releases, Tags
Jan Dittberner 27. April 2016 38
118. BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
git-flow
Best Practice für Arbeit mit Feature-Branches, Hotfixes, Releases, Tags
beschrieben in „A successful git branching model“ [5]
Jan Dittberner 27. April 2016 38
119. BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
git-flow
Best Practice für Arbeit mit Feature-Branches, Hotfixes, Releases, Tags
beschrieben in „A successful git branching model“ [5]
Tool-Unterstützung für shell mit git-flow [6]
git flow feature
git flow release
Jan Dittberner 27. April 2016 38
120. BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
git-flow
Best Practice für Arbeit mit Feature-Branches, Hotfixes, Releases, Tags
beschrieben in „A successful git branching model“ [5]
Tool-Unterstützung für shell mit git-flow [6]
git flow feature
git flow release
Unterstützung in Atlassian SourceTree [7]
Jan Dittberner 27. April 2016 38
121. BRANCHES, TAGS, MERGE UND REBASE
BRANCHING-MODELLE
git-flow
Best Practice für Arbeit mit Feature-Branches, Hotfixes, Releases, Tags
beschrieben in „A successful git branching model“ [5]
Tool-Unterstützung für shell mit git-flow [6]
git flow feature
git flow release
Unterstützung in Atlassian SourceTree [7]
Unterstützung in Eclipse EGit [8]
Jan Dittberner 27. April 2016 38
122. BRANCHES, TAGS, MERGE UND REBASE
MERGING
Content-Tracking statt Patch-Serie
(wie z.B. bei SVN)
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 39
123. BRANCHES, TAGS, MERGE UND REBASE
MERGING
Content-Tracking statt Patch-Serie
(wie z.B. bei SVN)
es existieren mehrere
Merge-Strategien (Standard
recursive, mehr unter git help
merge)
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 39
124. BRANCHES, TAGS, MERGE UND REBASE
MERGING
Content-Tracking statt Patch-Serie
(wie z.B. bei SVN)
es existieren mehrere
Merge-Strategien (Standard
recursive, mehr unter git help
merge)
Mergekonflikte müssen wie bei
anderen VCS aufgelöst werden, dafür
können Tools eingebunden werden
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 39
125. BRANCHES, TAGS, MERGE UND REBASE
MERGING
Content-Tracking statt Patch-Serie
(wie z.B. bei SVN)
es existieren mehrere
Merge-Strategien (Standard
recursive, mehr unter git help
merge)
Mergekonflikte müssen wie bei
anderen VCS aufgelöst werden, dafür
können Tools eingebunden werden
Kommando: git merge
Quelle: ProGit [4]
Jan Dittberner 27. April 2016 39
126. BRANCHES, TAGS, MERGE UND REBASE
MERGING
ACHTUNG:
Wenn ein Merge abgebrochen werden soll, statt
den Mergekonflikt zu lösen (z.B. mit git reset
--hard), IMMER git merge --abort
benutzen, da sonst der nachfolgende Commit
automatisch ein Merge-Commit wird und die
Änderungen aus dem ursprünglich für den Merge
vorgesehenen Branch dann nicht enthalten sind.
Jan Dittberner 27. April 2016 40
128. BRANCHES, TAGS, MERGE UND REBASE
MERGE-TOOLS
Eclipse mit EGit [8]
Jan Dittberner 27. April 2016 41
129. BRANCHES, TAGS, MERGE UND REBASE
MERGE-TOOLS
Eclipse mit EGit [8]
TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert)
Jan Dittberner 27. April 2016 41
130. BRANCHES, TAGS, MERGE UND REBASE
MERGE-TOOLS
Eclipse mit EGit [8]
TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert)
vimdiff
Jan Dittberner 27. April 2016 41
131. BRANCHES, TAGS, MERGE UND REBASE
MERGE-TOOLS
Eclipse mit EGit [8]
TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert)
vimdiff
…
Jan Dittberner 27. April 2016 41
132. BRANCHES, TAGS, MERGE UND REBASE
MERGE-TOOLS
Eclipse mit EGit [8]
TortoiseMerge (mit TortoiseSVN oder TortoiseGit [9] installiert)
vimdiff
…
Standard-Merge-Tool kann konfiguriert (git help config, Suchbegriff
merge.tool) und über git mergetool aufgerufen werden
Jan Dittberner 27. April 2016 41
134. BRANCHES, TAGS, MERGE UND REBASE
CHERRY-PICKING
einzelne Commits aus anderem Branch in aktuellen Branch übernehmen
Jan Dittberner 27. April 2016 42
135. BRANCHES, TAGS, MERGE UND REBASE
CHERRY-PICKING
einzelne Commits aus anderem Branch in aktuellen Branch übernehmen
z.B. für Hotfixes
Jan Dittberner 27. April 2016 42
136. BRANCHES, TAGS, MERGE UND REBASE
CHERRY-PICKING
einzelne Commits aus anderem Branch in aktuellen Branch übernehmen
z.B. für Hotfixes
git cherry-pick <commits> (<commits> kann mit Rev-Spezifikation
definiert werden)
Jan Dittberner 27. April 2016 42
138. BRANCHES, TAGS, MERGE UND REBASE
REBASING
History eines (lokalen) Branches
umpflanzen
Jan Dittberner 27. April 2016 43
139. BRANCHES, TAGS, MERGE UND REBASE
REBASING
History eines (lokalen) Branches
umpflanzen
git rebase <branchname>
Jan Dittberner 27. April 2016 43
140. BRANCHES, TAGS, MERGE UND REBASE
REBASING
History eines (lokalen) Branches
umpflanzen
git rebase <branchname>
ACHTUNG: rebasing von bereits
publizierten Branches ist BÖSE
Jan Dittberner 27. April 2016 43
141. BRANCHES, TAGS, MERGE UND REBASE
MERGING VON COMMITS IN MEHRERE BRANCHES
Jan Dittberner 27. April 2016 44
142. BRANCHES, TAGS, MERGE UND REBASE
MERGING VON COMMITS IN MEHRERE BRANCHES
Mehrere Varianten:
Jan Dittberner 27. April 2016 44
143. BRANCHES, TAGS, MERGE UND REBASE
MERGING VON COMMITS IN MEHRERE BRANCHES
Mehrere Varianten:
git checkout <branch> und git merge <feature>
Jan Dittberner 27. April 2016 44
144. BRANCHES, TAGS, MERGE UND REBASE
MERGING VON COMMITS IN MEHRERE BRANCHES
Mehrere Varianten:
git checkout <branch> und git merge <feature>
git cherry-pick
Jan Dittberner 27. April 2016 44
145. BRANCHES, TAGS, MERGE UND REBASE
MERGING VON COMMITS IN MEHRERE BRANCHES
Mehrere Varianten:
git checkout <branch> und git merge <feature>
git cherry-pick
git stash und git stash apply in mehrere Branches
Jan Dittberner 27. April 2016 44
146. BRANCHES, TAGS, MERGE UND REBASE
MERGING VON COMMITS IN MEHRERE BRANCHES
Mehrere Varianten:
git checkout <branch> und git merge <feature>
git cherry-pick
git stash und git stash apply in mehrere Branches
Tipp:
git rerere Aufzeichnung/Replay von Merge-Konflikt-Behebungen
Jan Dittberner 27. April 2016 44
147. BRANCHES, TAGS, MERGE UND REBASE
PATCH-WORKFLOW
Neben git merge kann auch mit Patches gearbeitet werden:
git format-patch zum Erstellen,
git send-email zum Versenden von Patch-Serien,
git am (Apply Mail) zum Integrieren
Diese Vorgehensweise kommt noch recht häufig bei Free/Open Source Software
Projekten zum Einsatz
Jan Dittberner 27. April 2016 45
180. HOOKS
Skripte in .git/hooks für Eingriff in verschiedenen Phasen
lokal für jeweiliges Repository
Jan Dittberner 27. April 2016 57
181. HOOKS
Skripte in .git/hooks für Eingriff in verschiedenen Phasen
lokal für jeweiliges Repository
werden bei git clone nicht kopiert
Jan Dittberner 27. April 2016 57
182. 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
184. FAQ
FREQUENTLY ASKED QUESTIONS
Wie geht Git mit symbolischen Links um?
Git behandelt Symlinks als Verweise auf Pfade (wie UNIX):
Jan Dittberner 27. April 2016 59
185. FAQ
FREQUENTLY ASKED QUESTIONS
Wie geht Git mit symbolischen Links um?
Git behandelt Symlinks als Verweise auf Pfade (wie UNIX):
Linux / UNIX / MacOS-X: funktioniert einfach
Jan Dittberner 27. April 2016 59
186. FAQ
FREQUENTLY ASKED QUESTIONS
Wie geht Git mit symbolischen Links um?
Git behandelt Symlinks als Verweise auf Pfade (wie UNIX):
Linux / UNIX / MacOS-X: funktioniert einfach
Windows mit cygwin git: funktioniert nur innerhalb von cygwin
Jan Dittberner 27. April 2016 59
187. FAQ
FREQUENTLY ASKED QUESTIONS
Wie geht Git mit symbolischen Links um?
Git behandelt Symlinks als Verweise auf Pfade (wie UNIX):
Linux / UNIX / MacOS-X: funktioniert einfach
Windows mit cygwin git: funktioniert nur innerhalb von cygwin
Windows mit git for Windows: es wird eine Datei mit dem Verweisziel des
Symlinks als Inhalt angelegt
Jan Dittberner 27. April 2016 59
188. FAQ
FREQUENTLY ASKED QUESTIONS
Wie geht Git mit symbolischen Links um?
Git behandelt Symlinks als Verweise auf Pfade (wie UNIX):
Linux / UNIX / MacOS-X: funktioniert einfach
Windows mit cygwin git: funktioniert nur innerhalb von cygwin
Windows mit git for Windows: es wird eine Datei mit dem Verweisziel des
Symlinks als Inhalt angelegt
Fazit: Vermeiden, wenn das Repository auf Windows-Clients bearbeitet werden muss
Jan Dittberner 27. April 2016 59
192. FAQ
FREQUENTLY ASKED QUESTIONS
Kann Git mit großen Binaries umgehen?
Große Binaries sollten nicht direkt in Git-Repositories liegen
Jan Dittberner 27. April 2016 61
193. FAQ
FREQUENTLY ASKED QUESTIONS
Kann Git mit großen Binaries umgehen?
Große Binaries sollten nicht direkt in Git-Repositories liegen
Metadaten können in Git mitverwaltet werden
Jan Dittberner 27. April 2016 61
194. FAQ
FREQUENTLY ASKED QUESTIONS
Kann Git mit großen Binaries umgehen?
Große Binaries sollten nicht direkt in Git-Repositories liegen
Metadaten können in Git mitverwaltet werden
Toolunterstützung z.B. git-lfs und git-annex (nur Linux)
Jan Dittberner 27. April 2016 61
197. 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
198. 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
199. 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
200. LITERATUR
Jon Loeliger and Matthew McCullough. Version Control with Git, 2nd Edition.
O’Reilly Media, 2012. ISBN: 978-1-4493-1638-9. URL:
http://shop.oreilly.com/product/0636920022862.do.
René Preißel and Bjørn Stachmann. Git: Dezentrale Versionverwaltung im
Team - Grundlagen und Workflows, 3. Auflage. dpunkt.verlag GmbH, 2015.
ISBN: 978-3-86490-311-3. URL:
http://www.dpunkt.de/buecher/5040/9783864903113-git-
12151.html.
Jan Dittberner 27. April 2016 67