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

Avatar for Łukasz Niemier

Ł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