1 System Kontroli wersji GITRafał Kalinowski
2 Agenda Czym jest GIT? Modele pracy Możliwości GIT’aKilka słów o terminologii Obiekty w GIT’ie? Struktura zmian Operacje zdalne i lokalne Podstawowe operacje Przykładowe wykorzystanie Kilka narzędzi dla GIT’a
3 Czym jest GIT System Kontroli WersjiStworzony jako zastępstwo BitKeepera Linus Torvalds nazwał jego kolejny projekt właśnie jako GIT. ("I'm an egotistical bastard, and I name all my projects after myself. First 'Linux', now 'git'.„) Projekt miał opierać się na Szybkości Prostocie Wsparcie dla nieliniowego wytwarzania oprogramowania Całkowite rozproszenie Efektywnym przechowywaniu dużych projektów (np. kernel Linuksa) Open source (GNU General Public License, v2). Zbiór narzędzi
4 Modele pracy Model Scentralizowany Serwer Komputer Repozytorium PlikSVN CVS Perforce Używana jako miejsce przechowywania kopii zapasowej (Backupu) Brak prywatnych branch’y Do wykonania większości standardowych operacji wymaga połączenia do serwera. Serwer Komputer Plik Repozytorium Wersja 1 Wersja 2 Jeżeli padnie główny serwer?
5 Modele pracy c.d. Serwer Komputer Model Rozproszony Plik Wersja 1Repozytorium Wersja 1 Wersja 2 Model Rozproszony GIT Mercurial Bazaar Możliwość pracy na wielu zdalnych repozytoriach. Wsparcie dla lokalnych/prywatnych branch’y. Nie potrzebuje dostępu do serwera dla większości operacji Pełna historia zmian dostępna lokalnie. Pierwsze pobranie repozytorium wymaga pobrania całej jego zawartości. Całe repozytorium musi być trzymane na dysku lokalnym.
6 Rozproszony model pracy Możliwości GIT’a Rozproszony model pracy Wsparcie dla nieliniowego programowania (branche) Wydajny w przypadku dużych projektów Publikacja repozytorium (git://, http(s)://, ssh://) Adresowanie przez zawartość (SHA-1) #24b9da (24b9da aa493b52f8696cd6d3b00373) Praca lokalna bez połączenia z repozytorium Większość operacji nie wymaga połączenia z serwerem.
7 Kilka słów o terminologiiBranch - równoległa gałąź projektu rozwijana oddzielnie od głównej. Tag – marker konkretnej wersji (rewizja w SVN’ie) projektu. Working Dir – katalog roboczy na którym pracujemy Index – rodzaj „cache”, czyli miejsca gdzie trzymane są zmiany do commita Master Branch – główny branch z którym łączymy (merge) nasze zmiany przed wysłaniem do zdalnego repozytorium.
8 Obiekty GIT’a Commit – wskazuje na tree oraz ojca, zawiera przykładowo takie informacje jak autor, data i treść wiadomości. Tree – reprezentuje stan pojedynczego katalogu (lista obiektów blob oraz zagnieżdżonych obiektów tree) Blob – zawiera zawartość pliku bez żadnej dodatkowej struktury Tag – wskazuje na konkretny commit oraz zawiera opis taga.
9 Obiekty GIT’a cd. Komenda w gicie „> git gc” służy do czyszczenia i optymalizacji repozytorium. Jednym z jej zadań jest usunięcie nieosiągalnych obiektów oraz kompresja wersji obiektów.
10 Struktura zmian w GIT’iePrzechowywanie zawartości projektu jako „snapshot’ów”. Kompresowanie zawartości projektu. Zmiany w czasie Wersja 1 Wersja 2 Wersja 3 Wersja 4 Plik A A A1 Plik B B B1 Plik C C1 C2
11 Przykładowymi operacjami zdalnymi są: Operacje zdalne Przykładowymi operacjami zdalnymi są: git clone – pobiera zdalne repozytorium do podanego folderu git fetch – pobiera obiekty i wskaźniki z innego repozytorium git pull – pobiera i integruje obiekty i wskaźniki z innego repozytorium git push – aktualizuje zdalne repozytorium o wskaźniki i powiązane obiekty.
12 Katalog gita (folder .git)Operacje lokalne Większość operacji wykonywanych jest na lokalnym repozytorium. Katalog gita (folder .git) Index Working Directory checkout add commit
13 git init – stworzenie nowego repozytorium Podstawowe operacje git init – stworzenie nowego repozytorium git add – dodanie zawartości pliku do Index’u git rm – usuwa plik z indexu (plik zniknie z working directory po commit’ie) git mv – przenosi plik git status – pokazuje status katalogu roboczego i poczekalni git config – pobiera i ustawia opcje globalne GIT’a lub tylko repozytorium git config --global merge.tool
14 Podstawowe operacje cd.git commit – zapisuje zmiany do repozytorium lokalnego git log – wyświetla logi z commit’ów git show – wyświetla obiekt git fetch – pobiera zmiany z repozytorium zdalnego git pull – wywołuje polecenia fetch i merge git push – wysyła zmiany do zdalnego repozytorium
15 Podstawowe operacje cd.git branch – do zarządzania branch’ami git checkout – przełączanie się między branch’ami git merge – łączy podane branch’e git rebase – zmienia punkt startu dla branch’a git reset – przywraca stan katalogu roboczego git stash – zapisuje/odczytuje zmiany z przestrzeni tymczasowej (rodzaj schowka) git gc – porządkowanie i optymalizacja repozytorium
16 Prezentacja wykorzystaniaStworzenie zdalnego repozytorium : > git init Dodanie nowych plików: > git add . > git add readme.txt Struktura projektu. (Plik .git/config) > git config
17 Prezentacja wykorzystania cd.Pierwszy commit: > git commit -m „Treść wiadomości” Historia : > git log
18 Prezentacja wykorzystaniaStworzenie tag’a: > git tag v1.00 > git tag v2.00 -m „Wersja druga” Wypisanie tagów: > git tag Wysłanie do zdalnego repozytorium tagów: > git push -tags Usunięcie taga: > git tag -d v2.00 Git push origin :refs/tags/v.2.00
19 Prezentacja wykorzystaniaTworzenie brancha: > git branch myBranch Wyświetlenie branchy: > git branch Przełączanie branchy: > git checkout myBranch Usuwanie brancha: > git branch –d myBranch Git push origin :heads/nazwa_brancha
20 Prezentacja wykorzystaniaŁączenie (merge) branchy: > git merge branchName W przypadku konfliktów po poprawkach w łatwy sposób można kontynuować pracę: >git commit -a -m „Merge branchy” Konflikty są podobnie rozwiązane jak jest to zrobione w SVN. Opcja -a podana przy komendzie commit powoduje, że wszystkie pliki istniejące w Indexie zostaną zaczytane z Working Direcotory, natomiast pozostałe zostaną usunięte.
21 Prezentacja wykorzystaniaHistoria zmian: > git log > git log --after= :20 > git log
22 GIT i SVN Migracja do GIT’a: > git svn clone
23 Przykładowe narzędzia:GIT Gui GIT Bash GIT History TortoiseGIT Eclipse eGIT GITHub Stash (Attlasian) Gerrit
24 Tworzenie i łączenie (merge) branch’y jest szybkie i łatwe. Podsumowanie Tworzenie i łączenie (merge) branch’y jest szybkie i łatwe. Możliwość wymiany kodu pomiędzy zdalnymi repozytoriami. (Udostepnienie bezpośrednio dla kogoś swojego prywatnego branch’a) Łatwe prototypowanie. (Prywatne branche) Można w łatwy sposób dostosować repozytoria do swojego procesu wytwarzania kodu. Możliwość automatycznego migrowania repozytorium SVN do GIT’a. Projekt OpenSource Rosnąca popularność dzięki której pojawaia się coraz więczej narzędzi/pluginów do/dla GIT’a. (Przykład: Główne repozytorium projektu jest w trybie read. Każdy zespół developerów ma swoje zdalne repozytorium do którego zapisuje(commit’uje) zmiany, następnie lider zespołu sprawdza je i łączy (merguje) z kolenym repozytorium wyżej. I tak aż do momentu kiedy osoba odpowiedzialna za główne repozytorium udostępni je na głównym repozytorium.
25 Pytania ?
26