Git - rozproszony system kontroli wersji
-
Upload
phpcon-poland -
Category
Technology
-
view
3.325 -
download
1
description
Transcript of Git - rozproszony system kontroli wersji
![Page 2: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/2.jpg)
O mnie
Programowanie 19 lat
Linux + vim 12 lat
Kontrola wersji 9 lat
Ruby (on Rails) 5 lat
Git 2 lata
![Page 3: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/3.jpg)
Agenda
Czym jest git
Instalacja i konfiguracja
Budowa
Narzędzia
Współpraca
Pytania
![Page 4: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/4.jpg)
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
![Page 5: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/5.jpg)
Założenia
Nieliniowy rozwój kodu
Rozproszenie pracy
Szybkość i stabilność działania
Integralność repozytorium
Obsługa bardzo dużej ilości plików
![Page 6: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/6.jpg)
Czym jest git?
Stupid content tracker
Ciekawy system plików
Filozofia UNIX-a – wiele prostych narzędzi
Git != svn++
![Page 7: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/7.jpg)
Instalacja i konfiguracja
$ sudo aptget install gitcore
$ git config global user.name \ "Piotr Macuk"$ git config global user.email \ [email protected]
/etc/gitconfig~/.gitconfig.git/configgit help config
![Page 8: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/8.jpg)
$ mkdir p pesel/src$ touch pesel/README$ touch pesel/src/pesel.rb
peselpesel/READMEpesel/srcpesel/src/pesel.rb
Nowy projekt
![Page 9: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/9.jpg)
Utworzenie repozytorium
$ git init
peselpesel/READMEpesel/srcpesel/src/pesel.rbpesel/.git
![Page 10: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/10.jpg)
Ignore
$ cat .gitignore
*.log*.pid[09].txt
# production.log jest ok!production.log
![Page 11: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/11.jpg)
Status
$ git status
# On branch master# Untracked files:# README# src/nothing added to commit but untracked files present (use "git add" to track)
![Page 12: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/12.jpg)
Nowe pliki
$ git add .$ git status
# On branch master# Changes to be committed:# new file: README# new file: src/pesel.rb
![Page 13: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/13.jpg)
Commit
$ git commit m 'Init'
[master (rootcommit) 7b355ec] Init0 files changed, 0 insertions(+), 0 deletions()create mode 100644 READMEcreate mode 100644 src/pesel.rb
$ git status
# On branch masternothing to commit (working directory clean)
![Page 14: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/14.jpg)
Perspektywa
Katalog roboczy Indeks Repozytorium
Checkout
Add
Commit
pesel pesel/.git/index pesel/.git
Commit -a
![Page 15: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/15.jpg)
Baza obiektów
$ cd .git/objects && find
e6/9de29bb2d1d6434b8b29ae775ad8c2e48c539129/206d2658aaf11920998fac41a9f5f7047418fb4b/b2a6cec1e0c51741998cd243367706bbfb3b837b/355ecc8206060071ff60038fa034aab580dd59
![Page 16: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/16.jpg)
Zmiana pliku
$ echo 'Pesel library.' > README$ git add README$ git commit m 'Doc'
![Page 17: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/17.jpg)
Baza obiektów
$ cd .git/objects && find
e6/9de29bb2d1d6434b8b29ae775ad8c2e48c539129/206d2658aaf11920998fac41a9f5f7047418fb4b/b2a6cec1e0c51741998cd243367706bbfb3b837b/355ecc8206060071ff60038fa034aab580dd59d3/db0ebf6844ddc3ef19920e753bdf66f332a56550/947a5824bab56cf14775c6594745f5b4409f2f6a/aa7ae7ded1c036bc433a49906733a81da6fc9e
![Page 18: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/18.jpg)
Init Doc
pesel tree 4bb2a6c 6aaa7aepesel/README blob e69de29 50947a5pesel/src tree 29206d2 29206d2pesel/src/pesel.rb blob e69de29 e69de29
SHA-1
![Page 19: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/19.jpg)
Skierowany graf acykliczny
blobe69de29
tree4bb2a6c
commit7b355ec
tree29206d2
pesel
srcsrc/pesel.rb
README
commitd3db0eb
tree6aaa7ae
blob50947a5
pesel
README
Init Doc
![Page 20: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/20.jpg)
Typy obiektów
commitd3db0eb
blobe69de29
tree4bb2a6c
tage795501
blob (size)\0
content
tree (size)\0
100644 blob e69de29 README040000 tree 29206d2 src
Commit (size)\0
tree 6aaa7aeparent 7b355ecauthor Piotr Macuk
<[email protected]> 1271161942 +0200
committer Piotr Macuk <[email protected]> 1271161942 +0200
Doc
tag (size)\0
object d3db0ebtype committag v0.0.1tagger Piotr Macuk
<[email protected]> Tue Apr 13 17:24:40 2010
First tag.
![Page 21: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/21.jpg)
Obiekty – założenia
Objekty są niezmienne
Obiekty są tylko dodawane
Ten sam sposób przechowywania
obj = zlib(sha1(header + content))obj => .git/objects/
![Page 22: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/22.jpg)
Gałęzie
A
B
E
F
master
HEAD
C
D
fix23
$ git branch fix23$ git checkout fix23
$ git checkout b fix23
$ git branch d fix23
![Page 23: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/23.jpg)
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
![Page 24: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/24.jpg)
Tagi
$ git tag v0.0.1
$ git tag a v1.0
$ git tag s v1.0signed
$ git tag l
![Page 25: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/25.jpg)
Wskaźniki
A
B
E
F
master
HEAD
C
D
fix23
tag: v0.0.1
$ cd .git/refs/ && find
tags/v0.0.1heads/masterheads/fix23
![Page 26: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/26.jpg)
Merge
A
B
E
F
master
HEAD
C
D
fix23
A
B
E
F
master
HEAD
C
D
$ git merge fix23$ git branch d fix23
G
![Page 27: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/27.jpg)
A
B
E
F
master
HEAD
C
D
fix23
A
B
E
F
master C2
D2
$ git checkout fix23$ git rebase master
fix23
HEAD
HEAD
A
B
E
F
master
C2
D2
$ git checkout master$ git merge fix23$ git branch d fix23
Rebase + merge
![Page 28: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/28.jpg)
Historia – log
$ git log
commit d3db0ebf6844ddc3ef19920e753bdf66f332a565Author: Piotr Macuk <[email protected]>Date: Tue Apr 13 14:43:39 2010 +0200
Doc
commit 7b355ecc8206060071ff60038fa034aab580dd59Author: Piotr Macuk <[email protected]>Date: Tue Apr 13 14:32:22 2010 +0200
Init
![Page 29: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/29.jpg)
Historia – log$ git log
$ git log p
$ git log file1 file2 dir3
$ git log tag..branch
$ git log HEAD~10..
$ git log 10
$ git log author=fred
$ git log grep="some text"
$ git log S"some code"
![Page 30: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/30.jpg)
Historia – show$ git show
commit d3db0ebf6844ddc3ef19920e753bdf66f332a565Author: Piotr Macuk <[email protected]>Date: Tue Apr 13 14:43:39 2010 +0200
Dokumentacja
diff git a/README b/READMEindex e69de29..50947a5 100644 a/README+++ b/README@@ 0,0 +1 @@+Pesel library.
![Page 31: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/31.jpg)
Różnice
Katalog roboczy Indeks Repozytorium
pesel pesel/.git/index pesel/.git
git diff
git diff HEAD
git diff cached
![Page 32: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/32.jpg)
Undo
$ git commit amend
$ git reset soft
$ git reset hard # UWAGA
![Page 33: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/33.jpg)
Adresowanie
d3db0ebf6844ddc3ef19920e753bdf66f332a565
d3db0eb
HEAD, master, fix23, v0.0.1
master@{1 week ago}, fix23@{yesterday}
master~5, fix23^2, d3db0eb~2
'':/opis''
d3db0eb..7b355ec
![Page 34: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/34.jpg)
Protokoły
git
ssh (+ gitshell)
http/https
File
rsync
http://github.com
![Page 35: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/35.jpg)
WspółpracaKaż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
![Page 36: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/36.jpg)
Lokalnie
privateprivate
jan$ git remote add ola file://home/ola/peselola$ git remote add jan file://home/jan/pesel
$ git pull # bez push!
ola$ git branch a* master remotes/jan/master
jan ola
![Page 37: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/37.jpg)
Współdzielenie
shared
private private privateprivate
$ git clone bare pesel pesel.git$ scp r pesel.git server:~/$ git remote add shared server:~/pesel.git
![Page 38: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/38.jpg)
Open source
private privateprivate
public
Opiekun Developer Developer
publicmain
publicpublic
![Page 39: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/39.jpg)
Łaty
Współpraca na zasadzie wysyłania łat
$ git formatpatch master~3
$ git apply *.patch
$ git add …
$ git commit
![Page 40: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/40.jpg)
Wiele narzędzi
git grep
git cherry-pick
git revert
git archive
git stash
git blame
git bisect
git fsck
git gc
git prune
![Page 41: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/41.jpg)
Narzędzia zewnętrzne
gitk (tcl/tk)
tig (console)
qgit (Qt)
TortoiseGit (Windows)
GitX (Mac OS X)
git svn (import, proxy)
![Page 42: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/42.jpg)
Linki
http://git-scm.com
http://whygitisbetterthanx.com
![Page 43: Git - rozproszony system kontroli wersji](https://reader034.fdocument.pub/reader034/viewer/2022042613/54bd89734a7959d4438b462f/html5/thumbnails/43.jpg)
Pytania?