Robocikowo>ROBOCIKOWO
Narzędzia deweloperskie

Git

2005AktywnyOpublikowany
Rozproszony system kontroli wersji stworzony w 2005 r. przez Linusa Torvaldsa; śledzi zmiany w kodzie przez migawki, commity, gałęzie i scalanie.
Kluczowa innowacja
Rozproszony model kontroli wersji oparty na pełnych migawkach (snapshotach) treści adresowanych skrótem SHA-1, a nie na przyrostowych różnicach, dzięki czemu każdy klient ma kompletną, kryptograficznie weryfikowalną kopię całej historii repozytorium.
Kategoria
Narzędzia deweloperskie
Poziom abstrakcji
System
Poziom operacji
Tooling
Zastosowania
Kontrola wersji kodu źródłowegoWspółpraca zespołowa nad oprogramowaniemRozgałęzianie i scalanie zmianPrzegląd kodu i pull requestyCI/CD i automatyzacja wydańŚledzenie zmian w dokumentacji i danych konfiguracyjnych

Jak działa

Git przechowuje dane jako serię migawek (snapshotów) projektu: przy każdym commicie zapisuje stan wszystkich plików w danym momencie, a dla plików niezmienionych trzyma jedynie referencję do poprzedniej wersji. Każdy plik i katalog jest sumowany kontrolnie skrótem SHA-1 (40-znakowy ciąg szesnastkowy) i adresowany tą sumą. Pliki istnieją w trzech głównych stanach: zmodyfikowanym, przygotowanym (staged) i zatwierdzonym (committed), czemu odpowiadają obszary: katalog roboczy, poczekalnia (staging area / index) i katalog Git. Gałęzie to lekkie, przesuwalne wskaźniki na commity, co czyni rozgałęzianie i scalanie tanimi operacjami. Repozytoria o wspólnej historii synchronizuje się operacjami push/pull/fetch.

Rozwiązany problem

Rozwiązuje ograniczenia scentralizowanych systemów kontroli wersji: zależność od serwera i sieci, wolne operacje na gałęziach oraz trudną współpracę przy nieliniowych, równoległych przepływach pracy. Zapewnia też integralność historii dzięki adresowaniu treści skrótami kryptograficznymi.

Komponenty

RepozytoriumLokalne, kompletne źródło historii wersji

Katalog .git przechowujący pełną historię projektu, obiekty i referencje. Każdy klon jest samodzielnym, kompletnym repozytorium.

Obiekt commit (migawka)Niezmienny punkt historii

Zatwierdzony stan projektu w danym momencie, adresowany skrótem SHA-1, wskazujący na drzewo plików i commit(y) rodzicielskie.

Poczekalnia (staging area / index)Przygotowanie zmian przed zatwierdzeniem

Obszar pośredni, w którym oznacza się zmiany przeznaczone do następnego commita, oddzielając katalog roboczy od zatwierdzonej historii.

Gałąź (branch)Niezależna linia rozwoju

Lekki, przesuwalny wskaźnik na commit, umożliwiający tanie rozgałęzianie i równoległą, nieliniową pracę.

Zdalne repozytorium (remote)Współpraca asynchroniczna między repozytoriami

Repozytorium na innej maszynie o wspólnej historii, z którym synchronizuje się zmiany operacjami push/pull/fetch.

Ewolucja

2005
Powstanie Git
Punkt przełomowy

Linus Torvalds tworzy Git do kontroli wersji jądra Linux; pierwsze wydanie 7 kwietnia 2005.

2005
Junio Hamano przejmuje opiekę nad projektem

Linus Torvalds przekazuje utrzymanie Git Junio Hamano, który pozostaje głównym opiekunem projektu.

2008
Powstanie GitHub
Punkt przełomowy

GitHub (zał. 2008) udostępnia hosting repozytoriów Git, znacząco przyspieszając masową adopcję Git.

Hiperparametry (konfigurowalne osie)

Algorytm skrótu obiektówWysoka

Funkcja skrótu adresująca obiekty: historycznie SHA-1, z eksperymentalnym wsparciem dla SHA-256.

Nazwa gałęzi domyślnejNiska

Nazwa gałęzi tworzonej przy inicjalizacji repozytorium (np. master lub main).

Wymagania sprzętowe

Podstawowe

Git jest narzędziem CPU-owym działającym na dowolnej maszynie POSIX (Linux, macOS) i Windows; nie wymaga specjalizowanego sprzętu.