Cze 20 2009
git tutorial - część 1 - wstęp
W ramach odstresowania się od sesji, krótki tutorial używania gita. :) Czym jest git można sprawdzić tutaj, dlaczego warto go używać, można poczytać tutaj lub posłuchać tutaj (tak, przesłuchałem to X razy i jakoś wyszło podobnie, sio marudy :P). A dzisiaj kilka podstawowych poleceń jak używać gita (jeżeli następnym razem napiszę o gitcie będzie to porównanie szybkości między gitem, hg, bazarem i svnem, z kolorowymi wykresami! Można obstawiać wyniki, a zwycięzca dostanie nagrodę niespodziankę).
Pierwsze co musimy wiedzieć to format poleceń gita:
git add plik
Czyli czym (gitem), co i na końcu komu. Była jeszcze wersja z łączeniem poleceń myślnikiem:
git-add plik
Ale (przynajmniej u mnie) już ona nie występuje. Druga ważna rzecz, to konfiguracja gita. Git do każdego commita dodaje dane osoby, która go zrobiła, więc należy mu je najpierw podać zanim cokolwiek zaczniemy robić:
git config --global user.name "Mateusz Marek" git config --global user.email matthew@matthew.org.pl
Myślę, że to nie wymaga tłumaczenia, więc teraz przejdziemy do zabawy. Wchodzi do katalogu, który chcemy objąć kontrolą wersji i wydajemy takie oto polecenia:
git init git add . git commit -m "komentarz"
Pierwsze polecenie zakłada nam lokalne repozytorium w naszym katalogu. Drugie dodaje wszystkie pliki z bieżącego katalogu do indeksu, natomiast ostanie bierze nasze pliki z indeksu i włącza je do repozytorium (parametr "m" odpowiada za dodanie komentarza do commitu). Teraz możemy sobie napchać do katalogu kolejne pliki, edytować istniejące i lecimy z gitem:
git add plik.c git commit -a -m "komentarz"
Dodajemy plik.c oraz commitujemy całość do repozytorium. Brak parametru "a" spowodowałby dodanie do repo tylko pliku plik.c. "a" mówi gitowi o automatycznym dodaniu wszystkich plików które zostały zmodyfikowane lub usunięte (dzięki temu nie musimy ponownie wydawać polecenia add dla każdego z nich). Jeżeli teraz byśmy chcieli umieścić nasz kod gdzieś na zewnątrz wydajemy polecenie (tak będzie wyglądało w przypadku GitHuba):
git push git@github.com:login/projekt.git master
Oczywiście adres nie jest najprzyjemniejszy do zapamiętania, więc możemy go sobie skrócić w ten sposób:
git remote add origin git@github.com:login/projekt.git
Origin jest ogólnie przyjętą nazwą dla głównego zdalnego repozytorium. Tak samo jak master jest ogólnie przyjętą nazwą dla głównej gałęzi w dowolnym repo. Jednak co nam po repozytorium które umieściliśmy na serwerze? Trzeba je jeszcze pobrać, a robi się to tak:
git clone git://github.com/login/projekt.git
I dostajemy katalog z naszą lokalna kopią repozytorium. Warto jednak by go od czasu do czasu aktualizować. Robimy to poprzez polecenie pull:
git pull git://github.com/login/projekt.git
Jednak ono ściąga i łączy repozytorium zdalne z naszą lokalną gałęzią bez pytania. Rozwiązaniem tego problemu jest używanie kombinacji fetch + merge:
git fetch origin/master git merge origin/master
Pierwszym poleceniem pobieramy główną gałąź zdalnego repozytorium do "zdalnej", głównej gałęzi, a drugim łączymy je z gałęzią w której aktualnie się znajdujemy (czyli w master). Po drodze możemy również sprawdzić różnice między obiema gałęziami:
git diff master origin/master
Na razie to tyle, jeżeli będzie zainteresowanie tym tutorialem to następnym razem opowiem o gałęziach w gitcie. Do zobaczenia, wracam do nauki. :)



