Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Let's talk about - Git (PL)

Let's talk about - Git (PL)

Prezentacja przedstawiona na spotkaniu koła naukowego AKAI 16.03.2013

Łukasz Niemier

January 16, 2013
Tweet

More Decks by Łukasz Niemier

Other Decks in Programming

Transcript

  1. Let's talk about
    Git

    View full-size slide

  2. ● 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ć?

    View full-size slide

  3. 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.

    View full-size slide

  4. Konkurencja
    ● CVS
    ● SVN
    ● Monotone
    ● MS Team Server
    Foundation
    ● Mercurial (Hg)
    ● BitKeeper
    ● Bazaar

    View full-size slide

  5. Co definiuje Gita jako takiego zaj...?
    Jest on:
    ● rozproszony
    ● FLOSS
    ● szybki
    ● jak scyzoryk
    ● popularny
    ○ GitHub, Google Code, BitBucket, Savannah
    ○ Tower, Git Extensions, EGit

    View full-size slide

  6. "Rozproszony"? WTF?

    View full-size slide

  7. Co otrzymaliśmy?
    ● Łatwiejsza
    współpraca
    ● Można pracować
    offline
    ● Three-way merge
    ● Lepsze hooki
    ● Bezpieczniejsze
    dane
    ● Etc.

    View full-size slide

  8. A co oddaliśmy w zamian?
    ● Łatwe do
    zapamiętania nazwy
    rewizji
    ● Ktoś może omyłkowo
    pracować na starym
    kodzie
    ● Łopatologiczną
    prostotę

    View full-size slide

  9. 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ę.

    View full-size slide

  10. 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

    View full-size slide

  11. GitHub
    ● Jeden z
    popularniejszych
    hostingów kodu
    ● Proste forkowanie
    ● Darmowy dla
    projektów FLOSS
    ● Darmowy plan
    micro dla
    studentów

    View full-size slide

  12. 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

    View full-size slide

  13. 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...

    View full-size slide

  14. 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).

    View full-size slide

  15. Let's work with
    Git

    View full-size slide

  16. http://bit.ly/akai-repo

    View full-size slide

  17. 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

    View full-size slide

  18. 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'

    View full-size slide

  19. 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

    View full-size slide

  20. 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ą.

    View full-size slide

  21. 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

    View full-size slide

  22. 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.

    View full-size slide

  23. 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

    View full-size slide

  24. 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".

    View full-size slide

  25. 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

    View full-size slide

  26. i czyńcie sobie kod poddanym.
    Idźcie więc i piszcie

    View full-size slide