Git Goodies - Spiel, Spaß und Spannung mit Git · Git Goodies Spiel, Spaß und Spannung mit Git...
Transcript of Git Goodies - Spiel, Spaß und Spannung mit Git · Git Goodies Spiel, Spaß und Spannung mit Git...
Git GoodiesSpiel, Spaß und Spannung mit Git
Sebastian ”tokkee“ Harl<[email protected]>
FrOSCon 201225. August 2012
Statistiken: Wer seid ihr?
• Wer bezeichnet sich als Programmierer?
• Wer arbeitet an einem OpenSource-Projekt?
. . . mit mehr als 10 Entwicklern?
. . . mit mehr als 100 Entwicklern?
. . . mit mehr als 1000 Entwicklern?
• Wer hat schon ein Versionsverwaltungssystem (VCS) verwendet?• Wer hat schon ein zentrales VCS (CVS, SVN, . . . ) verwendet?• Wer hat schon ein dezentrales VCS (Git, bzr, Mercurial, . . . )
verwendet?• Wer hat schon mit Git gearbeitet?• Wer hat noch nie was von Git gehort?
. . . RAUS! ;-)
Git Goodies Folie 2
Statistiken: Wer seid ihr?
• Wer bezeichnet sich als Programmierer?• Wer arbeitet an einem OpenSource-Projekt?
. . . mit mehr als 10 Entwicklern?
. . . mit mehr als 100 Entwicklern?
. . . mit mehr als 1000 Entwicklern?• Wer hat schon ein Versionsverwaltungssystem (VCS) verwendet?• Wer hat schon ein zentrales VCS (CVS, SVN, . . . ) verwendet?• Wer hat schon ein dezentrales VCS (Git, bzr, Mercurial, . . . )
verwendet?• Wer hat schon mit Git gearbeitet?• Wer hat noch nie was von Git gehort?
. . . RAUS! ;-)
Git Goodies Folie 2
Statistiken: Wer seid ihr?
• Wer bezeichnet sich als Programmierer?• Wer arbeitet an einem OpenSource-Projekt?
. . . mit mehr als 10 Entwicklern?
. . . mit mehr als 100 Entwicklern?
. . . mit mehr als 1000 Entwicklern?• Wer hat schon ein Versionsverwaltungssystem (VCS) verwendet?• Wer hat schon ein zentrales VCS (CVS, SVN, . . . ) verwendet?• Wer hat schon ein dezentrales VCS (Git, bzr, Mercurial, . . . )
verwendet?• Wer hat schon mit Git gearbeitet?• Wer hat noch nie was von Git gehort?
. . . RAUS! ;-)
Git Goodies Folie 2
Statistiken: Wer seid ihr?
• Wer bezeichnet sich als Programmierer?• Wer arbeitet an einem OpenSource-Projekt?
. . . mit mehr als 10 Entwicklern?
. . . mit mehr als 100 Entwicklern?
. . . mit mehr als 1000 Entwicklern?• Wer hat schon ein Versionsverwaltungssystem (VCS) verwendet?• Wer hat schon ein zentrales VCS (CVS, SVN, . . . ) verwendet?• Wer hat schon ein dezentrales VCS (Git, bzr, Mercurial, . . . )
verwendet?• Wer hat schon mit Git gearbeitet?• Wer hat noch nie was von Git gehort?
. . . RAUS! ;-)
Git Goodies Folie 2
Statistiken: Wer seid ihr?
• Wer bezeichnet sich als Programmierer?• Wer arbeitet an einem OpenSource-Projekt?
. . . mit mehr als 10 Entwicklern?
. . . mit mehr als 100 Entwicklern?
. . . mit mehr als 1000 Entwicklern?
• Wer hat schon ein Versionsverwaltungssystem (VCS) verwendet?• Wer hat schon ein zentrales VCS (CVS, SVN, . . . ) verwendet?• Wer hat schon ein dezentrales VCS (Git, bzr, Mercurial, . . . )
verwendet?• Wer hat schon mit Git gearbeitet?• Wer hat noch nie was von Git gehort?
. . . RAUS! ;-)
Git Goodies Folie 2
Statistiken: Wer seid ihr?
• Wer bezeichnet sich als Programmierer?• Wer arbeitet an einem OpenSource-Projekt?
. . . mit mehr als 10 Entwicklern?
. . . mit mehr als 100 Entwicklern?
. . . mit mehr als 1000 Entwicklern?• Wer hat schon ein Versionsverwaltungssystem (VCS) verwendet?
• Wer hat schon ein zentrales VCS (CVS, SVN, . . . ) verwendet?• Wer hat schon ein dezentrales VCS (Git, bzr, Mercurial, . . . )
verwendet?• Wer hat schon mit Git gearbeitet?• Wer hat noch nie was von Git gehort?
. . . RAUS! ;-)
Git Goodies Folie 2
Statistiken: Wer seid ihr?
• Wer bezeichnet sich als Programmierer?• Wer arbeitet an einem OpenSource-Projekt?
. . . mit mehr als 10 Entwicklern?
. . . mit mehr als 100 Entwicklern?
. . . mit mehr als 1000 Entwicklern?• Wer hat schon ein Versionsverwaltungssystem (VCS) verwendet?• Wer hat schon ein zentrales VCS (CVS, SVN, . . . ) verwendet?
• Wer hat schon ein dezentrales VCS (Git, bzr, Mercurial, . . . )verwendet?
• Wer hat schon mit Git gearbeitet?• Wer hat noch nie was von Git gehort?
. . . RAUS! ;-)
Git Goodies Folie 2
Statistiken: Wer seid ihr?
• Wer bezeichnet sich als Programmierer?• Wer arbeitet an einem OpenSource-Projekt?
. . . mit mehr als 10 Entwicklern?
. . . mit mehr als 100 Entwicklern?
. . . mit mehr als 1000 Entwicklern?• Wer hat schon ein Versionsverwaltungssystem (VCS) verwendet?• Wer hat schon ein zentrales VCS (CVS, SVN, . . . ) verwendet?• Wer hat schon ein dezentrales VCS (Git, bzr, Mercurial, . . . )
verwendet?
• Wer hat schon mit Git gearbeitet?• Wer hat noch nie was von Git gehort?
. . . RAUS! ;-)
Git Goodies Folie 2
Statistiken: Wer seid ihr?
• Wer bezeichnet sich als Programmierer?• Wer arbeitet an einem OpenSource-Projekt?
. . . mit mehr als 10 Entwicklern?
. . . mit mehr als 100 Entwicklern?
. . . mit mehr als 1000 Entwicklern?• Wer hat schon ein Versionsverwaltungssystem (VCS) verwendet?• Wer hat schon ein zentrales VCS (CVS, SVN, . . . ) verwendet?• Wer hat schon ein dezentrales VCS (Git, bzr, Mercurial, . . . )
verwendet?• Wer hat schon mit Git gearbeitet?
• Wer hat noch nie was von Git gehort?
. . . RAUS! ;-)
Git Goodies Folie 2
Statistiken: Wer seid ihr?
• Wer bezeichnet sich als Programmierer?• Wer arbeitet an einem OpenSource-Projekt?
. . . mit mehr als 10 Entwicklern?
. . . mit mehr als 100 Entwicklern?
. . . mit mehr als 1000 Entwicklern?• Wer hat schon ein Versionsverwaltungssystem (VCS) verwendet?• Wer hat schon ein zentrales VCS (CVS, SVN, . . . ) verwendet?• Wer hat schon ein dezentrales VCS (Git, bzr, Mercurial, . . . )
verwendet?• Wer hat schon mit Git gearbeitet?• Wer hat noch nie was von Git gehort?
. . . RAUS! ;-)
Git Goodies Folie 2
Statistiken: Wer seid ihr?
• Wer bezeichnet sich als Programmierer?• Wer arbeitet an einem OpenSource-Projekt?
. . . mit mehr als 10 Entwicklern?
. . . mit mehr als 100 Entwicklern?
. . . mit mehr als 1000 Entwicklern?• Wer hat schon ein Versionsverwaltungssystem (VCS) verwendet?• Wer hat schon ein zentrales VCS (CVS, SVN, . . . ) verwendet?• Wer hat schon ein dezentrales VCS (Git, bzr, Mercurial, . . . )
verwendet?• Wer hat schon mit Git gearbeitet?• Wer hat noch nie was von Git gehort? . . . RAUS! ;-)
Git Goodies Folie 2
Wiederholung: Git Grundlagen
Git GoodiesAllgemeinesProtokollierung, Anderungen betrachtenDie Historie andernAnderungen verwaltenZOMFG! Subversion . . .
Git Goodies Folie 3
Git: Ubersicht
• http://www.git.or.cz/• VCS (Version Control System)• 2005 von Linus Torvalds initiiert
(aktueller Maintainer: Junio C. Hamano)• dezentral• schnell und effizient• kryptographisch gesichert• ”Toolkit design“• OpenSource (GPLv2)• weit verbreitet im Einsatz (z.B. Linux Kernel, Ruby on Rails, Perl,
WINE, X.org, GNOME, Qt, Debian, . . . )
Git Goodies Folie 4
Arbeiten mit Git: Grundlagen
• ca. 150 einzelne Befehle• ”Porcelains“ und ”Plumbing“• Dokumentation als Manpages — git(7)• git help, git <command> -h• Benutzer Handbuch: http://www.kernel.org/pub/software/
scm/git/docs/user-manual.html• ”Git Community Book“: http://book.git-scm.com/• Buch ”Pro Git“: http://progit.org/book/• http:
//eagain.net/articles/git-for-computer-scientists/
Git Goodies Folie 5
Datenhaltung: Git Objektdatenbank
• DAG (directed acyclic graph)• Objekte identifiziert durch SHA-1 Summe• git cat-file -t / git cat-file -p
blob
tree
name, mode
subdir
commit parentsbranch
HEAD
tagname, message
Git Goodies Folie 6
Datenhaltung: Git Objektdatenbank
• DAG (directed acyclic graph)• Objekte identifiziert durch SHA-1 Summe• git cat-file -t / git cat-file -p
blob
tree
name, mode
subdir
commit parentsbranch
HEAD
tagname, message
Git Goodies Folie 6
Datenhaltung: Git Objektdatenbank
• DAG (directed acyclic graph)• Objekte identifiziert durch SHA-1 Summe• git cat-file -t / git cat-file -p
blob
tree
name, mode
subdir
commit parents
branch
HEAD
tagname, message
Git Goodies Folie 6
Datenhaltung: Git Objektdatenbank
• DAG (directed acyclic graph)• Objekte identifiziert durch SHA-1 Summe• git cat-file -t / git cat-file -p
blob
tree
name, mode
subdir
commit parentsbranch
HEAD
tagname, message
Git Goodies Folie 6
Datenhaltung: Git Objektdatenbank
• DAG (directed acyclic graph)• Objekte identifiziert durch SHA-1 Summe• git cat-file -t / git cat-file -p
blob
tree
name, mode
subdir
commit parentsbranch
HEAD
tagname, message
Git Goodies Folie 6
Das Mysterium ”Index“
Repository
Index
Arbeitsverz.
modify
rm --cachedadd, rm, ...
reset --softcommit
commit -a reset --mixed |--hard
Git Goodies Folie 7
Das Mysterium ”Index“
Repository
Index
Arbeitsverz.
modify
rm --cached
add, rm, ...
reset --softcommit
commit -a reset --mixed |--hard
Git Goodies Folie 7
Das Mysterium ”Index“
Repository
Index
Arbeitsverz.
modify
rm --cached
add, rm, ...
reset --soft
commit
commit -a reset --mixed |--hard
Git Goodies Folie 7
Das Mysterium ”Index“
Repository
Index
Arbeitsverz.
modify
rm --cached
add, rm, ...
reset --softcommit
commit -a reset --mixed |--hard
Git Goodies Folie 7
Das Mysterium ”Index“
Repository
Index
Arbeitsverz.
modify
rm --cachedadd, rm, ...
reset --softcommit
commit -a reset --mixed |--hard
Git Goodies Folie 7
Das Mysterium ”Index“
Repository
Index
Arbeitsverz.
modify
rm --cachedadd, rm, ...
reset --softcommit
commit -a
reset --mixed |--hard
Git Goodies Folie 7
Das Mysterium ”Index“
Repository
Index
Arbeitsverz.
modify
rm --cachedadd, rm, ...
reset --softcommit
commit -a reset --mixed |--hard
Git Goodies Folie 7
Git Goodies
Git Goodies Folie 8
Nutzliche Konfig-Einstellungen und Aliase
Konfigurationseinstellungen
• git config --global color.ui auto• git config --global merge.tool vimdiff• git config --global push.default current
Git Goodies Folie 9
Nutzliche Konfig-Einstellungen und Aliase (2)
Aliasegit config --global alias.• wdiff ’diff --color-words’• cdiff ’diff --cached’• bdiff ’diff --color-words=.’• wshow ’show --color-words’
Git Goodies Folie 10
Nutzliche Konfig-Einstellungen und Aliase (3)
Aliase• stat ’status -s’• unadd ’rm --cached’• dlog ’log --decorate’• graph ’log --graph
--pretty=format:"%Cred%h%Creset-%C(yellow)%d%Creset %s%Cgreen(%cr)%C(bold blue)<%an>%Creset"--abbrev-commit --date=relative’
Git Goodies Folie 11
Git ganz woanders
git --git-dir=PFAD --work-tree=PFAD
core.worktree PFAD
Git Goodies Folie 12
Haufige Verwirrung
git reset --hard | --soft?
oder
git revert?
oder
git checkout?
Git Goodies Folie 13
Cooles, benutzbares Frontend
tig
Git Goodies Folie 14
Was war eigentlich gestern?
git rev-parse
master@{yesterday}master:README
masterˆ{/bug #4711}
Git Goodies Folie 15
Anderungen protokollieren
git reflog
Git Goodies Folie 16
Wann wurde Funtion foo geandert?
git log -p -U0
Git Goodies Folie 17
Wann wurde Fehler X eingefuhrt?
git bisect
Git Goodies Folie 18
Was fehlt Upstream eigentlich noch?
git cherry / git-wtf
http://git-wt-commit.rubyforge.org/
Git Goodies Folie 19
Alles noch einmal
git rebase -i
Git Goodies Folie 20
OOOPS! Da hab ich doch was vergessen
git commit --amend
Git Goodies Folie 21
Alles anders!
git filter-branch
Git Goodies Folie 22
Feingranulare Commits
git add -p
Git Goodies Folie 23
Chef: ”Ich brauch mal ganz schnell . . .“
git stash
Git Goodies Folie 24
Kirschen pflucken?
git cherry-pick
git cherry-pick -n|--no-commit
Git Goodies Folie 25
SVN: Das Unvermeidliche . . . !?
git svn
Git Goodies Folie 26
Git Goodies
Vielen Dank fur die Aufmerksamkeit!
Gibt es Fragen?
http://feedback.froscon.org/
Kontakt:Sebastian ”tokkee“ Harl
We’re hiring: http://teamix.net/jobs/
Git Goodies Folie 27