Documente Academic
Documente Profesional
Documente Cultură
Mircea Bardac
mircea@bardac.net
30 octombrie 2009
! SCM descentralizat
! oricine poate fi server
! repository si working tree în acela#i timp
! istoric complet #i lucru decentralizat
Componente SCM (1)
! Working tree
! directoare
! fi#iere
! Con$inutul repository-ului
! fi#iere
! commit-uri
! rela$iile dintre commit-uri
Componente SCM (2)
! Rela$iile între G
E
commit-uri formeaz" F
grafuri aciclice D
B C
A
Componente SCM (3)
! Tag-uri
H
E
G
! etichete
! marcheaz" anumite F
D v1.5.0
commit-uri
B C
A v1.4.0
Componente SCM (4)
Fix1 testing
H
release
! Branch-uri G
E
! marcheaz" un lan$ de F
commit-uri D v1.5.0
B C
A v1.4.0
Componente SCM (5)
HEAD
Fix1 testing
! Referin$a HEAD
H
release
E
G
! indic" un branch
! reprezint" checkout-ul F
D v1.5.0
curent
B C
A v1.4.0
Opera$ii SCM
! Bootstrap
! init
! checkout
! schimbat branch
! Modificare
! ad"ugare, #tergere, redenumire
! commit
Opera$ii SCM (cont.)
! Informa$ii
! status
! diff
! log
! Referin$e
! tag
! branch
Probleme utilizare
! gre#eli în commit-uri
(con$inut, descriere etc.)
! limitarea accesului la anumite p"r$i
ale repo-ului (IPO)
! fi#iere cu o licen$" gre#it" în repo
Diferen$e SCM
! SCM centralizat
! opera$iile necesit" prezen$a server-ului
(single point of failure, bottleneck)
! SCM descentralizat
! clone
! fetch, pull
! push
Avantaje ale
descentraliz"rii
! nu exist" single point of failure
! modele de dezvoltare variate
! lucru deconectat
! opera$ii rapide (ex: clonarea local" -
backup, commit, status etc.)
Dezavantaje ale
descentraliz"rii
! mai greu de în$eles
! managementul accesului este mai
dificil
! greu de modificat istoria
commit-urilor (aproape imposibil)
Git
! Linus Torvals
! Linux Kernel - 16 iunie 2005
! 14 februarie 2007 - v1.5.0 -
îmbun"t"$iri majore, documenta$ie
! bash scripts, porcelains, C
Git Repository
+-- f1
F
D v1.5.0
+-- 22
B C
A v1.4.0
Git “inside”
Repository Index Work tree
HEAD
10644 4d53f3 0 foo
Fix1 testing 10644 ab5f3e 0 foo2
.
10644 d54c2a 0 bar/f1 +-- foo
H
release 10644 64dc33 0 bar/22 +-- foo2
E
+-- bar
G
+-- f1
F
D v1.5.0
+-- 22
B C
A v1.4.0
! “staging”
! git add foo; git add -i bar/f1
! git rm f3
! git mv foo3 foo2
Git “inside”
Repository Index Work tree
HEAD
10644 4d53f3 0 foo
Fix1 testing 10644 ab5f3e 0 foo2
.
10644 d54c2a 0 bar/f1 +-- foo
H
release 10644 64dc33 0 bar/22 +-- foo2
E
+-- bar
G
+-- f1
F
D v1.5.0
+-- 22
B C
A v1.4.0
! “commiting”
! git commit -m “mesaj”
Git “inside”
Repository Index Work tree
HEAD
10644 4d53f3 0 foo
Fix1 testing 10644 ab5f3e 0 foo2
.
10644 d54c2a 0 bar/f1 +-- foo
H
release 10644 64dc33 0 bar/22 +-- foo2
E
+-- bar
G
+-- f1
F
D v1.5.0
+-- 22
B C
A v1.4.0
! “reading tree”
! git read-tree
! git checkout
! git reset
Git “inside”
Repository Index Work tree
HEAD
10644 4d53f3 0 foo
Fix1 testing 10644 ab5f3e 0 foo2
.
10644 d54c2a 0 bar/f1 +-- foo
H
release 10644 64dc33 0 bar/22 +-- foo2
E
+-- bar
G
+-- f1
F
D v1.5.0
+-- 22
B C
A v1.4.0
! “checkout”
! git checkout-index
! git checkout
! git reset
Comenzi Git & Help
! ~ 130 comenzi Git
! Lista comenzilor uzuale:
! git help
! Help:
! git <command> -h
! man git-<command>
! git help <command>
! git <command> --help
Configurare Git
! Configurarea local":
! .git/config
! Configurarea global":
! $HOME/.gitconfig
! git config --global user.name “Your name”
! git config --global user.email “you@domain.tld"
! git config --global color.ui auto
! git config --global color.pager true
Bootstraping
! Crearea unui repo
! git init
! Ad"ugat con$inut
! git add file
! git add .
! %ters con$inut
! git rm file
! Redenumit con$inut
! git mv old new
Staging
! Ignorat con$inut
$ cat .gitignore
*~
*.o
! ID Commit = SHA1
! fiecare commit are cel pu$in un
p"rinte (excep$ie: primul commit)
! undo: git reset [--hard | --soft]
Referin$e obiecte (1)
! Commit
! HEAD = ultimul commit
! HEAD^ = penultimul
! HEAD^^ = antepenultimul etc.
! HEAD~5 = HEAD^^^^^
! Short hash: ff3bf7
! Full hash:
ff3bf7fbcae44c8a16d941f0eab3d14f7efcef61
Branches
! Ramuri de dezvoltare
! locale: git branch
! remote: git branch -r
! toate: git branch -a
! Schimbarea branch-ului
! git checkout some_other_branch
Tag-uri
! Branch
! local: master
! remote: origin/master
! Tag-uri
! direct prin numele lor, exemplu: v1.2.3
Status repository
! Con$inutul index-ului
! git diff --cached
! Con$inut
! commit: git show $COMMIT_ID
! fi#ier: git show HEAD:fi!ier
Repositories
! Locale
! Remote
! ad"ugate ca referin$e în repo-ul local
! git remote show
! git remote show origin
! git remote add bob ssh://fred@host/home/bob/repo
HEAD
master
Bob
Exemplu utilizare
colaborativ"
HEAD
master
Bob
git add file2; git commit -m “C”
Exemplu
HEAD
master
Bob
Exemplu
HEAD
master
Fred Bob
Exemplu
HEAD
master
Fred Bob
git clone /home/bob/repo.git
Exemplu
HEAD HEAD
master master
C C
B B
A A
Fred Bob
git clone /home/bob/repo.git
Exemplu
HEAD HEAD
C C
B B
A A
Fred Bob
Exemplu
HEAD HEAD
C C
B B
A A
Fred Bob
git commit ...
Exemplu
HEAD
master
HEAD
F
origin/master master
D
C C
B B
A A
Fred Bob
Exemplu
HEAD
master
HEAD
F
origin/master master
D
C C
B B
A A
Fred Bob
git commit -m “E”
Exemplu
HEAD
master HEAD
F master
origin/master
D E
C C
B B
A A
Fred Bob
Exemplu
HEAD
master HEAD
F master
origin/master
D E
C C
B B
A A
Fred Bob
Exemplu
HEAD
master HEAD
F master
origin/master
D E
C C
B B
A A
Fred Bob
git fetch origin
HEAD
F master
E
D E
C C
B B
A A
Fred Bob
HEAD
F master
E
D E
C C
B B
A A
Fred Bob
git merge origin/master
HEAD
master
G origin/master HEAD
F master
E
D E
C C
B B
A A
Fred Bob
HEAD
master HEAD
F master
origin/master
D E
C C
B B
A A
Fred Bob
HEAD
master HEAD
F master
origin/master
D E
C C
B B
A A
Fred Bob
git pull origin
HEAD
master
G origin/master HEAD
F master
E
D E
C C
B B
A A
Fred Bob
HEAD
F master
E
D E
C C
B B
A A
Fred Bob
HEAD
F master
E
D E
C C
B B
A A
Fred Bob
git rebase origin/master
HEAD
master
F' HEAD
D' master
E origin/master E
C C
B B
A A
Fred Bob
HEAD
master
F' HEAD
D' master
E origin/master E
C C
B B
A A
Fred Bob
git push origin
HEAD HEAD
F' F'
HEAD
D' D'
master
E origin/master E
C C
B B
A A
Fred Bob
git push origin
Tracking bugs
! git bisect
! git bisect start
! git bisect bad
! git bisect good $COMMIT
! git visualize
! git blame
Alte utiliz"ri
! Patch-uri in e-mail-uri
! Generare: git format patch <range>
! http://www.kernel.org/pub/software/scm/git/docs/
gittutorial.html - O&cial Git tutorial