SlideShare a Scribd company logo
Forstå hvordan Git tænker og snakker
Jan Krag
12.april 2013
For Udvikling 1
GITerikke
 SVN + magi
 Hg med en anden syntax
HvaderGITså?
 Et filsystem med versionering?
 En database?
 En samling af “objekter” for
content(filer), directories osv.
 En DAG 
 Nogle low-level commandoer til
at manipulere disse (plumbing)
 Nogle high-level scripts
(porcelain)
GITobjekter
 Alle objekter gemmes I Gits
object db (I .git mappen)
 Objekter er komprimeret med
Zlib, og refereres af en 40-hex-
cifret Sha-1 hash.
 Er immutable
De4typer
 blob = filer
 tree = directories
 commit
 tag
BLOB
 En blob gemmer indholdet af en
fil (ikke selve filen).
 Filnavn og mode gemmes ikke
her
 Det betyder at hvis man har flere
filer med helt ens indhold I ens
træ, gemmes kun 1 blob!!
Filindhold -> Zlib:deflate -> blob:a906cb
TREE
 Et tree objekt er bare en fil og
indeholder sådan set bare en
liste af blobs og andre trees,
sammen med filnavn, mode og
sha1 for hver:
100644 blob a906cb README
100644 blob a874b7 index.html
040000 tree fe8971 src
-> deflate -> tree:1a736f
commit
Commit er en simpel fil der
indeholder:
 Info om: author, committer, message
 Pointer til et tree object (sha1)
 Pointer til én eller flere parent commits
Første commit
tree 1a738d
author Jan Krag
<jankrag@gmail.com>
1205602288
committer Jan Krag
<jankrag@gmail.com>
1205602288
My first commit
commit: a11bef
Næste commit
tree e1b3ec
parent a11bef
author Jan Krag
<jankrag@gmail.com> 1205602288
committer Jan Krag
<jankrag@gmail.com> 1205602288
my second commit, which is better than the
first
commit: a7d991
“merge” commit
Der kan sagtens være mere
end 2 parents
Tree d8g5as
parent a11bef
parent cd73f2
author Jan …
committer Jan …
Merging blabla and bumdibum
commit: c983bh
Tag:1d45ff
Tag objekter er navngivne
“aliaser” til andre objekter (normalt
commits):
object 0576fa
type commit
tag v0.1
tagger Jan Krag
<jankrag@gmail.com> 1205602288
this is my v0.1 tag
~> git cat-file -p 0d7d31267eb0047bca341f8d119d971a8ccca7c0
tree 10575e4e560545665716381aeec15d4f0415a58d
parent 6aaa8df13f38f5e3b88caf288b8d46b9269a66bc
parent 2fae83ce8a4c430557e8b9551501a2f4b8d933ea
author Eva Franch <eva@schantz.com> 1365604628 +0200
committer Eva Franch <eva@schantz.com> 1365604628 +0200
~> git cat-file -p 10575e4e560545665716381aeec15d4f0415a58d
100644 blob 6b6ab4c31b08444698540f2e6e12c95b529f7f4c .gitignore
100644 blob d2fb95c801ef177e3e4a6d49cb1ec543d4f7ef5b .hgignore
040000 tree a6dbc05cb692962828bea8a8172319e8dc3349ac NlpAdvice
040000 tree 893b964c27c8a29169e42fd8497dcae4cbbc7956 NlpAdviceLightCQ
040000 tree aa52e7ed76a72d6ed47dfd9984df3a91482e3586 NlpAdviceLightDemo
040000 tree a6d6355892559865d40d9730a52102092901013e NlpAdviceLightWeb
040000 tree fe915628b5d6577c561b2ec6fbca1fd25b228507 NlpAdviceWeb
040000 tree 68d0be8a59b14f18e9d8bbecde0ac7c80f641a2e NlpGuiTests
040000 tree a1034138f5e741ecf09a72f787bc89afa05c744e NlpWeblogicStub
100644 blob f003e3fece6a4849c089117998a04fcac3d9d083 build.gradle
100644 blob 299ab93f36090d9211dd558330458f5cbc61ba72 gradle.properties
100644 blob e4aa4fd65d9af22099b86beb26b21d33d7fd4651 pom.xml
100644 blob 6cc879ad82f82a5319342a9aa9244a79678b05b3 settings.gradle
040000 tree 0cff60d4f81fdbea90be7db6003bf0da7327db18 target
040000 tree 1273c6e3afd1fc1d37d4afee449192071b3623b4 tomcatrunner6Nlp
Refs
 Det modsatte af objekter, idet de er
