Einführung in Git - GameCamp Munich 2011

78
Einführung in Git GameCamp Munich René Bruns Donnerstag, 14. Juli 2011

description

Eine kurze Einführung in Git. Was ist Git? Was unterscheidet es von anderen Systemen? Warum ist es so cool?

Transcript of Einführung in Git - GameCamp Munich 2011

Einführung in Git

GameCamp Munich

René Bruns

Donnerstag, 14. Juli 2011

Über mich

• René Bruns• Entwickler seit 2001• Seit 2009 bei Travian Games• Seit 2011 Technical Director

Games Development

Donnerstag, 14. Juli 2011

Über Travian Games

• Hauptsitz in München• 2005 gegründet• >200 Mitarbeiter• >100 Mio. Registrierungen• 52 Länderversionen von Travian• Travian, Travianer, Wewaii,

Imperion, goalunited, Ballersunited, Eredan, Miramagia, Remanum, Battlemons

Donnerstag, 14. Juli 2011

Agenda

Historisches

Git Grundlagen

Coole Tools

Mehr Infos

Donnerstag, 14. Juli 2011

Umfrage

Wer hat schon mit einem Sourcecodeverwaltungssystem gearbeitet?

Donnerstag, 14. Juli 2011

Umfrage

Donnerstag, 14. Juli 2011

Umfrage

Subversion?

Donnerstag, 14. Juli 2011

Umfrage

Subversion?

CVS?

Donnerstag, 14. Juli 2011

Umfrage

Subversion?

CVS?Git?

Donnerstag, 14. Juli 2011

Umfrage

Subversion?

CVS?Git?

Mercurial?

Donnerstag, 14. Juli 2011

Umfrage

Subversion?

CVS?Git?

Mercurial?

Bazaar?

Donnerstag, 14. Juli 2011

Umfrage

Subversion?

CVS?Git?

Mercurial?

Bazaar?

Perforce?

Donnerstag, 14. Juli 2011

Umfrage

Subversion?

CVS?Git?

Mercurial?

Bazaar?

Perforce?

Visual SourceSafe?

Donnerstag, 14. Juli 2011

Umfrage

Subversion?

CVS?Git?

Mercurial?

Bazaar?

Perforce?

Visual SourceSafe?

CuPiDo?

Donnerstag, 14. Juli 2011

Copy und Paste in Datumsordner

Umfrage

Subversion?

CVS?Git?

Mercurial?

Bazaar?

Perforce?

Visual SourceSafe?

Donnerstag, 14. Juli 2011

Historisches

• Entwickelt 2005• Ablöse von Bitkeeper als

Versionsverwaltung des Linux-Kernels• Wird eingesetzt von Git, Samba,

X.org, GNOME, Ruby on Rails, VLC, Wine, Perl 5, phpBB, ...

Donnerstag, 14. Juli 2011

Legende

1

Ich bin ein Commit

Donnerstag, 14. Juli 2011

Legende

1

Ich bin ein Commit

2

Ich baue auf Commit 1 auf

Donnerstag, 14. Juli 2011

Legende

1 2

A BBranch

Donnerstag, 14. Juli 2011

Revisions vs. Hash

4711

Revisions

Hash

Donnerstag, 14. Juli 2011

Revisions vs. Hash

4711

Revisions

4712

Hash

Donnerstag, 14. Juli 2011

Revisions vs. Hash

4711

Revisions

4712 4713

Hash

Donnerstag, 14. Juli 2011

Revisions vs. Hash

4711 4714

Revisions

4712 4713

Hash

Donnerstag, 14. Juli 2011

Revisions vs. Hash

4711 4714

Revisions

4712 4713

54ed65f201b42f79d83043e7ac00fee1cb1975c9

Hash

Donnerstag, 14. Juli 2011

Revisions vs. Hash

4711 4714

Revisions

4712 4713

54ed65f201b42f79d83043e7ac00fee1cb1975c9

Hash

f81c259

Donnerstag, 14. Juli 2011

Revisions vs. Hash

4711 4714

Revisions

4712 4713

54ed65f201b42f79d83043e7ac00fee1cb1975c9

Hash

