Transcript prezentacja

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
Komputer
Plik
Wersja 1
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
Komputer
Plik
•
•
•
•
Repozytorium
Komputer
Plik
Wersja 1
 Mercurial
 Bazaar
Serwer
Repozytorium
Repozytorium
Wersja 2
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
Katalog gita
(folder .git)
Index
checkout
add
commit
Podstawowe operacje
• git init
• git add
• git rm
– stworzenie nowego repozytorium
– dodanie zawartości pliku do Index’u
– usuwa plik z indexu
(plik zniknie z working directory po commit’ie)
• git mv
• git status
– 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
– zapisuje zmiany do repozytorium lokalnego
– wyświetla logi z commit’ów
– wyświetla obiekt
• git fetch
• git pull
• git push
– 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 ?