marcus ramberg: git now

Post on 20-Jan-2015

865 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Marcus Rambergs foredrag under GoOpen 2009

TRANSCRIPT

G(et)it nå!

Marcus Ramberg

Nordaaker Ltd

@marcusramberg (Twitter)

I denne presentasjonen

● Hvorfor versjonskontroll?

● Et historisk perspektiv

● Viktige konsepter

● Git i daglig bruk

● Snedige 3. parts-tillegg

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)

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

Et historisk perspektiv

● Patch 1985

● CVS (1986)

– Concurrent Versison System

– Lar fere redigere samme fl

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

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

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.

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.

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.

Viktige konsepter

● Sentralisert vs Desentralisert

● .git - flstruktur

● Objektdatabase

● «Plumbing» og «Porclain»

Sentralisert versjonkontroll

Arbeidskopi

Tjener

Arbeidskopi

Arbeidskopi

Arbeidskopi

Arbeidskopi Alice Bob

Charlie Dixe

Desentralisert versjonkontroll

Arbeidskopi

Tjener

Tjener

Tjener

Tjener

Tjener Alice Bob

Charlie Dixe

Tjener

Charlie's Laptop

Offine

● Diff

● Copy

● Add

● Commit

● Checkout branch

● Merge branch

● Blame

● Tag

● Alt untatt push/pull

.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

Informasjon lagres i objektdatabase

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

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

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

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 <tom@...tom@...>> 1204666883 +01001204666883 +0100committer Maxcommitter Max <<max@...max@...>> 120 1204666883 +01004666883 +0100

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

66796679

eab4eab4

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-----

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

En viktig konsekvens:

Git er kjapt!

Git-kommandoer - UNIX-flosof

Porselenet

I daglig bruk

$ cd ~/Source/latest-project

$ git init

$ git add .

$ git commit -m'First post'

● Lav kostnad for å komme igang

Hent info om repo

$ git status

$ git log

$ git show e6bf359ac52200efe9e46a1

$ git diff HEAD^

$ git grep foo

$ git blame lib/buildbreaker.c

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

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.

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

# 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

Snedige 3-partstilegg

● Github

● Git-svn

● Easy git

● Gitorious

● gitk/gitx

Github – Open Source hosting

Spore Forks

Github – Sosialt nisje-nettverk

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/

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

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.

gitk/gitx

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*]$

Spørsmål?

● marcus@nordaaker.com

● 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

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.

2

I denne presentasjonen

● Hvorfor versjonskontroll?

● Et historisk perspektiv

● Viktige konsepter

● Git i daglig bruk

● Snedige 3. parts-tillegg

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

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.

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

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

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.

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.

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

10

Viktige konsepter

● Sentralisert vs Desentralisert

● .git - flstruktur

● Objektdatabase

● «Plumbing» og «Porclain»

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

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

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.

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

15

Informasjon lagres i objektdatabase

Katalogen i .git som vist i forrige slide

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.

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

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.

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 <tom@...tom@...>> 1204666883 +01001204666883 +0100committer Maxcommitter Max <<max@...max@...>> 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

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

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.

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

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

24

Porselenet

Kommandoene du brukerResten kalles plumbing, og trengs ikke for vanlige

brukere / brukes internt i porselenet

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

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

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

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.

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

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.

31

Snedige 3-partstilegg

● Github

● Git-svn

● Easy git

● Gitorious

● gitk/gitx

32

Github – Open Source hosting

TilbyrWebgrensesnitt for commitsGraferAdmin for bidragsytere

33

Spore Forks

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

Github lar deg spore dem

34

Github – Sosialt nisje-nettverk

● Click to add an outline

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

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

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

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.

38

gitk/gitx

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*]$

40

Spørsmål?

● marcus@nordaaker.com

● 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

top related