● What is lov... git.
● Co jest takiego
suuuuper w Gicie?
● git + hub = GitHub
● Podstawy
użytkowania Gita (z
lini poleceń)
O czym będziemy mówić?
Slide 3
Slide 3 text
Why no GUI?
Slide 4
Slide 4 text
Git? To coś z więzienia?
Tym razem nie. Jest to
rozproszony system
kontroli wersji (DVCS)
stworzony przez Linusa
Torvaldsa na potrzeby
rozwoju jajka Linuksa po
tym jak BitKeeper został
zamknięty.
Slide 5
Slide 5 text
Konkurencja
● CVS
● SVN
● Monotone
● MS Team Server
Foundation
● Mercurial (Hg)
● BitKeeper
● Bazaar
Slide 6
Slide 6 text
Co definiuje Gita jako takiego zaj...?
Jest on:
● rozproszony
● FLOSS
● szybki
● jak scyzoryk
● popularny
○ GitHub, Google Code, BitBucket, Savannah
○ Tower, Git Extensions, EGit
Slide 7
Slide 7 text
"Rozproszony"? WTF?
Slide 8
Slide 8 text
Co otrzymaliśmy?
● Łatwiejsza
współpraca
● Można pracować
offline
● Three-way merge
● Lepsze hooki
● Bezpieczniejsze
dane
● Etc.
Slide 9
Slide 9 text
A co oddaliśmy w zamian?
● Łatwe do
zapamiętania nazwy
rewizji
● Ktoś może omyłkowo
pracować na starym
kodzie
● Łopatologiczną
prostotę
Slide 10
Slide 10 text
Co wyróżnia Gita
Git w porównaniu z
innymi DVCS ma
trochę bardziej
skomplikowany
przepływ zmian.
W zamian mamy nad
nim większą kontrolę.
Slide 11
Slide 11 text
Git hooks
Hooki pozwalają nam
oskryptować:
● commity
● rebasing
● checkouty
● odbieranie danych
na serwerze
● etc.
To pozwala na
działania jak:
● CI
● hosting (Heroku)
● Code review
Slide 12
Slide 12 text
GitHub
● Jeden z
popularniejszych
hostingów kodu
● Proste forkowanie
● Darmowy dla
projektów FLOSS
● Darmowy plan
micro dla
studentów
Slide 13
Slide 13 text
git + hub = GitHub
hub jest wtyczką do
Gita, która oferuje
lepszą integrację z
GitHubem i
możliwość
zarządzania repo z
linii poleceń.
$ git clone dotfiles
# klon własnego repo
$ git clone hauleth/akai
# klonujesz repo innego
# użytkownika
$ git fork
# tworzysz nowy fork
# projektu wskazywanego
# przez origin
Slide 14
Slide 14 text
Never work in master!
Gałąź master (odpowiednik
trunk/ z SVN) powinna być
"nietykalna". Kod rozwijany
powinien być w osobnych
gałęziach, a master służyć
powinna jako źródło wersji
nad którą się pracuje.
Do tego przedstawiam...
Slide 15
Slide 15 text
Git Flow
Jest to proste rozszerzenie pozwalające na
zarządzanie zmianami bez ingerencji w master
● features
● releases
● hotfixes
W prosty sposób pozwala uruchomić i
zakończyć połączyć gałąź (usuwając ją
jednocześnie ze zdalnego serwera).
Slide 16
Slide 16 text
Let's work with
Git
Slide 17
Slide 17 text
tryGit
Slide 18
Slide 18 text
http://bit.ly/akai-repo
Slide 19
Slide 19 text
Początki
1. Sklonuj
$ git clone https://github.com/hauleth/akai
2. i sprawdź co masz
$ cd akai
$ ls -a
$ git remote -v
$ git branch
Slide 20
Slide 20 text
Nadeszła pora zmian
1. Stwórz nową gałąź
$ git checkout -b add-hello-world
2. Hakuj!!!
$ echo 'main = putStrLn "Hello World"' > hello.hs
3. Sprawdź co się zmieniło
$ git status
4. Dodaj zmiany i wyślij je
$ git add hello.hs
$ git commit -m 'My first commit'
Slide 21
Slide 21 text
Git index
Nie, to nie jest
polecenie Gita, to
jest nazwa na formę
"czyśćca" pomiędzy
utworzeniem zmian, a
dodaniem ich do repo.
$ git add new-changes
# dodaje nowy plik
# lub zmiany
$ git rm old-file
# usuwa plik z repo i
# drzewa
$ git mv old new
# zmiana nazwy
$ git reset file
# usuwa plik z indeksu
$ git checkout -- file
# cofa zmiany pliku
Slide 22
Slide 22 text
Commity i śledzenie zmian
$ git commit
Wyśle wszystkie
zmiany w indeksie do
repozytorium jako
nową zmianę
(commit).
$ git diff
Wyświetli jakie
zmiany zaszły w
plikach między
dwoma zmianami lub
miedzy aktualnym
stanem i daną zmianą.
Slide 23
Slide 23 text
Jeszcze trochę o gałęziach
$ git checkout
Prawdziwy multitool.
Tworzy nowe gałęzie,
przełącza między nimi
oraz cofa zmiany w
plikach. Prawdziwa
potęga.
$ git branch
Manager gałęzi:
● dodawanie
● usuwanie
● zmienianie nazw
● wyświetlanie
Slide 24
Slide 24 text
I jeszcze trochę
$ git merge
Łączy dwie lub więcej
gałęzi w tą, w której
się obecnie
znajdujemy.
$ git rebase
Zmienia rodzica oraz
wprowadza zmiany
tak by obecna gałąź
pasowała do nowego
rodzica.
Slide 25
Slide 25 text
Coś tu śmierdzi
Śledzenie zmian jest
przydatne, ale
przecież nie o to
nam głównie chodzi
(chyba). Istotną
sprawą jest móc
przywrócić
poprzednią zmianę.
$ git revert 60730c9
# przywróci poprzednią
# zmianę
$ git reset ef84e7d
# przywróci status zmian
# do danej zmiany
$ git reset --hard ef84e7d
# przywróci zarówno pliki
# jak i repo do zmiany
Slide 26
Slide 26 text
A do kiedy się cofnąć?
$ git blame
Wiemy gdzie jest
błąd. Fajnie, ale kiedy
powstał i przez kogo
("przecież to nie Ja").
Wyświetla zawartość
pliku z opisem kto i
kiedy co zmienił.
$ git bisect
Pozwala nam znaleźć
"zepsutą" zmianę.
Oznaczamy dobrą i złą
zmianę, a Git
szukając binarnie
pomoże nam znaleźć
"the evil one".
Slide 27
Slide 27 text
Praca z serwerem
Czym była by
współpraca jeśli nie
mogli byśmy się
dzielić naszym
kodem? Bez sensu
prawda?
$ git remote
# manager serwerów
$ git push -u origin master
# ustawienie serwera dla
# gałęzi i wysłanie zmian
$ git push
# wysłanie zmian do danego
# serwera, domyślnie origin
$ git fetch
# pobranie zmian
$ git pull
# pobranie i włączenie
# zmian do plików
Slide 28
Slide 28 text
i czyńcie sobie kod poddanym.
Idźcie więc i piszcie