f81c259 dd146ac

Donnerstag, 14. Juli 2011

Revisions vs. Hash

4711 4714

Revisions

4712 4713

54ed65f201b42f79d83043e7ac00fee1cb1975c9

e0a5b1a

Hash

f81c259 dd146ac

Donnerstag, 14. Juli 2011

Zentrales System (bspw. SVN)

Trunk

Branch 1

Branch 2

Server

ClientWorking Copy

Donnerstag, 14. Juli 2011

Dezentrales System

Trunk

Branch 1

Server

Client

Working Copy

Trunk

Branch 1

Branch 2

Donnerstag, 14. Juli 2011

Dezentrales System

Trunk

Branch 1

Server

ClientsDonnerstag, 14. Juli 2011

Dezentrales System

Trunk

Branch 1

Server

ClientsDonnerstag, 14. Juli 2011

Dezentrales System

Trunk

Branch 1

Server

ClientsDonnerstag, 14. Juli 2011

Dezentrales System

Trunk

Branch 1

Server

ClientsDonnerstag, 14. Juli 2011

Dezentrales System

ClientsDonnerstag, 14. Juli 2011

Die vier Ebenen von Git

Donnerstag, 14. Juli 2011

Die vier Ebenen von Git

Working Directory

Donnerstag, 14. Juli 2011

Die vier Ebenen von Git

Working Directory

Staging

Donnerstag, 14. Juli 2011

Die vier Ebenen von Git

Working Directory

Staging

Repository

Donnerstag, 14. Juli 2011

Die vier Ebenen von Git

Working Directory

Staging

Repository

Remote Repository

Donnerstag, 14. Juli 2011

Das "Pointer-Prinzip"

1 2

A B

Donnerstag, 14. Juli 2011

Das "Pointer-Prinzip"

1 2

A B

Master

Donnerstag, 14. Juli 2011

Das "Pointer-Prinzip"

1 2

A B

Master

Branch

Donnerstag, 14. Juli 2011

Das "Pointer-Prinzip"

1 2

A B

Master

Branch

Head

Donnerstag, 14. Juli 2011

Das "Pointer-Prinzip"

1 2

A B

Master

Branch

Head

remote/masterDonnerstag, 14. Juli 2011

Typischer Workflow

Repository erstellen

$ mkdir gitrepo$ cd gitrepo$ git init

Donnerstag, 14. Juli 2011

Typischer Workflow

Arbeiten...

$ vi index.php[tipp...tipp...tipp...]

1

Donnerstag, 14. Juli 2011

Typischer Workflow

Zu Commit hinzufügen ("stagen")

$ git add index.php

1

Donnerstag, 14. Juli 2011

Typischer Workflow

Commiten

$ git commit -m "Testcommit"

1

Donnerstag, 14. Juli 2011

Typischer Workflow

Ändern und direkt commiten

$ vi index.php

1 2

Donnerstag, 14. Juli 2011

Typischer Workflow

Ändern und direkt commiten

$ vi index.php$ git commit -a -m "Nochmal"

1 2

Donnerstag, 14. Juli 2011

Schnelles Branchen und Mergen

Branch erstellen

$ git checkout -b neuerbranch

1 2MasterHead

neuerbranch*

Donnerstag, 14. Juli 2011

Schnelles Branchen und Mergen

Im Branch arbeiten

$ vi index.php

1 2 AMas

ter

neue

rbran

ch*

Hea

d

Donnerstag, 14. Juli 2011

Schnelles Branchen und Mergen

Im Branch arbeiten$ vi index.php$ commit -am "Neues Feature"

1 2 AMas

ter

neue

rbra

nch*

Hea

d

Donnerstag, 14. Juli 2011

Schnelles Branchen und Mergen

Branch wechseln$ git checkout master$ vi index.php$ commit -am "Neues Feature"

1 2 A

3

Mas

ter*

Hea

d

neuerbranch

Donnerstag, 14. Juli 2011

Schnelles Branchen und Mergen

Mergen (True Merge)

$ git merge neuerbranch

1 2 A

3 4

Mas

ter*

Hea

d

neuerbranch

Donnerstag, 14. Juli 2011

