80
G(et)it nå! Marcus Ramberg Nordaaker Ltd @marcusramberg (Twitter)

Marcus Ramberg: Git now

Embed Size (px)

DESCRIPTION

Marcus Rambergs foredrag under GoOpen 2009

Citation preview

Page 1: Marcus Ramberg: Git now

G(et)it nå!

Marcus Ramberg

Nordaaker Ltd

@marcusramberg (Twitter)

Page 2: Marcus Ramberg: Git now

I denne presentasjonen

● Hvorfor versjonskontroll?

● Et historisk perspektiv

● Viktige konsepter

● Git i daglig bruk

● Snedige 3. parts-tillegg

Page 3: Marcus Ramberg: Git now

Hvorfor versjonskontroll?

● Forutsetting for samarbeid

● Men også alene

● Undo for kodebasen din

– cp Codebase Codebase.goodCopy

– cp Codebase Codebase.reallyGoodCopy

● Forutsetning for kontroll

● Utvikle fere funksjoner parallelt (Grener)

Page 4: Marcus Ramberg: Git now

Et historisk perspektiv

● ~1960 CDC Update IBM IEB_Update, første

SCM verktøyene (Kort-baserte)

● 1972 Bell Labs fnner opp diff algoritmen

● RCS (Sent på 1970-tallet

– Revision Control System

– Låser alle fler

– Skalerer dårlig med fere utviklere.

– Fortsatt nyttig for å jobbe med binærobjekter

Page 5: Marcus Ramberg: Git now

Et historisk perspektiv

● Patch 1985

● CVS (1986)

– Concurrent Versison System

– Lar fere redigere samme fl

– Defakto verktøy i UNIX miljøet 1990-tallet

Page 6: Marcus Ramberg: Git now

Et historisk perspektiv

● SVN

● Annonsert in 2000 som en erstatning for

CVS

– Atomiske commit

– Lagrer fytting og kopiering av fler. Sporer hele

endringer samlet, heller enn enkelt-fler.

– Støtter Webdav-basert protokoll

– SVK er et påbygg som gir distribuert støtte for

SVN

Page 7: Marcus Ramberg: Git now

Et historisk perspektiv

● Tidlig på 2000 tallet, første distribuerte

systemer som GNU arch og BitKeeper

● 2005 – Linus thorvalds starter Git

prosjektet etter kontrovers rundt

Bitkeeper-lisensiering.

● Ps: det fnnes fere systemer som

Perforce, Rational og Microsoft Source

Safe som ikke ble nevnt i denne

historikken.

Page 8: Marcus Ramberg: Git now

Git er:

● Distribuert

● Kjapt og skalerbart til store kodebaser

● Open Source (GPL V2)

● Basert på å lagre snapshots, ikke diffs

● Tilgjengelig i de feste unix distribusjoner.

● Tilgjengelig som installasjonspakker for

Windows og OSX.

Page 9: Marcus Ramberg: Git now

Git er ikke:

● SVN

– Git er ikke det neste logiske steget på stigen

fra RCS -> CVS -> SVN

● Kjempe-enkelt

– «With great power comes great reponsibility»

– Git kan være litt frusterende i starten.

Page 10: Marcus Ramberg: Git now

Viktige konsepter

● Sentralisert vs Desentralisert

● .git - flstruktur

● Objektdatabase

● «Plumbing» og «Porclain»

Page 11: Marcus Ramberg: Git now

Sentralisert versjonkontroll

Arbeidskopi

Tjener

Arbeidskopi

Arbeidskopi

Arbeidskopi

Arbeidskopi Alice Bob

Charlie Dixe

Page 12: Marcus Ramberg: Git now

Desentralisert versjonkontroll

Arbeidskopi

Tjener

Tjener

Tjener

Tjener

Tjener Alice Bob

Charlie Dixe

Tjener

Charlie's Laptop

Page 13: Marcus Ramberg: Git now

Offine

● Diff

● Copy

● Add

● Commit

● Checkout branch

● Merge branch

● Blame

● Tag

● Alt untatt push/pull

Page 14: Marcus Ramberg: Git now

.git

● En katalog i roten av hvert prosjekt:

|-- HEAD # peker til aktiv gren

|-- config # instillinger for dette prosjektet

|-- description # beskrivelse av prosjektet

|-- hooks/ # automatiske handlinger

|-- index # index file ( Hva er planlagt til neste commit)?

|-- logs/ # Historikk over grenene dine

|-- objects/ # Objektene til prosjektet (commiter, trær, blober, tagger)

`-- refs/ # Pekere til grenene dine

Page 15: Marcus Ramberg: Git now

Informasjon lagres i objektdatabase

Page 16: Marcus Ramberg: Git now

id(object) = SHA1(innholdet i flen)

a23fa23f

33473347

8e9b8e9b

f943f943

601a601a

cc39cc39

14321432

efa4efa4

17981798

12601260

3e933e93

55925592

dd85dd85

335e335e

57bc57bc

332e332e 23a723a7

34fe34fe cca6cca6

22112211 53905390

93a493a4 cc5ecc5e

b3cab3ca

66796679

eab4eab4

Page 17: Marcus Ramberg: Git now

Innhold lagres i blob objekter

a23fa23f

33473347

8e9b8e9b

f943f943

601a601a

cc39cc39

14321432

efa4efa4

17981798

12601260

3e933e93

55925592

dd85dd85

335e335e

57bc57bc

332e332e 23a723a7

34fe34fe cca6cca6

22112211 53905390

93a493a4 cc5ecc5e

b3cab3ca

#include <stdio.h>#include <stdio.h>

int main ()int main (){{ printf(”Hello World”);printf(”Hello World”); return 0;return 0;}}

66796679

eab4eab4

Page 18: Marcus Ramberg: Git now

Struktur lagres i tree-objekter

a23fa23f

33473347

8e9b8e9b

f943f943

601a601a

cc39cc39

14321432

efa4efa4

17981798

12601260

3e933e93

55925592

dd85dd85

335e335e

57bc57bc

332e332e 23a723a7

34fe34fe cca6cca6

22112211 53905390

93a493a4 cc5ecc5e

b3cab3ca

040000 tree fec552 src040000 tree fec552 src100644 blob cdea5 hw.c100644 blob cdea5 hw.c100644 blob b45d5 100644 blob b45d5 INFOINFO

66796679

eab4eab4

Page 19: Marcus Ramberg: Git now

Historikk lagres i commit-objekter

a23fa23f

33473347

8e9b8e9b

f943f943

601a601a

cc39cc39

14321432

efa4efa4

17981798

12601260

3e933e93

55925592

dd85dd85

335e335e

57bc57bc

332e332e 23a723a7

34fe34fe cca6cca6

22112211 53905390

93a493a4 cc5ecc5e

b3cab3ca

tree eec64...tree eec64...parent c9781...parent c9781...author Tom <author Tom <[email protected]@...>> 1204666883 +01001204666883 +0100committer Maxcommitter Max <<[email protected]@...>> 120 1204666883 +01004666883 +0100

Fixed a major bug in Fixed a major bug in Hello World.Hello World.

66796679

eab4eab4

Page 20: Marcus Ramberg: Git now

Referanser lagres i tag-objekter

a23fa23f

33473347

8e9b8e9b

f943f943

601a601a

cc39cc39

14321432

efa4efa4

17981798

12601260

3e933e93

55925592

dd85dd85

335e335e

57bc57bc

332e332e 23a723a7

34fe34fe cca6cca6

22112211 53905390

93a493a4 cc5ecc5e

b3cab3ca

66796679

eab4eab4

object 92e86...type committag v1.0.7tagger Jack <jack@...> 1136523576 -0800

GIT 1.0.7-----BEGIN PGP SIGNATURE-----Version: GnuPG v1.4.2 (GNU/Linux)

iD8D…-----END PGP SIGNATURE-----

Page 21: Marcus Ramberg: Git now

a23fa23f

33473347

8e9b8e9b

f943f943

601a601a

cc39cc39

14321432

efa4efa4

17981798

12601260

3e933e93

55925592

dd85dd85

335e335e

57bc57bc

332e332e 23a723a7

34fe34fe cca6cca6

22112211 53905390

93a493a4 cc5ecc5e

b3cab3ca

66796679

eab4eab4

v1.0v1.0

alpha-3alpha-3

mas

ter

mas

ter

feat

ure-

Xfe

atur

e-Xgrener

tags

as aliases of objects (usually commits)

Peker på et commit objekt

Page 22: Marcus Ramberg: Git now

En viktig konsekvens:

Git er kjapt!

Page 23: Marcus Ramberg: Git now

Git-kommandoer - UNIX-flosof

Page 24: Marcus Ramberg: Git now

Porselenet

Page 25: Marcus Ramberg: Git now

I daglig bruk

$ cd ~/Source/latest-project

$ git init

$ git add .

$ git commit -m'First post'

● Lav kostnad for å komme igang

Page 26: Marcus Ramberg: Git now

Hent info om repo

$ git status

$ git log

$ git show e6bf359ac52200efe9e46a1

$ git diff HEAD^

$ git grep foo

$ git blame lib/buildbreaker.c

Page 27: Marcus Ramberg: Git now

Kan legge til noder etter behov.

F.eks kan bob ha forket mitt repository og

gjort noen endringer jeg ønsker å hente

$ git add remote bob git://bob/o.git

$ git pull bob

Page 28: Marcus Ramberg: Git now

Split & Hersk

$ git clone git://git.no/foo.git foo

$ vi foo.pl

$ git rebase

$ vi bar.pl

$ git add foo.pl bar.pl

$ git format-patch origin/master

Evt. La maintainer pulle direkte fra din fork.

Page 29: Marcus Ramberg: Git now

Grener

$ git checkout -b new_branch

$ git branch # vis gren

$ git push origin new_branch

$ git checkout –track -b new_remote_branch

$ git tag v1.0

Page 30: Marcus Ramberg: Git now

# Make sure pushed remote branch is setup

retrack = "!retrack() { git config \"branch.$1.remote\" $(dirname \"$2\"); git config \"branch.$1.merge\" \"refs/heads/$(basename \"$2\")\"; }; retrack"

$ git retrack foo origin/foo

Pro Tip: retrack your branch

Page 31: Marcus Ramberg: Git now

Snedige 3-partstilegg

● Github

● Git-svn

● Easy git

● Gitorious

● gitk/gitx

Page 32: Marcus Ramberg: Git now

Github – Open Source hosting

Page 33: Marcus Ramberg: Git now

Spore Forks

Page 34: Marcus Ramberg: Git now

Github – Sosialt nisje-nettverk

Page 35: Marcus Ramberg: Git now

Easy git

● Enkelt påbygg til git

● Kun sukker, fullt kompatibel med git

● Bedre dokumentasjon med eksempler

● Får git til å ligne mer på svn

● Finnes en rekke lignende tillegg

● http://www.gnome.org/~newren/eg/

Page 36: Marcus Ramberg: Git now

git-svn

● Bruk git som klient for svn repositories

$ git-svn clone http://svn.url/

$ git-add Changes

$ git-commit -m'Phear it'

$ git-svn rebase

$ git-svn dcommit

Page 37: Marcus Ramberg: Git now

Gitosis

● Sett opp din egen git server

● Gir tilgang over SSH uten å trenge egne

brukerkontoer

● Styr tilgangskontroll

● http://eagain.net/gitweb/?p=gitosis.git

● Kombiner med GitWeb for din egen mini-

github.

Page 38: Marcus Ramberg: Git now

gitk/gitx

Page 39: Marcus Ramberg: Git now

Bonus: git prompt

● Jeg nevnte at Git er kjapt, sant? Hvorfor ikke putte det i

promptet?

function parse_git_dirty {

[[ $(git status 2> /dev/null | tail -n1) != "nothing to commit

(working directory clean)" ]] && echo "*" }

function parse_git_branch {

git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \

(.*\)/[\1$(parse_git_dirty)]/" }

export PS1='\u@\h \[\033[1;33m\]\w\[\033[0m\]$(parse_git_branch)$

'

presto:

marcus@Command-Central ~/Source/mojomojo[master*]$

Page 40: Marcus Ramberg: Git now

Spørsmål?

[email protected]

● Nordaaker leverer blant annet konsulent-

tjenester ifb. med git.

http://nordaaker.com/services.no.html

● Noen skisser ble hentet fra

http://inso.cc/wp/2008/04/10/get-the-git-slides/

● Alt slide-materialet er lisensiert under

Attribution-Share Alike 2.5 Lisensen

Page 41: Marcus Ramberg: Git now

1

G(et)it nå!

Marcus Ramberg

Nordaaker Ltd

@marcusramberg (Twitter)

Hvem er jeg?Erfaring med versjonkontroll - Jobb - Brukt diverse verktøy siden 1996. Tidlig, RCS &

CVS. - Innført SVN i flere bedrifter - Evaluerte VCS for SO - Perforce - Open Source - Bruker av diverse tjenester fra Sourceforge til

Google Code. - Satte opp opprinnelig SVN repo for Catalyst - Nylig migrert MojoMojo fra SVN til GitMitt selskap git alle prosjekterOgså dokument-storageDeployer iusethis.com direkte til produksjon via

GitHub. Har også rails applikasjoner som deployer med capistrano og Git.

Page 42: Marcus Ramberg: Git now

2

I denne presentasjonen

● Hvorfor versjonskontroll?

● Et historisk perspektiv

● Viktige konsepter

● Git i daglig bruk

● Snedige 3. parts-tillegg

Page 43: Marcus Ramberg: Git now

3

Hvorfor versjonskontroll?

● Forutsetting for samarbeid

● Men også alene

● Undo for kodebasen din

– cp Codebase Codebase.goodCopy

– cp Codebase Codebase.reallyGoodCopy

● Forutsetning for kontroll

● Utvikle fere funksjoner parallelt (Grener)

Versionskontroll utenfor utvikling:WikiUndo tracking i Word

Page 44: Marcus Ramberg: Git now

4

Et historisk perspektiv

● ~1960 CDC Update IBM IEB_Update, første

SCM verktøyene (Kort-baserte)

● 1972 Bell Labs fnner opp diff algoritmen

● RCS (Sent på 1970-tallet

– Revision Control System

– Låser alle fler

– Skalerer dårlig med fere utviklere.

– Fortsatt nyttig for å jobbe med binærobjekter

Diff fortsatt viktig i dag – unified diff som ble utviklet i 1990 er dominerende stil for patchutveksling

RCS er nyttig f.eks i DNS-systemer hvor du ønsker å låse en zonefil fra å bli redigert av flere samtidig.

Page 45: Marcus Ramberg: Git now

5

Et historisk perspektiv

● Patch 1985

● CVS (1986)

– Concurrent Versison System

– Lar fere redigere samme fl

– Defakto verktøy i UNIX miljøet 1990-tallet

Patch utviklet av Larry wall , forfatteren av Perl, og en deltaker på denne konferansen

CVS har versjonsnummer per fil. Sentralisert låsemekanisme. Ingen sporing av kopiering/renaming

. Metadata i hver katalog

Page 46: Marcus Ramberg: Git now

6

Et historisk perspektiv

● SVN

● Annonsert in 2000 som en erstatning for

CVS

– Atomiske commit

– Lagrer fytting og kopiering av fler. Sporer hele

endringer samlet, heller enn enkelt-fler.

– Støtter Webdav-basert protokoll

– SVK er et påbygg som gir distribuert støtte for

SVN

Brandet som CVS done right.Samme sentraliserte modell, men sporer endringer i

trær heller enn filer

Page 47: Marcus Ramberg: Git now

7

Et historisk perspektiv

● Tidlig på 2000 tallet, første distribuerte

systemer som GNU arch og BitKeeper

● 2005 – Linus thorvalds starter Git

prosjektet etter kontrovers rundt

Bitkeeper-lisensiering.

● Ps: det fnnes fere systemer som

Perforce, Rational og Microsoft Source

Safe som ikke ble nevnt i denne

historikken.

● Merk at det også finnes andre distribuerte VCS som bazaar og hg.

Page 48: Marcus Ramberg: Git now

8

Git er:

● Distribuert

● Kjapt og skalerbart til store kodebaser

● Open Source (GPL V2)

● Basert på å lagre snapshots, ikke diffs

● Tilgjengelig i de feste unix distribusjoner.

● Tilgjengelig som installasjonspakker for

Windows og OSX.

Eksempel på store kodebaser som bruker git: Linux, Perl, Gnome, X11 & Wine

Windows-støtte var lenge et problem, og fungerte kun med hjelp av CygWin. Nå finnes msysgit, som inkluderer en installer, samt en portabel versjon som ikke trenger å installeres.

Page 49: Marcus Ramberg: Git now

9

Git er ikke:

● SVN

– Git er ikke det neste logiske steget på stigen

fra RCS -> CVS -> SVN

● Kjempe-enkelt

– «With great power comes great reponsibility»

– Git kan være litt frusterende i starten.

Ugyldig mental modell.

Hjelper hvis du er vant med unix modellen.Så blir det skikkelig digg etterhvert

Page 50: Marcus Ramberg: Git now

10

Viktige konsepter

● Sentralisert vs Desentralisert

● .git - flstruktur

● Objektdatabase

● «Plumbing» og «Porclain»

Page 51: Marcus Ramberg: Git now

11

Sentralisert versjonkontroll

Arbeidskopi

Tjener

Arbeidskopi

Arbeidskopi

Arbeidskopi

Arbeidskopi Alice Bob

Charlie Dixe

Dette er f.eks SVN og CVS

Arbeidskopien innholder ikke historikkKan ikke jobbe offline

Page 52: Marcus Ramberg: Git now

12

Desentralisert versjonkontroll

Arbeidskopi

Tjener

Tjener

Tjener

Tjener

Tjener Alice Bob

Charlie Dixe

Tjener

Charlie's Laptop

Hver bruker har et fullverdig tre med historikk, og utveksler sine endringer med «upstream» og «downstream».

I Charlie's eksempel utveksler laptoppen hans infomasjon kun med arbeidsstasjonen, som igjen utveksler informasjon med de andre.

I praksis finnes det ofte et offentlig/sentralt repository, men dette trenger ikke være autorativt.

Eks. Linux

Page 53: Marcus Ramberg: Git now

13

Offine

● Diff

● Copy

● Add

● Commit

● Checkout branch

● Merge branch

● Blame

● Tag

● Alt untatt push/pull

SVN var her en forbedring over CVS, som trengte online tilgang til alle operasjoner, inkludert diff.

Page 54: Marcus Ramberg: Git now

14

.git

● En katalog i roten av hvert prosjekt:

|-- HEAD # peker til aktiv gren

|-- config # instillinger for dette prosjektet

|-- description # beskrivelse av prosjektet

|-- hooks/ # automatiske handlinger

|-- index # index file ( Hva er planlagt til neste commit)?

|-- logs/ # Historikk over grenene dine

|-- objects/ # Objektene til prosjektet (commiter, trær, blober, tagger)

`-- refs/ # Pekere til grenene dine

Kan flyttes ut av prosjektet ved å sette en ENV variabel

Hooks innholder eksempler. Kan f.eks. Brukes for å sende mail på commit eller sjekke at ting er riktig formattert.

Objektdatabasen skal vi se på straks

Page 55: Marcus Ramberg: Git now

15

Informasjon lagres i objektdatabase

Katalogen i .git som vist i forrige slide

Page 56: Marcus Ramberg: Git now

16

id(object) = SHA1(innholdet i flen)

a23fa23f

33473347

8e9b8e9b

f943f943

601a601a

cc39cc39

14321432

efa4efa4

17981798

12601260

3e933e93

55925592

dd85dd85

335e335e

57bc57bc

332e332e 23a723a7

34fe34fe cca6cca6

22112211 53905390

93a493a4 cc5ecc5e

b3cab3ca

66796679

eab4eab4

SHA1 – Populær hashing algoritmeSecure Hash AlgorithmSHA-1 (as well as SHA-0) produces a 160-bit digest

from a message with a maximum length of (264 − 1) bits.

Utfases som crypto fra 2010 til fordel for SHA-2Mer enn bra nok for Git's formål.

Page 57: Marcus Ramberg: Git now

17

Innhold lagres i blob objekter

a23fa23f

33473347

8e9b8e9b

f943f943

601a601a

cc39cc39

14321432

efa4efa4

17981798

12601260

3e933e93

55925592

dd85dd85

335e335e

57bc57bc

332e332e 23a723a7

34fe34fe cca6cca6

22112211 53905390

93a493a4 cc5ecc5e

b3cab3ca

#include <stdio.h>#include <stdio.h>

int main ()int main (){{ printf(”Hello World”);printf(”Hello World”); return 0;return 0;}}

66796679

eab4eab4

binary large object (Blob)Populær term fra SQL

Page 58: Marcus Ramberg: Git now

18

Struktur lagres i tree-objekter

a23fa23f

33473347

8e9b8e9b

f943f943

601a601a

cc39cc39

14321432

efa4efa4

17981798

12601260

3e933e93

55925592

dd85dd85

335e335e

57bc57bc

332e332e 23a723a7

34fe34fe cca6cca6

22112211 53905390

93a493a4 cc5ecc5e

b3cab3ca

040000 tree fec552 src040000 tree fec552 src100644 blob cdea5 hw.c100644 blob cdea5 hw.c100644 blob b45d5 100644 blob b45d5 INFOINFO

66796679

eab4eab4

Flere tre-objekter bygger en trestruktur.Filrettigheter i oktal.

Page 59: Marcus Ramberg: Git now

19

Historikk lagres i commit-objekter

a23fa23f

33473347

8e9b8e9b

f943f943

601a601a

cc39cc39

14321432

efa4efa4

17981798

12601260

3e933e93

55925592

dd85dd85

335e335e

57bc57bc

332e332e 23a723a7

34fe34fe cca6cca6

22112211 53905390

93a493a4 cc5ecc5e

b3cab3ca

tree eec64...tree eec64...parent c9781...parent c9781...author Tom <author Tom <[email protected]@...>> 1204666883 +01001204666883 +0100committer Maxcommitter Max <<[email protected]@...>> 120 1204666883 +01004666883 +0100

Fixed a major bug in Fixed a major bug in Hello World.Hello World.

66796679

eab4eab4

Git skiller mellom forfatter og committer

Page 60: Marcus Ramberg: Git now

20

Referanser lagres i tag-objekter

a23fa23f

33473347

8e9b8e9b

f943f943

601a601a

cc39cc39

14321432

efa4efa4

17981798

12601260

3e933e93

55925592

dd85dd85

335e335e

57bc57bc

332e332e 23a723a7

34fe34fe cca6cca6

22112211 53905390

93a493a4 cc5ecc5e

b3cab3ca

66796679

eab4eab4

object 92e86...type committag v1.0.7tagger Jack <jack@...> 1136523576 -0800

GIT 1.0.7-----BEGIN PGP SIGNATURE-----Version: GnuPG v1.4.2 (GNU/Linux)

iD8D…-----END PGP SIGNATURE-----

Tags kan signeres kryptografiskKan også pushes upstream

Page 61: Marcus Ramberg: Git now

21

a23fa23f

33473347

8e9b8e9b

f943f943

601a601a

cc39cc39

14321432

efa4efa4

17981798

12601260

3e933e93

55925592

dd85dd85

335e335e

57bc57bc

332e332e 23a723a7

34fe34fe cca6cca6

22112211 53905390

93a493a4 cc5ecc5e

b3cab3ca

66796679

eab4eab4

v1.0v1.0

alpha-3alpha-3

mas

ter

mas

ter

feat

ure-

Xfe

atur

e-Xgrener

tags

as aliases of objects (usually commits)

Peker på et commit objekt

Git sporer da siste commit objekt for hver branch du tracker

Git holder også styr på når du sist merget en branch.Merk at når du sletter en branch etter å ha merget

den inn i head forsvinner den fra objektdatabasen, men er fortsatt tilgjengelig i logger i en periode.

Page 62: Marcus Ramberg: Git now

22

En viktig konsekvens:

Git er kjapt!

De fleste lokale operasjoner går på under et sekund, inkludert lage ny branch og bytte branch

Undersøkelse fra mozilla fra 2006 viste da at git var betraktelig raskere enn hg og bazar

http://weblogs.mozillazine.org/jst/archives/2006/11/vcs_performance.html

Page 63: Marcus Ramberg: Git now

23

Git-kommandoer - UNIX-flosof

Små kraftige kommandoer som har et begrenset område. Alle kommandoene som heter git- kan også kalles via selve git kommandoen med kommandonavnet som parameter

Page 64: Marcus Ramberg: Git now

24

Porselenet

Kommandoene du brukerResten kalles plumbing, og trengs ikke for vanlige

brukere / brukes internt i porselenet

Page 65: Marcus Ramberg: Git now

25

I daglig bruk

$ cd ~/Source/latest-project

$ git init

$ git add .

$ git commit -m'First post'

● Lav kostnad for å komme igang

Svært kjapt å starte å versjonskontrollere en katalogKrever ikke server

Page 66: Marcus Ramberg: Git now

26

Hent info om repo

$ git status

$ git log

$ git show e6bf359ac52200efe9e46a1

$ git diff HEAD^

$ git grep foo

$ git blame lib/buildbreaker.c

Commitish trenger bare nok av commit-meldingen til å være unikt i dette repositoriet

Postfix med ^ referrerer til parent

Page 67: Marcus Ramberg: Git now

27

Kan legge til noder etter behov.

F.eks kan bob ha forket mitt repository og

gjort noen endringer jeg ønsker å hente

$ git add remote bob git://bob/o.git

$ git pull bob

Page 68: Marcus Ramberg: Git now

28

Split & Hersk

$ git clone git://git.no/foo.git foo

$ vi foo.pl

$ git rebase

$ vi bar.pl

$ git add foo.pl bar.pl

$ git format-patch origin/master

Evt. La maintainer pulle direkte fra din fork.

Page 69: Marcus Ramberg: Git now

29

Grener

$ git checkout -b new_branch

$ git branch # vis gren

$ git push origin new_branch

$ git checkout –track -b new_remote_branch

$ git tag v1.0

Page 70: Marcus Ramberg: Git now

30

# Make sure pushed remote branch is setup

retrack = "!retrack() { git config \"branch.$1.remote\" $(dirname \"$2\"); git config \"branch.$1.merge\" \"refs/heads/$(basename \"$2\")\"; }; retrack"

$ git retrack foo origin/foo

Pro Tip: retrack your branch

Etter en push av en ny branchSikrer at configen blir satt opp riktig.

Page 71: Marcus Ramberg: Git now

31

Snedige 3-partstilegg

● Github

● Git-svn

● Easy git

● Gitorious

● gitk/gitx

Page 72: Marcus Ramberg: Git now

32

Github – Open Source hosting

TilbyrWebgrensesnitt for commitsGraferAdmin for bidragsytere

Page 73: Marcus Ramberg: Git now

33

Spore Forks

Med en distribuert VCS kan det være mange bidragsytere du ikke har kontakt med

Github lar deg spore dem

Page 74: Marcus Ramberg: Git now

34

Github – Sosialt nisje-nettverk

● Click to add an outline

Timeline for utviklereNye prosjekter fra folk du følgerCommits fra jobb-prosjekter.

Page 75: Marcus Ramberg: Git now

35

Easy git

● Enkelt påbygg til git

● Kun sukker, fullt kompatibel med git

● Bedre dokumentasjon med eksempler

● Får git til å ligne mer på svn

● Finnes en rekke lignende tillegg

● http://www.gnome.org/~newren/eg/

Jeg bruker ikke detteKan være nyttig i en overgangsfase

Page 76: Marcus Ramberg: Git now

36

git-svn

● Bruk git som klient for svn repositories

$ git-svn clone http://svn.url/

$ git-add Changes

$ git-commit -m'Phear it'

$ git-svn rebase

$ git-svn dcommit

Greit hvis du vil teste ut git uten å gjøre en full migrering

Page 77: Marcus Ramberg: Git now

37

Gitosis

● Sett opp din egen git server

● Gir tilgang over SSH uten å trenge egne

brukerkontoer

● Styr tilgangskontroll

● http://eagain.net/gitweb/?p=gitosis.git

● Kombiner med GitWeb for din egen mini-

github.

Page 78: Marcus Ramberg: Git now

38

gitk/gitx

Page 79: Marcus Ramberg: Git now

39

Bonus: git prompt

● Jeg nevnte at Git er kjapt, sant? Hvorfor ikke putte det i

promptet?

function parse_git_dirty {

[[ $(git status 2> /dev/null | tail -n1) != "nothing to commit

(working directory clean)" ]] && echo "*" }

function parse_git_branch {

git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \

(.*\)/[\1$(parse_git_dirty)]/" }

export PS1='\u@\h \[\033[1;33m\]\w\[\033[0m\]$(parse_git_branch)$

'

presto:

marcus@Command-Central ~/Source/mojomojo[master*]$

Page 80: Marcus Ramberg: Git now

40

Spørsmål?

[email protected]

● Nordaaker leverer blant annet konsulent-

tjenester ifb. med git.

http://nordaaker.com/services.no.html

● Noen skisser ble hentet fra

http://inso.cc/wp/2008/04/10/get-the-git-slides/

● Alt slide-materialet er lisensiert under

Attribution-Share Alike 2.5 Lisensen