mutable.
 Refs er meget simple filer gemt I
.git/refs/
 Eksempler på refs er branches og
remotes
Branches - fortsat
 Branches er billige
 At lave en branch er virkelig bare at
skrive 40 karakterer i en ny fil i
refs/heads/
Branch
 En branch er KUN en simpel one-liner fil I .git/refs/heads
~/workspaces/BOSS/nlp/.git/refs/heads> ll
drwxr-xr-x 7 jankrag staff 238 Apr 11 11:50 .
drwxr-xr-x 6 jankrag staff 204 Apr 11 11:38 ..
-rw-r--r-- 1 jankrag staff 41 Apr 11 11:50 develop
drwxr-xr-x 2 jankrag staff 68 Feb 18 10:39 feature
-rw-r--r-- 1 jankrag staff 41 Mar 12 10:57 master
drwxr-xr-x 3 jankrag staff 102 Apr 11 11:50 release
~/workspaces/BOSS/nlp/.git/refs/heads> cat develop
4a6c6f50f7e9cd72306949f84fac1cff6a4b2908
Generel model
tree
commit
Blob
Branch
tag
HEAD
 Er en simpel fil i .git der indeholder en
reference til den branch der arbejdes på:
~/nlp> cat .git/HEAD
ref: refs/heads/release/v1.4.0
Vi ændrer nu
den “nederste”
fil:
Simple repo
med 3 dirs og 3
filer.
Git internals - Hogwarts School of ma'Git
Switch til anden branch
 git checkout develop
 Opdaterer working dir til hele det indhold
som sha1 I refs/heads/develop peger på
 Opdaterer HEADS til at pege på develop
 Derefter vil nye commits opdatere
sha’en I refs/heads/develop
Git internals - Hogwarts School of ma'Git
Remotes
Merge vs. rebase
Treeish
Er forskellige måder at referere til et objekt.
 Fuld Sha:
dae86e1950b1277e545cee180551750029cfe735
 Partial Sha: dae86e (ikke bestemt længde – bare
unik. Typisk 6-7 tegn)
 Branch el. Tag navn: develop
 Dvs. Hvad som helst I .git/refs/heads eller .git/refs/tags
Treeish - upræcise
Dato spec:
 master@{yesterday}
 master@{1 month ago}
Relativt
 master@{5} - 5 commits tilbage på master
Treeish - upræcise
Carrot parent
 e65s46^2 eller master^2
 Kun meningsfyldt på commits med mere end 1
parent
 e65s46^^^ er lovligt
Der er adskillige flere muligheder …
Index (staging)
 Tidligere kaldet “cache”
 Det er her objekterne egentlig oprettes.
Git internals - Hogwarts School of ma'Git
Config
 Global config ligger i .gitconfig
 Repo-lokal config ligger i .git/config
~/> git config --global user.name “Jan
Krag”
 Eller den gode gamle vi ~/.gitconfig
 git config -l
log
$ git log --pretty=oneline
cf25cc3bfb0ece7dc3609b8dc0c committing all changes
0c8a9ec46029a4e92a428cb98c9 changed the version number
0576fac355dd17e39fd2671b010 my second commit, which is..
a11bef06a3f659402fe7563abf9 first commit
$ git log -n 30 --since=”1 month ago” --until=yesterday --author=”jak”
Plumbing
Inspicer git objekter:
 git cat-file
 git ls-tree
gitk
 Grafisk brugerflade
Instaweb
 Svarer til hg serve
 Starter en local webserver (lighttpd)
Hvordan arbejder man sammen
Den centrale server
Løjtnant model
Integration manager model

More Related Content

PPTX
Revolução bochevique
PDF
Biología 3ero plan de trabajo - dic 2013
DOCX
PPTX
All about team nj 복사본
PPT
KMG &lt;3
PPT
Reunió pares 2013 14
PDF
PDF
3 çoklu ortam_uygulamaları
Revolução bochevique
Biología 3ero plan de trabajo - dic 2013
All about team nj 복사본
KMG &lt;3
Reunió pares 2013 14
3 çoklu ortam_uygulamaları

Viewers also liked (19)

