Share
Embed
Let's talk about - Git (PL)
Prezentacja przedstawiona na spotkaniu koła naukowego AKAI 16.03.2013
Łukasz Niemier
January 16, 2013
Transcript
29 slides
-
• 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ć? -
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. -
Konkurencja • CVS • SVN • Monotone • MS Team
Server Foundation • Mercurial (Hg) • BitKeeper • Bazaar -
Co definiuje Gita jako takiego zaj...? Jest on: • rozproszony
• FLOSS • szybki • jak scyzoryk • popularny ◦ GitHub, Google Code, BitBucket, Savannah ◦ Tower, Git Extensions, EGit -
Co otrzymaliśmy? • Łatwiejsza współpraca • Można pracować offline •
Three-way merge • Lepsze hooki • Bezpieczniejsze dane • Etc. -
A co oddaliśmy w zamian? • Łatwe do zapamiętania nazwy
rewizji • Ktoś może omyłkowo pracować na starym kodzie • Łopatologiczną prostotę -
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ę. -
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 -
GitHub • Jeden z popularniejszych hostingów kodu • Proste forkowanie
• Darmowy dla projektów FLOSS • Darmowy plan micro dla studentów -
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 -
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... -
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). -
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 -
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' -
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 -
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ą. -
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 -
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. -
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 -
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". -
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