GIT System Kontroli wersji GIT Rafał Kalinowski
Agenda Czym jest GIT? Modele pracy Możliwości GIT a Kilka 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
Czym jest GIT - System Kontroli Wersji - Stworzony 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
Modele pracy Model Scentralizowany SVN CVS Perforce Komputer Plik Serwer Repozytorium Wersja 1 Komputer Plik Wersja 2 Używana jako miejsce przechowywania kopii zapasowej (Backupu) Brak prywatnych branch y Do wykonania większości standardowych operacji wymaga połączenia do serwera.
Modele pracy c.d. Model Rozproszony GIT Mercurial Bazaar Komputer Plik Repozytorium Serwer Repozytorium Wersja 1 Wersja 2 Komputer Plik Repozytorium Wersja 1 Wersja 1 Wersja 2 Wersja 2 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.
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 (24b9da6552252987aa493b52f8696cd6d3b00373) - Praca lokalna bez połączenia z repozytorium - Większość operacji nie wymaga połączenia z serwerem.
Kilka słów o terminologii Branch - 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.
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.
Obiekty GIT a cd.
Struktura zmian w GIT ie 1. Przechowywanie zawartości projektu jako snapshot ów. 2. Kompresowanie zawartości projektu. Zmiany w czasie Wersja 1 Wersja 2 Wersja 3 Wersja 4 Plik A A A1 A1 Plik B B B B1 Plik C C1 C1 C2
Operacje zdalne Przykładowymi operacjami zdalnymi są: git clone git fetch git pull git push pobiera zdalne repozytorium do podanego folderu pobiera obiekty i wskaźniki z innego repozytorium pobiera i integruje obiekty i wskaźniki z innego repozytorium aktualizuje zdalne repozytorium o wskaźniki i powiązane obiekty.
Operacje lokalne Większość operacji wykonywanych jest na lokalnym repozytorium. Working Directory Index Katalog gita (folder.git) checkout add commit
Podstawowe operacje git init git add git rm git mv git status stworzenie nowego repozytorium dodanie zawartości pliku do Index u usuwa plik z indexu (plik zniknie z working directory po commit ie) przenosi plik pokazuje status katalogu roboczego i poczekalni git config pobiera i ustawia opcje globalne GIT a lub tylko repozytorium
Podstawowe operacje cd. git commit git log git show git fetch git pull git push zapisuje zmiany do repozytorium lokalnego wyświetla logi z commit ów wyświetla obiekt pobiera zmiany z repozytorium zdalnego wywołuje polecenia fetch i merge wysyła zmiany do zdalnego repozytorium
Podstawowe operacje cd. git branch git checkout git merge git rebase git reset git stash git gc do zarządzania branch ami przełączanie się między branch ami łączy podane branch e zmienia punkt startu dla branch a przywraca stan katalogu roboczego zapisuje/odczytuje zmiany z przestrzeni tymczasowej (rodzaj schowka) porządkowanie i optymalizacja repozytorium
Prezentacja wykorzystania Stworzenie zdalnego repozytorium : > git init Dodanie nowych plików: > git add. > git add readme.txt Struktura projektu. (Plik.git/config) > git config
Prezentacja wykorzystania cd. Pierwszy commit: > git commit -m Treść wiadomości Historia : > git log
Prezentacja wykorzystania Stworzenie 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
Prezentacja wykorzystania Tworzenie brancha: > git branch mybranch Wyświetlenie branchy: > git branch Przełączanie branchy: > git checkout mybranch Usuwanie brancha: > git branch d mybranch
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
Prezentacja wykorzystania Historia zmian: > git log > git log --after=22.06.2014.19:20 > git log <nazwa_pliku> Wyszukiwanie odpowiedzialnej osoby: > git blame <nazwa_pliku> > git blame L 12,3 <nazwa_pliku>
GIT i SVN Migracja do GIT a: > git svn clone <svn_url> Praca na kopii repozytorium SVNa w GIT ie: > git svn rebase > git svn dcommit
Przykładowe narzędzia: GIT Gui GIT Bash GIT History TortoiseGIT Eclipse egit GITHub Stash (Attlasian) Gerrit
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.
Pytania?