20 Cze 2009, 22:24:12
Czekam na "git advanced tutorial" ;]
20 Cze 2009, 23:19:15
Popraw orta: s/bierzącego/bieżącego/
(sorry że nie prywatnie, skasuj komentarz jak poprawisz :))
21 Cze 2009, 00:21:45
@darkjames: dzięki, już poprawione.
I nie widzę powodu do kasowania. Zdarzają mi się orty i nie ukrywam tego, gorzej jak ktoś chce na siłę być niemiły. :)
21 Cze 2009, 00:48:08
czuje silną potrzebę przeczytania tego raz jeszcze gdy wytrzeźwieję...
P.S.
Już druga seria u Ciebie na którą czekam :)
21 Cze 2009, 02:42:17
Matthew: warto wspomnieć o różnicy pomiędzy "pull", a "fetch". AFAIR to jest całkiem spora różnica, bo jak w tym pierwszym się pomyli to można zrobić merge całego brancha :)
21 Cze 2009, 02:44:32
@radmen: masz rację, zaraz o tym napiszę. Jak udało mi sie to pominąć ze względu, że origin tak w zasadzie nie jest gałęzią, więc nie da się jej zmergeować.
21 Cze 2009, 04:06:53
Heh... ale gafę walnąłem. Pominąłem tego fetcha bo mi za pierwszym razem z jakiegoś powodu nie zaskoczył (niby repo ściągał, ale merge twierdził że wszystko jest aktualne i nic nie chciał łączyć)... Oby ta sesja się szybko skończyła, bo już zaczynam pisać takie głupoty że wstyd po prostu. ;)
Jeżeli ktoś może, to niech przejrzy, czy gdzieś nie walnąłem jakiegoś błędu. Szkoda żeby ludzie to czytający później ten błąd powtarzali.
21 Cze 2009, 06:34:09
werjsa, repoztorium, każego - literówki (co zabawne, tylko jedna wypatrzona, pozostałe dwie znalezione przez wklejenie tekstu arta w pole komentarza i sprawdzenie, co Firefox podkreśli na czerwono - polecam skorzystać ;) )
a poradnik przydatny, będę czekał na następne części.
21 Cze 2009, 15:20:26
@nital: dzięki, poprawione. Przeważnie wrzucam to do OO.org (bo mi się w Operze nie chce zrobić sprawdzania pisowni), ale jak mówię, ostatnio takie kwiatki robię... Ehh... szkoda że tylko tydzień wakacji będę miał i już do pracy. ;/
21 Cze 2009, 20:23:08
Nie powinno się pisać 'giTcie', bo prawidłowo w odmianie nie masz nigdzie 'T' :P
21 Cze 2009, 20:26:06
Z tą odmianą tyle różnych wersji słyszałem, że sam nie wiem jak jest poprawnie. Jest to może w jakimś słowniku spisane? Poprawiłbym to wreszcie, tylko nie wiem na co...
22 Cze 2009, 09:45:26
Przydał by się opis Git - konfiguracja serwera ;)
22 Cze 2009, 15:02:17
Ja bym przyczepił się do używania "origin" (które osobiście używam tylko do określenia zdalnego repo) w git diff i git merge.
Zamiast:
git merge origin
Lepiej:
git merge origin/master
Bo co "origin" oznacza w tym pierwszym przypadku? A jeśli będę na gałęzi "foo" (która jest gałęzią publiczną i w repo występuje pod referencją origin/foo) to jak zmerguje zmiany z nią? Ano: git merge origin/foo (git merge origin złączyłoby nam z origin/master).
22 Cze 2009, 16:41:56
@Radarek: dzięki, poprawiłem. :)
23 Cze 2009, 21:02:32
Wyrażam swe zainteresowanie następną częścią ;)