PPTX
Storyboard
PDF
My self
DOC
Unit & section name change of dmp officers
DOCX
Doc6
DOCX
Productin schedule
PDF
Novidades Outono 2013
DOC
Valenpandoblog3 131110120617-phpapp01
PDF
MY Aveashin Stefecaat رخصة الطيران
PPTX
DOCX
Master sunn
PDF
Representação na PGR sobre o aeroporto construído na gestão de Aécio Neves
PPTX
Presentación UOC Alumni - Ecommerce
PDF
Mascara delatex 14 07-14
PPTX
Importancia de adquisicion de habitos saludables diapositivas
PDF
PDF
Ponencia sobre Hiperinnovación TEDxLaRioja 2011
PPT
Plano de aula power poit dulcimar pires e joelma pinhal
PDF
Equações de 2 grau funções
PDF
Mujeres en el agua pdi
Storyboard
My self
Unit & section name change of dmp officers
Doc6
Productin schedule
Novidades Outono 2013
Valenpandoblog3 131110120617-phpapp01
MY Aveashin Stefecaat رخصة الطيران
Master sunn
Representação na PGR sobre o aeroporto construído na gestão de Aécio Neves
Presentación UOC Alumni - Ecommerce
Mascara delatex 14 07-14
Importancia de adquisicion de habitos saludables diapositivas
Ponencia sobre Hiperinnovación TEDxLaRioja 2011
Plano de aula power poit dulcimar pires e joelma pinhal
Equações de 2 grau funções
Mujeres en el agua pdi
Ad

