GIT jest systemem kontroli wersji. Czym jest kontrola wersji i dlaczego powinieneś się nią przejmować? System kontroli wersji śledzi wszystkie zmiany dokonywane na pliku (lub plikach) i umożliwia przywołanie dowolnej wcześniejszej wersji.

Rozproszony system kontroli wersji

GIT należy do rodziny rozproszonych systemów kontroli wersji. W rozproszonych systemach wersji  (takich jak Git, Mercurial, lub Bazaar) użytkownicykopiują całe repozytorium zamiast jedynie najnowszej wersji. Gdy serwer używany do scentralizowanego przechowywania repozytorium ulegnie awarii to repozytorium każdego użytkownika może zostać skopiowane na serwer w celu przywrócenia go do pracy.

Różnice między GIT a innymi systemami CSV

Podstawową różnicą między GIT a innymi systemami jest podejście do przechowywania danych. Większość systemów przechowuje informacje jako listę zmian na plikach. GIT podchodzi do przechowywania danych w odmienny sposób. Traktuje on dane jak zestaw migawek. Za każdym razem gdy wykonywany jest commit  to GIT tworzy obraz przedstawiający jak wyglądają wszystkie pliki w danym momencie i przechowuje referencję do tej migawki. Aby zachować wydajność niezmienione pliki nie zostają ponownie zapisane, zamiast tego zapisana jest referencja do poprzedniej wersji pliku.

Operacje lokalne

  • Większość operacji GIT do działania wymaga jedynie dostępu do lokalnych plików, zasoby przechowywane na innym komputerze nie są potrzebne. Przykładowo, w celu przeglądu historii projektu, GIT nie musi łączyć się z serwerem, aby pobrać historyczne dane - zwyczajnie odczytuje je wprost z lokalnej bazy danych. Umożliwia to pracę z systemem wersjonowania nawet bez dostępu do sieci.

Wbudowane mechanizmy spójności

Dla każdego obiektu Git wyliczana jest suma kontrolna przed jego zapisem i na podstawie tej sumy można od tej pory odwoływać się do danego obiektu. Oznacza to, że nie ma możliwości zmiany zawartości żadnego pliku, czy katalogu której GIT nie zauważy. Nie ma szansy na utratę informacji, czy uszkodzenie zawartości pliku podczas przesyłania lub pobierania danych, bez możliwości wykrycia takiej sytuacji przez GIT. GIT wykorzystuje skrót SHA-1 do wyznaczenia sumy kontrolnej. Jest to 40-znakowy łańcuch składający się z liczb szesnastkowych wyliczany na podstawie zawartości pliku lub struktury katalogu.

Trzy stany GIT

GIT posiada trzy stany w których mogą znajdować się pliki:

  • Zatwierdzony - oznacza, że dane zostały zapisane w lokalnym repozytorium.
  • Zmodyfikowany - oznacza, że plik został zmieniony ale zmiany nie zostały zapisane w lokalnym repozytorium.
  • Śledzony - oznacza, że zmodyfikowany plik został przeznaczony do zatwierdzenia w następnej operacji commit.

Stany te prowadzą do trzech sekcji głównych projektu GIT:

  • GIT directory (repozytorium) - jest miejscem w którym GIT  przechowuje metadane oraz bazę danych obiektów. To najważniejsza część GIT  i to właśnie ten katalog jest kopiowany podczas klonowania repozytorium.
  • Working directory (katalog roboczy) - stanowi obraz jednej wersji projektu. Zawartość tego katalogu jest pobierana ze skompresowanej bazy danych GIT i umieszczana na dysku.
  • Staging area (przechowalnia) - jest to plik przechowywany w katalogu GIT który zawiera informacje o tym czego dotyczyć będzie następna operacja commit.

Podstawowy algorytm pracy z GIT

  1. Modyfikacja plików w katalogu roboczym.
  2. Oznaczenie zmodyfikowanych plików jako śledzone co powoduje zapis ich bieżącego stanu do przechowalni.
  3. Commit podczas którego zawartość plików zapisywana jest jako migawka projektu w repozytorium.

Jeśli jakaś wersja pliku znajduje się w repozytorium, uznaje się ją jako zatwierdzoną. Jeśli plik jest zmodyfikowany, ale został dodany do przechowalni, plik jest śledzony. Jeśli zaś plik jest zmodyfikowany od czasu ostatniego pobrania, ale nie został dodany do przechowalni, plik jest w stanie zmodyfikowanym.