Академический Документы
Профессиональный Документы
Культура Документы
Jacek Bzdak
1
Spis treści
Spis treści 2
1 Instalacja gita 4
1.1 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Instalacja dla Cygwina . . . . . . . . . . . . . . . . 4
2 Praca z GITem 5
2.1 Słownik gita . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Proste zastosowania gita . . . . . . . . . . . . . . . . . . . 6
Komitowanie . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Branche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Checkoutowanie . . . . . . . . . . . . . . . . . . . . . . . . 7
Merge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Scenariusz: praca z branchachami . . . . . . . . . . . . . 8
Wycofywanie zmian . . . . . . . . . . . . . . . . . . . . . . 8
Scenariusz: Wycofanie nieskomitowanych zmian . 9
Scenariusz: Wycofanie skomitowanych zmian 1 . . 9
Scenariusz: Wycofanie skomitowanych zmian 2 . . 9
O gorliwości gita i git-stash . . . . . . . . . . . . . . . . 9
2.3 Praca z wieloma repozytoriami . . . . . . . . . . . . . . . . 11
Repozytoria nazwane . . . . . . . . . . . . . . . . . . . . . 11
Kopiowanie repozytoriów . . . . . . . . . . . . . . . . . . . 11
Nagie repozytoria . . . . . . . . . . . . . . . . . . . . . . . 12
Pobieranie danych z repozytorium . . . . . . . . . . . . . . 12
Wysyłanie danych do repozytoriów . . . . . . . . . . . . . 12
Scenariusz: praca ze zdalnym repozyrorium . . . . . . . . 12
Scenariusz: upublicznienie repozytorium po ssh . . . . . 13
Scenariusz: pobranie zawartości repozytorium . . . . . . 13
2.4 Zaawansowana praca z branchami . . . . . . . . . . . . . 13
Rodzaje mergeów . . . . . . . . . . . . . . . . . . . . . . . . 13
Metody mergeowania . . . . . . . . . . . . . . . . . . . . . 14
O nieumieszczanu plików IDE w repozytorium . . . . . . 15
Kasowanie branchy . . . . . . . . . . . . . . . . . . . . . . 15
2.5 Zaawansowane użycia gita . . . . . . . . . . . . . . . . . . 15
Gitignore . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Znaki końca linii . . . . . . . . . . . . . . . . . . . . . . . 16
git-config . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2
Spis treści 3
Punkt w historii . . . . . . . . . . . . . . . . . . . . . . . . 17
Urle które obsługuje git . . . . . . . . . . . . . . . . . . . . 17
Stashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Hardlinki a git-clone . . . . . . . . . . . . . . . . . . . . 18
Czytanie historii . . . . . . . . . . . . . . . . . . . . . . . . 18
Przepisywanie historii . . . . . . . . . . . . . . . . . . . . . 18
git-rebase . . . . . . . . . . . . . . . . . . . . . . . . 18
Scenariusz: Wyciagni˛ ece
˛ podmodułu z kodu. . . . 18
Rozdział 1
Instalacja gita
1.1 Linux
Prosta piłka — należy użyć swojego managera pakietów.
Dla ubuntu/debiana należy wpisać:
sudo apt-get install git-core
Dodatkowo można zainstalować przydatne narzedzia
˛
1.2 Windows
Tu już trzeba cudować. Oficjalny port gita dla windows jest w cygwinie.
. . A jaki cygwin jest wiadomo ;)
Tak czy inaczej mamy takie opcje:
Cygwin
MSGit Natywna implementacja. Ponoć szybsza niź cygwinowa. Nie wiem,
nie bawiłem sie.
˛ Można ja˛ porać ze strony http://code.google.com/p/msysgit/.
Nie wiem nie bawiłem sie.
˛
4
Rozdział 2
Praca z GITem
Nizeznany
5
ROZDZIAŁ 2. PRACA Z GITEM 6
blob Reprezentuje plik. Najgłupszy obieky gita. Jego nazwa jest cał-
kowicie determiniowana przez jego zawartość, czyli dwa pliki o
różnych nazwach i położeniach maja˛ jedna˛ i dziela˛ tego samego
bloba.
drzewo Reprezentuje katalog. Zawiera odniesienia do innych drzew i
do blobów. Bloby reprezentuja˛ pliki w danym katalogu, drzewa
— podkatalogi. Drzewo przechowuje też nazwy (nie chodzi mi tu
o nazwy gita, ale o filenames) plików i katalogów które zawiera.
Nazwa drzewa zależy tylko od jego zawartości.
commit Czyli stan projektu w danej chwili czasu. Zawiera odniesienie
do drzewa które reprezentuje główny katalog projektu w chwili
komitowania i komitu rodzica. Zawiera też komentarz, osobe˛ kom-
tujac˛ a˛ i autora zmian5 . Komit nie posiadajacy
˛ rodzica, to tak
zwany root commit który reprezentuje inicjalna˛ wersje˛ projektu.
Commit, który reprezentuje łaczenie
˛ branchy, może mieć wiecej
˛
niż jednego rodzica.
tag Czyli zrozumiała dla człowieka nazwa jakiegoś obiektu. Zawiera
informacje o osobie które ów obiekt otagowała i komentarz. Może
zawierać cyfrowy podpis danego tagu.
index Plik bed
˛ acy
˛ pośrednikiem miedzy˛ kopia˛ robocza˛ a repozytorium.
Podczas komitowania skomitowana nie bedzie ˛ cała zawartość ko-
pii roboczej, a tylko zawartość indexu.
HEAD wskaźnik na bierzacego
˛ brancha
Tworzenie repozytorium
By utworzyć repozytorium w bierzacym
˛ katalogu należy wykonać po-
lecenie:
git-init
Komitowanie
By skomitować dodane pliki należy wykonać nastepuj
˛ ace
˛ polecenie:
git-commit [-a] [-m treść wiadomości]
Wyjaśnienie parametrów:
-a Bez tego parametru git skomituje tylko pliki które sa˛ w indeksie –
czyli te o zmianach w których został poinformowany poleceniem
git-add. Z tym parametrem git automatycznie doda wszystkie
zmodyfikowane lub usuniete pliki o które już sa˛ w indeksie, lecz
zignoruje wszystkie nowe pliki.
-m Komentarz komitu. Jest obowiazkowy,
˛ jeśli nie jest on podany git
otworzy w konsoli okno edytora w którym można go napisać. O
tym jak wybrać odpalany przez gita edytor w 2.5 na stronie 16.
Branche
By stworzyć brancha należy wkonać polecenie:
git-branch nazwa_brancha punkt_w_historii
Checkoutowanie
Polecenie git-checkout przenosi do kopii roboczej jakiś punkt w hi-
storii.
git-checkout punkt_w_historii
Merge
Czyli łaczenie
˛ branchy. Do łaczenia
˛ branchy służy polecenie:
git-merge nazwa_brancha
Polecenie to przenosi zmiany z brancha nazwa_brancha do bierza-
˛
cego brancha.
ROZDZIAŁ 2. PRACA Z GITEM 8
Wycofywanie zmian
Do usuniecia
˛ nieskomitowanych zmian służy polecenie:
git-reset --tryb commit
Tryby sa˛ trzy:
soft Nie resetuje indexu, ani kopii roboczej. Zmienia tylko wskaźnik
heada.
mixed Resetuje indeks, nie dotyka kopii roboczej. Po wywołaniu tego
polecenia żaden z plików nie bedzie
˛ oznaczony jako gotowy do
skomitowania.
ROZDZIAŁ 2. PRACA Z GITEM 9
Kopiowanie repozytoriów
Sa˛ dwie metody na kopiowanie repozytoriów.
Pierwsza˛ jest Pierwsza˛ jest polecenie git-clone. Pozwala ono sko-
piować zawartość całego repozytorium.
git-clone url
Po wykonaniu tego polecenia z podanym urlem git zrobi nastepu-
˛
jace
˛ rzeczy:
1. utworzy w bierzacym
˛ katalogu katalog diesIrae
2. zainicjalizuje w nim repozytorium
6 Skimbleshanks is a cat character in T. S. Eliot’s book of poetry Old Possum’s Book
3. ściagnie
˛ zawartość z zadanego repozytorium
4. W repozytorium na tym komputerze utworzy odniesienie o nazwie
origin wskazujace
˛ na danego urla.
Nagie repozytoria
Sa˛ to repozytoria nie majace
˛ kopii roboczej. Maja˛ bardzo ograniczona˛
funkcjonalność — nie można na nich wykonywać wielu operacji (w
zasadzie wszystkich poza komitowaniem kodu i pobieraniem zmian).
Nadaja˛ sie˛ natomiast całkiem nieźle rpeopzytoria w serwerze. Twozy
sie˛ je poleceniem:
git-init --bare
Metody mergeowania
Jeśli w merdżu bed˛ a˛ konflikty (ten sam plik wyedytowany w obu gałe-
˛
ziach) to stana˛ sie˛ nastepuj
˛ ace
˛ rzeczy:
<<<<<<< HEAD:file.txt
Hello world
=======
Goodbye
>>>>>>>
77976da35a11db4580b80ae27e8d65caf5208086:file.txt
Teraz pora na git-mergetool jest to narzedzie
˛ pozwalajace
˛ na roz-
sadzenie
˛ konfliktów.
Kasowanie branchy
Branche można też kasować.
git-brach -d nazwa_brancha
Polecenie to ze switchem -d ma wbudowane zabezpieczenie — wy-
kona sie˛ tylko jeśli ten branch nazwa_brancha jest już wmergeowany
w HEADa.
Jeśli chcemy skasować bracha bez tego sprawdzenia, bo na przy-
kład zawiera on kod którego nie chcemy mergeować należy użyć para-
metru -D:
git-brach -D nazwa_brancha
git-config
Narzedzie
˛ pozwalajace
˛ konfigurować gita.
Punkt w historii
Historia gita sklada sie˛ z grafu komitów, historia brancha to linia co-
mitów. Każdy punkt historii jest dostepny
˛ po nazwie komitu. Nazwy
gita sa˛ raczej nieporeczne
˛ — wszak to 20 cyfrowe hasze SHA-1. Za-
miast całeho SHA-1 można podać jego poczatek˛ — o ile poczatek
˛ jest
unikalny w repozytorium. Tak wiec ˛ zamigit-resetast
git-checkout 980e3ccdaac54a0d4de358f3fe5d718027d96aae
Można napisać:
git-checkout 980e3cc
Jest też kilka innych możliwości:
Stashing
Hardlinki a git-clone
Czytanie historii
Przepisywanie historii
git-rebase
Scenariusz: Wyciagni
˛ ece
˛ podmodułu z kodu.
Mam projekt który stanowi gui dla takiego sprzetu ˛ spektrometrycz-
nego. Kawałkiem projektu jest biblioteka, i teraz owa˛ biblioteke˛ chce˛
z projektu wyciać˛ i przenieść do własnego repozytorium, tak by za-
chwoać cała˛ historie˛ owej biblioteki.
W zasadzie git ma standardowe narzedzia ˛ do zarzadzanai
˛ podmo-
dułami, ale ja jestem na to troszke˛ za głupi.
Znalazłem wiec ˛ projekt git-subtree, który robi dokładnie to, nie jest
to cześć
˛ standardowego gita, ale działa.
Najpierw trzeba to sobie ściagn˛ ać
˛ i umieścić gdzieś w pathu. Ścia-
gamy z http://github.com/apenwarr/git-subtree. Interesuje nas plik
git-subtree.sh.
Zakładamy że biblioteka jest w podkatalogu o nazwie libdir.
git-subtree --prefix libdir -b lib-export
Utworzy to nam brancha o nazwie lib-export zawierajacego
˛ wszyst-
kie commity dotykajace
˛ katalogu libdir.
Teraz tworzymy repozytroium i wykonujemy:
git-push url_repozytorium lib-export