Slide 1

Slide 1 text

Let's talk about Git

Slide 2

Slide 2 text

● 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

Slide 29

Slide 29 text

[email protected] Łukasz Niemier