Autor: Piotr Macuk
Git ma ciekawą historię i znanego autora. To projekt, który powstał w ekspresowym tempie i zdeklasował rywali. Jest to rozproszony system kontroli wersji, używany przy rozwijaniu jądra Linuksa.
4. Historia
2002-2005 – BitKeeper
6 kwietnia 2005 – zmiana licencji
Linus daje sobie 2 tygodnie
18 kwietnia 2005 – git obsługuje swój kod
16 czerwca 2005 – git obsługuje kod jądra
Opiekun projektu: Junio Hamano
14 lutego 2007 – wydano git 1.5.0
18. SHA-1
Init Doc
pesel tree 4bb2a6c 6aaa7ae
pesel/README blob e69de29 50947a5
pesel/src tree 29206d2 29206d2
pesel/src/pesel.rb blob e69de29 e69de29
19. Skierowany graf acykliczny
Init Doc
commit commit
7b355ec d3db0eb
tree tree
pesel pesel
4bb2a6c 6aaa7ae
blob tree blob
e69de29 29206d2 50947a5
README src README
src/pesel.rb
20. Typy obiektów
blob blob (size)0 tree tree (size)0
e69de29 4bb2a6c
content 100644 blob e69de29 README
040000 tree 29206d2 src
commit tag
d3db0eb e795501
Commit (size)0 tag (size)0
tree 6aaa7ae object d3db0eb
parent 7b355ec type commit
author Piotr Macuk tag v0.0.1
<piotr@macuk.pl> tagger Piotr Macuk
1271161942 +0200 <piotr@macuk.pl>
committer Piotr Macuk Tue Apr 13 17:24:40 2010
<piotr@macuk.pl>
1271161942 +0200 First tag.
Doc
21. Obiekty – założenia
Objekty są niezmienne
Obiekty są tylko dodawane
Ten sam sposób przechowywania
obj = zlib(sha1(header + content))
obj => .git/objects/
22. Gałęzie
HEAD $ git branch fix23
$ git checkout fix23
master fix23
F D
$ git checkout b fix23
E C $ git branch d fix23
B
A
23. Gałęzie
Nowy pomysł lub bug = nowa gałąź
Gałąź = wskaźnik na commit
Tworzenie gałęzi = zapis 40 bajtów do pliku
HEAD = gałąź w której jest katalog roboczy
25. Wskaźniki
$ cd .git/refs/ && find
HEAD
master fix23
tags/v0.0.1
heads/master
F D
heads/fix23
E C tag: v0.0.1
B
A
26. Merge
$ git merge fix23 HEAD
$ git branch d fix23
master
HEAD
G
master fix23
F D F D
E C E C
B B
A A
27. Rebase + merge
HEAD HEAD
$ git checkout fix23 master
fix23
$ git rebase master
D2 D2
HEAD
C2 C2
master fix23 master
F D F F
E C E $ git checkout master E
$ git merge fix23
$ git branch d fix23
B B B
A A A
35. Współpraca
Każde repozytorium jest samowystarczalne
Tworzymy sieć repozytoriów
Publiczne i prywatne
Główne repozytorium to tylko umowa
$ git clone url dir
$ git remote add janek url
$ git pull (lub git fetch)
$ git push
36. Lokalnie
private private
jan ola
jan$ git remote add ola file://home/ola/pesel
ola$ git remote add jan file://home/jan/pesel
$ git pull # bez push!
ola$ git branch a
* master
remotes/jan/master