Git
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
Katalog .git przechowujący pełną historię projektu, obiekty i referencje. Każdy klon jest samodzielnym, kompletnym repozytorium.
Zatwierdzony stan projektu w danym momencie, adresowany skrótem SHA-1, wskazujący na drzewo plików i commit(y) rodzicielskie.
Obszar pośredni, w którym oznacza się zmiany przeznaczone do następnego commita, oddzielając katalog roboczy od zatwierdzonej historii.
Lekki, przesuwalny wskaźnik na commit, umożliwiający tanie rozgałęzianie i równoległą, nieliniową pracę.
Repozytorium na innej maszynie o wspólnej historii, z którym synchronizuje się zmiany operacjami push/pull/fetch.
Ewolucja
Linus Torvalds tworzy Git do kontroli wersji jądra Linux; pierwsze wydanie 7 kwietnia 2005.
Linus Torvalds przekazuje utrzymanie Git Junio Hamano, który pozostaje głównym opiekunem projektu.
GitHub (zał. 2008) udostępnia hosting repozytoriów Git, znacząco przyspieszając masową adopcję Git.
Hiperparametry (konfigurowalne osie)
Funkcja skrótu adresująca obiekty: historycznie SHA-1, z eksperymentalnym wsparciem dla SHA-256.
Nazwa gałęzi tworzonej przy inicjalizacji repozytorium (np. master lub main).
Wymagania sprzętowe
Git jest narzędziem CPU-owym działającym na dowolnej maszynie POSIX (Linux, macOS) i Windows; nie wymaga specjalizowanego sprzętu.