Schnelles Branchen und Mergen

Rebase

$ git checkout neuerbranch

1 2 A

3 Master

neuerbranch*

Head

Donnerstag, 14. Juli 2011

Schnelles Branchen und Mergen

Rebase

$ git rebase master

1 2 A‘

3

Master

neue

rbra

nch*

Hea

d

Donnerstag, 14. Juli 2011

Schnelles Branchen und Mergen

Fast-Forward Merge

$ git checkout master$ git merge neuerbranch

1 2 A‘

3

Master*

neue

rbra

nch

Hea

d

Donnerstag, 14. Juli 2011

Coole Tools

Bisect

Donnerstag, 14. Juli 2011

Coole Tools

OK ? X

Bisect

Good Bad$ git bisect start$ git bisect good 1$ git bisect bad HEAD

Donnerstag, 14. Juli 2011

Coole Tools

OK OK OK OK ? X

Bisect

Good BadGood

$ git bisect good

Donnerstag, 14. Juli 2011

Coole Tools

OK OK OK OK ? X X

Bisect

Good BadGood Bad

$ git bisect bad

Donnerstag, 14. Juli 2011

Coole Tools

OK OK OK OK OK ! X

Bisect

Good BadGood BadGood

$ git bisect good

Donnerstag, 14. Juli 2011

Coole Tools

Bisect

Live Demo

Donnerstag, 14. Juli 2011

Coole Tools

1 2 3 4 5 6 7

Interactive Rebasing

Donnerstag, 14. Juli 2011

Coole Tools

1 2 3 4 5 6' 7'

Interactive Rebasing

Edit 6

Donnerstag, 14. Juli 2011

Coole Tools

1 2+3 4 5 6' 7'

Interactive Rebasing

Squash 2&3

Donnerstag, 14. Juli 2011

Coole Tools

1 2+3 5" 6" 7'

Interactive Rebasing

Löschen 4

Donnerstag, 14. Juli 2011

Coole Tools

Interactive Rebasing

Live Demo

Donnerstag, 14. Juli 2011

Coole Tools

Weitere Coole Tools

Donnerstag, 14. Juli 2011

Coole Tools

Weitere Coole Tools

•Commits korrigieren ($ git commit --amend)

Donnerstag, 14. Juli 2011

Coole Tools

Weitere Coole Tools

•Commits korrigieren ($ git commit --amend)•Änderungen zwischenspeichern ($ git stash *)

Donnerstag, 14. Juli 2011

Coole Tools

Weitere Coole Tools

•Commits korrigieren ($ git commit --amend)•Änderungen zwischenspeichern ($ git stash *)•Cherry-Picking ($ git cherry-pick)

Donnerstag, 14. Juli 2011

Coole Tools

Weitere Coole Tools

•Commits korrigieren ($ git commit --amend)•Änderungen zwischenspeichern ($ git stash *)•Cherry-Picking ($ git cherry-pick)•git-svn-bridge ($ git svn *)

Donnerstag, 14. Juli 2011

Coole Tools

Weitere Coole Tools

•Commits korrigieren ($ git commit --amend)•Änderungen zwischenspeichern ($ git stash *)•Cherry-Picking ($ git cherry-pick)•git-svn-bridge ($ git svn *)•Git Gui ($ git gui *)

Donnerstag, 14. Juli 2011

Coole Tools

Weitere Coole Tools

•Commits korrigieren ($ git commit --amend)•Änderungen zwischenspeichern ($ git stash *)•Cherry-Picking ($ git cherry-pick)•git-svn-bridge ($ git svn *)•Git Gui ($ git gui *)•Gitk ($ gitk)

Donnerstag, 14. Juli 2011

Lesezeichen - Links und so

•Git-Homepage: http://git-scm.com/

•Pro Git Book + Free Ebook: http://progit.org/

•github: https://github.com/

•Git-Wikipedia-Artikel: http://de.wikipedia.org/wiki/Git

Donnerstag, 14. Juli 2011

Vielen Dank!

• Feedback? Fragen?• Email: [email protected]• Twitter: @renebruns

Donnerstag, 14. Juli 2011