Git internals - Hogwarts School of ma'Git

  • 1. Forstå hvordan Git tænker og snakker Jan Krag 12.april 2013 For Udvikling 1
  • 2. GITerikke  SVN + magi  Hg med en anden syntax
  • 3. HvaderGITså?  Et filsystem med versionering?  En database?  En samling af “objekter” for content(filer), directories osv.  En DAG   Nogle low-level commandoer til at manipulere disse (plumbing)  Nogle high-level scripts (porcelain)
  • 4. GITobjekter  Alle objekter gemmes I Gits object db (I .git mappen)  Objekter er komprimeret med Zlib, og refereres af en 40-hex- cifret Sha-1 hash.  Er immutable
  • 5. De4typer  blob = filer  tree = directories  commit  tag
  • 6. BLOB  En blob gemmer indholdet af en fil (ikke selve filen).  Filnavn og mode gemmes ikke her  Det betyder at hvis man har flere filer med helt ens indhold I ens træ, gemmes kun 1 blob!! Filindhold -> Zlib:deflate -> blob:a906cb
  • 7. TREE  Et tree objekt er bare en fil og indeholder sådan set bare en liste af blobs og andre trees, sammen med filnavn, mode og sha1 for hver: 100644 blob a906cb README 100644 blob a874b7 index.html 040000 tree fe8971 src -> deflate -> tree:1a736f
  • 8. commit Commit er en simpel fil der indeholder:  Info om: author, committer, message  Pointer til et tree object (sha1)  Pointer til én eller flere parent commits
  • 9. Første commit tree 1a738d author Jan Krag <jankrag@gmail.com> 1205602288 committer Jan Krag <jankrag@gmail.com> 1205602288 My first commit commit: a11bef
  • 10. Næste commit tree e1b3ec parent a11bef author Jan Krag <jankrag@gmail.com> 1205602288 committer Jan Krag <jankrag@gmail.com> 1205602288 my second commit, which is better than the first commit: a7d991
  • 11. “merge” commit Der kan sagtens være mere end 2 parents Tree d8g5as parent a11bef parent cd73f2 author Jan … committer Jan … Merging blabla and bumdibum commit: c983bh
  • 12. Tag:1d45ff Tag objekter er navngivne “aliaser” til andre objekter (normalt commits): object 0576fa type commit tag v0.1 tagger Jan Krag <jankrag@gmail.com> 1205602288 this is my v0.1 tag
  • 13. ~> git cat-file -p 0d7d31267eb0047bca341f8d119d971a8ccca7c0 tree 10575e4e560545665716381aeec15d4f0415a58d parent 6aaa8df13f38f5e3b88caf288b8d46b9269a66bc parent 2fae83ce8a4c430557e8b9551501a2f4b8d933ea author Eva Franch <eva@schantz.com> 1365604628 +0200 committer Eva Franch <eva@schantz.com> 1365604628 +0200
  • 14. ~> git cat-file -p 10575e4e560545665716381aeec15d4f0415a58d 100644 blob 6b6ab4c31b08444698540f2e6e12c95b529f7f4c .gitignore 100644 blob d2fb95c801ef177e3e4a6d49cb1ec543d4f7ef5b .hgignore 040000 tree a6dbc05cb692962828bea8a8172319e8dc3349ac NlpAdvice 040000 tree 893b964c27c8a29169e42fd8497dcae4cbbc7956 NlpAdviceLightCQ 040000 tree aa52e7ed76a72d6ed47dfd9984df3a91482e3586 NlpAdviceLightDemo 040000 tree a6d6355892559865d40d9730a52102092901013e NlpAdviceLightWeb 040000 tree fe915628b5d6577c561b2ec6fbca1fd25b228507 NlpAdviceWeb 040000 tree 68d0be8a59b14f18e9d8bbecde0ac7c80f641a2e NlpGuiTests 040000 tree a1034138f5e741ecf09a72f787bc89afa05c744e NlpWeblogicStub 100644 blob f003e3fece6a4849c089117998a04fcac3d9d083 build.gradle 100644 blob 299ab93f36090d9211dd558330458f5cbc61ba72 gradle.properties 100644 blob e4aa4fd65d9af22099b86beb26b21d33d7fd4651 pom.xml 100644 blob 6cc879ad82f82a5319342a9aa9244a79678b05b3 settings.gradle 040000 tree 0cff60d4f81fdbea90be7db6003bf0da7327db18 target 040000 tree 1273c6e3afd1fc1d37d4afee449192071b3623b4 tomcatrunner6Nlp
  • 15. Refs  Det modsatte af objekter, idet de er mutable.  Refs er meget simple filer gemt I .git/refs/  Eksempler på refs er branches og remotes
  • 16. Branches - fortsat  Branches er billige  At lave en branch er virkelig bare at skrive 40 karakterer i en ny fil i refs/heads/
  • 17. Branch  En branch er KUN en simpel one-liner fil I .git/refs/heads ~/workspaces/BOSS/nlp/.git/refs/heads> ll drwxr-xr-x 7 jankrag staff 238 Apr 11 11:50 . drwxr-xr-x 6 jankrag staff 204 Apr 11 11:38 .. -rw-r--r-- 1 jankrag staff 41 Apr 11 11:50 develop drwxr-xr-x 2 jankrag staff 68 Feb 18 10:39 feature -rw-r--r-- 1 jankrag staff 41 Mar 12 10:57 master drwxr-xr-x 3 jankrag staff 102 Apr 11 11:50 release ~/workspaces/BOSS/nlp/.git/refs/heads> cat develop 4a6c6f50f7e9cd72306949f84fac1cff6a4b2908
  • 19. HEAD  Er en simpel fil i .git der indeholder en reference til den branch der arbejdes på: ~/nlp> cat .git/HEAD ref: refs/heads/release/v1.4.0
  • 20. Vi ændrer nu den “nederste” fil: Simple repo med 3 dirs og 3 filer.
  • 22. Switch til anden branch  git checkout develop  Opdaterer working dir til hele det indhold som sha1 I refs/heads/develop peger på  Opdaterer HEADS til at pege på develop  Derefter vil nye commits opdatere sha’en I refs/heads/develop
  • 26. Treeish Er forskellige måder at referere til et objekt.  Fuld Sha: dae86e1950b1277e545cee180551750029cfe735  Partial Sha: dae86e (ikke bestemt længde – bare unik. Typisk 6-7 tegn)  Branch el. Tag navn: develop  Dvs. Hvad som helst I .git/refs/heads eller .git/refs/tags
  • 27. Treeish - upræcise Dato spec:  master@{yesterday}  master@{1 month ago} Relativt  master@{5} - 5 commits tilbage på master
  • 28. Treeish - upræcise Carrot parent  e65s46^2 eller master^2  Kun meningsfyldt på commits med mere end 1 parent  e65s46^^^ er lovligt Der er adskillige flere muligheder …
  • 29. Index (staging)  Tidligere kaldet “cache”  Det er her objekterne egentlig oprettes.
  • 31. Config  Global config ligger i .gitconfig  Repo-lokal config ligger i .git/config ~/> git config --global user.name “Jan Krag”  Eller den gode gamle vi ~/.gitconfig  git config -l
  • 32. log $ git log --pretty=oneline cf25cc3bfb0ece7dc3609b8dc0c committing all changes 0c8a9ec46029a4e92a428cb98c9 changed the version number 0576fac355dd17e39fd2671b010 my second commit, which is.. a11bef06a3f659402fe7563abf9 first commit $ git log -n 30 --since=”1 month ago” --until=yesterday --author=”jak”
  • 33. Plumbing Inspicer git objekter:  git cat-file  git ls-tree gitk  Grafisk brugerflade
  • 34. Instaweb  Svarer til hg serve  Starter en local webserver (lighttpd)