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. • 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ć?
  2. 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.
  3. Konkurencja • CVS • SVN • Monotone • MS Team

    Server Foundation • Mercurial (Hg) • BitKeeper • Bazaar
  4. Co definiuje Gita jako takiego zaj...? Jest on: • rozproszony

    • FLOSS • szybki • jak scyzoryk • popularny ◦ GitHub, Google Code, BitBucket, Savannah ◦ Tower, Git Extensions, EGit
  5. Co otrzymaliśmy? • Łatwiejsza współpraca • Można pracować offline •

    Three-way merge • Lepsze hooki • Bezpieczniejsze dane • Etc.
  6. A co oddaliśmy w zamian? • Łatwe do zapamiętania nazwy

    rewizji • Ktoś może omyłkowo pracować na starym kodzie • Łopatologiczną prostotę
  7. 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ę.
  8. 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
  9. GitHub • Jeden z popularniejszych hostingów kodu • Proste forkowanie

    • Darmowy dla projektów FLOSS • Darmowy plan micro dla studentów
  10. 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
  11. 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...
  12. 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).
  13. 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
  14. 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'
  15. 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
  16. 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ą.
  17. 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
  18. 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.
  19. 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
  20. 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".
  21. 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