marcus ramberg: git now
DESCRIPTION
Marcus Rambergs foredrag under GoOpen 2009TRANSCRIPT
![Page 1: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/1.jpg)
G(et)it nå!
Marcus Ramberg
Nordaaker Ltd
@marcusramberg (Twitter)
![Page 2: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/2.jpg)
I denne presentasjonen
● Hvorfor versjonskontroll?
● Et historisk perspektiv
● Viktige konsepter
● Git i daglig bruk
● Snedige 3. parts-tillegg
![Page 3: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/10.jpg)
Viktige konsepter
● Sentralisert vs Desentralisert
● .git - flstruktur
● Objektdatabase
● «Plumbing» og «Porclain»
![Page 11: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/11.jpg)
Sentralisert versjonkontroll
Arbeidskopi
Tjener
Arbeidskopi
Arbeidskopi
Arbeidskopi
Arbeidskopi Alice Bob
Charlie Dixe
![Page 12: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/12.jpg)
Desentralisert versjonkontroll
Arbeidskopi
Tjener
Tjener
Tjener
Tjener
Tjener Alice Bob
Charlie Dixe
Tjener
Charlie's Laptop
![Page 13: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/13.jpg)
Offine
● Diff
● Copy
● Add
● Commit
● Checkout branch
● Merge branch
● Blame
● Tag
● Alt untatt push/pull
![Page 14: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/14.jpg)
.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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/15.jpg)
Informasjon lagres i objektdatabase
![Page 16: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/22.jpg)
En viktig konsekvens:
Git er kjapt!
![Page 23: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/23.jpg)
Git-kommandoer - UNIX-flosof
![Page 24: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/24.jpg)
Porselenet
![Page 25: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/30.jpg)
# 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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/31.jpg)
Snedige 3-partstilegg
● Github
● Git-svn
● Easy git
● Gitorious
● gitk/gitx
![Page 32: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/32.jpg)
Github – Open Source hosting
![Page 33: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/33.jpg)
Spore Forks
![Page 34: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/34.jpg)
Github – Sosialt nisje-nettverk
![Page 35: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/35.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/36.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/37.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/38.jpg)
gitk/gitx
![Page 39: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/39.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/40.jpg)
Spørsmål?
● 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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/41.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/42.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/43.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/44.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/45.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/46.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/47.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/48.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/49.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/50.jpg)
10
Viktige konsepter
● Sentralisert vs Desentralisert
● .git - flstruktur
● Objektdatabase
● «Plumbing» og «Porclain»
![Page 51: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/51.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/52.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/53.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/54.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/55.jpg)
15
Informasjon lagres i objektdatabase
Katalogen i .git som vist i forrige slide
![Page 56: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/56.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/57.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/58.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/59.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/60.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/61.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/62.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/63.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/64.jpg)
24
Porselenet
Kommandoene du brukerResten kalles plumbing, og trengs ikke for vanlige
brukere / brukes internt i porselenet
![Page 65: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/65.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/66.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/67.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/68.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/69.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/70.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/71.jpg)
31
Snedige 3-partstilegg
● Github
● Git-svn
● Easy git
● Gitorious
● gitk/gitx
![Page 72: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/72.jpg)
32
Github – Open Source hosting
TilbyrWebgrensesnitt for commitsGraferAdmin for bidragsytere
![Page 73: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/73.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/74.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/75.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/76.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/77.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/78.jpg)
38
gitk/gitx
![Page 79: Marcus Ramberg: Git now](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/79.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022042507/54bd89484a79592c508b4590/html5/thumbnails/80.jpg)
40
Spørsmål?
● 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