Historia powstania systemu kontroli wersji Git i opanowania świata

Opublikowane przez Tomasz Prasołek w dniu

Photo by Yancy Min on Unsplash

Git jest najpopularniejszym systemem kontroli wersji używanym przez programistów. W tym wpisie chcę Ci pokazać jak doszło do powstania Gita oraz jak zdobył taką popularność.

Zanim przejdziemy do tego jak powstał i kto go wymyślił, przedstawię różne systemy kontroli wersji, które istniały przed Gitem.

Krótka historia systemów kontroli wersji

  • 1972 – Source Code Control System (SCCS) – zamknięty kod źródłowy, darmowy dla systemu Unix. Zapisywał oryginalny plik. Podczas jego zmiany nie zapisywał ponownie całego pliku, tylko wprowadzone zmiany. Chcąc się dobrać do wersji 4 tego pliku, system brał oryginalny plik i nakładał na niego 3 kolejne zmiany.
  • 1982 – Revision Control System (RCS) – dostępny kod źródłowy (open source). Jego zaletą było, że działał na wielu platformach, a poprzednik czyli SCCS tylko na Unixie. Był bardziej przyjazny w użytkowaniu oraz szybszy niż SCCS. RCS używał innego formatu przechowywania zmian. Działał dokładnie odwrotnie. Przechowywał najnowszy plik, ze wszystkimi wprowadzonymi zmianami. Jeśli chcieliśmy wrócić do poprzedniej wersji pliku, to dopiero wtedy nakładał zmiany na ten najnowszy plik, aby zobaczyć wcześniejszy stan pliku. Było to lepsze rozwiązanie, bo przeważnie interesuje nas ostatni stan pliku.

Oba systemy pozwalały śledzić zmiany tylko w jednym pliku.

  • 1986 – 1990 – Concurrent Version System (CVS) – dostępny kod źródłowy (open source). Ogromną zmianą w porównaniu do poprzednich systemów była możliwość pracy na wielu plikach. Drugą dużą różnicą była możliwość pracy równoległej przez więcej niż jedną osobę. Można było umieścić repozytorium na zdalnym serwerze i mogło z niego korzystać kilka osób.
  • 2000 – Apache Subversion (SVN) – dostępny kod źródłowy (open source). SVN również pozwalał na pracę wielu osób nad jednym plikiem. Był dużo szybszy niż CVS, obsługiwał nie tylko pliki tekstowe. Jednak największą różnicą było to, że śledził zmiany jakie się działy w folderach na dysku.
    Najbardziej popularny system kontroli wersji do czasu powstania Gita.
  • 2000 – BitKeeper SCM – zamknięty kod źródłowy. Płatny, trzeba było go po prostu kupić jak inne programy na rynku. Jednak była również dostępna wersja community, którą można było używać za darmo w projektach open source. W przeciwieństwie do poprzednich był to rozproszony system kontroli wersji. O tym czym jest rozproszony system pisałem w poście Podstawowe pojęcia związane z GITem.

Powstanie Gita

W latach 2002 – 2005 kod źródłowy jądra Linuxa był przechowywany właśnie przy użyciu BitKeeper SCM. Było to dziwne, ponieważ kod źródłowy Linuxa był otwarty, a do jego przechowywania używano programu, który był płatny. Obawiano się tego, że firma BitMover stojąca za BitKeeper SCM może w pewny momencie zmienić zasady i program nie będzie już darmowy.

Dokładnie tak się stało w kwietniu 2005, wersja community przestała być darmowa. Właśnie wtedy narodził się Git. Został on stworzony przez Linusa Torvaldsa, czyli twórcę Linuxa. Linus szukał systemu podobnego do BitKeeper, jednak żadne rozwiązanie dostępne na rynku mu się nie podobało. Postanowił napisać własny system kontroli wersji.

Cele jakie Linus postawił przed nowym systemem kontroli wersji to:

  • Szybkość.
  • Prosta konstrukcja.
  • Silne wsparcie dla programowania nieliniowego – jednoczesna praca na wielu gałęziach (branchach).
  • Całkowicie rozproszony.
  • Potrafi bardzo efektywnie obsługiwać duże projekty jak np. jądro Linuxa.

Harmonogram prac nad Gitem:

  • 3 kwietnia 2005 – rozpoczęcie prac nad Gitem.
  • 6 kwietnia 2005 – Linus Torvalds ogłasza światu swój nowy projekt.
  • 7 kwietnia 2005 – kod źródłowy Gita jest przechowywany w Gicie 🙂
  • 18 kwietnia 2005 – pierwszy merge wielu branchy.
  • 16 czerwca 2005 – W Gicie znajduje się już jądro Linuxa w wersji 2.6.12
  • 26 lipca 2005 – Linus przekazał opiekę nad projektem Junio C. Hamano, a sam wrócił na pełny etat do rozwijania Linuxa.
  • 21 grudnia 2005 – Hamano wydaje wersję 1.0 i do dzisiaj pozostaje głównym opiekunem projektu.

Skąd nazwa “GIT” ?

Git w słowniku angielskim oznacza osobę nieprzyjemną. Linus Torvalds zażartował kiedyś, że:

Jestem egoistycznym dupkiem i nazywam wszystkie moje projekty po sobie. Najpierw był “Linux” teraz “git”.

Linus Torvalds

W pliku README projektu Git jest napisane, że GIT to:

the stupid content tracker

Dodatkowo jest napisane, że nazwa Git może znaczyć cokolwiek w zależności od Twojego nastroju 🙂 np.:

  • Jest to losowa kombinacja 3 liter, która jest wymawialna i aktualnie nie używana jako jakieś polecenie w systemie UNIX.
  • “Global Information Tracker” – jeśli jesteś w dobrym nastroju i to Ci pasuje. Anioły śpiewają, a światło nagle wypełnia pokój.
  • “goddamn idiotic truckload of sh*t” – kiedy nie działa.
Lead magnet

Powstanie GitHub

W 2008 roku powstał GitHub, serwis do hostowania repozytoriów Gita, który również przyczynił się do popularności Gita. W tym czasie głównym miejscem dla programistów do trzymania kodu źródłowego swoich projektów był Sourceforge. Tak naprawdę jednak nikt go nie lubił. Serwis był pełny reklam i miał bardzo słaby user experience. W porównaniu do niego GitHub był jak powiew świeżości 🙂 Nie tylko pod względem user experience, GitHub był po prostu dobry.

Kiedy GitHub ogłosił, że hosting kodu dla projektów open source będzie darmowy, bardzo dużo osób zaczęło go używać do swoich prywatnych projektów. Z czasem ta popularność rozprzestrzeniła się również dla projektów komercyjnych.

Serwis cały czas dodawał nowe funkcjonalności. Z czasem zaczął funkcjonować trochę jako serwis społecznościowy, po tym jak dodali profile. Dodając opcję pull request serwis stworzył unikalną społeczność programistów. W końcu stali się wiodącym serwisem do przechowywania i dzielenia się kodem.

W tym momencie GitHub ma 36 milionów użytkowników na całym świecie. Na GitHubie znajduje się ponad 100 milionów repozytoriów.

Podsumowanie

Gita można całkowicie obsługiwać z konsoli, ale powstały (i cały czas powstają) różne programy pomagające w pracy z tym systemem. To są zarówno jakieś aplikacje konsolowe, jak i bardzo zaawansowane programy z GUI. Cały czas zresztą powstają nowe.

Ostatnio nawet powstał język programowania, w którym programy są całkowicie definiowane przez graf commitów w standardowym repozytorium Gita – legit.

Git jest najpopularniejszym systemie kontroli wersji na świecie. Bardzo dużo przyczynił się do tego serwis GitHub. Ludzie chcieli dzielić się swoimi projektami i GitHub właśnie to programistom udostępnił. Moim zdaniem bez GitHuba – Git nie był by aż tak popularny.

Git zawładnął programistycznym światem i nie zapowiada się, że w najbliższym czasie coś się zmieni.

Źródła:
https://www.linuxjournal.com/content/git-origin-story
https://hackernoon.com/how-git-changed-the-history-of-software-version-control-5f2c0a0850df
https://github.com/about
https://github.com/git/git/blob/e83c5163316f89bfbde7d9ab23ca2e25604af290/README
https://en.wikipedia.org/wiki/Git
https://www.youtube.com/watch?v=s–IuBd2v3c
https://git-scm.com/book/en/v2/Getting-Started-A-Short-History-of-Git

Zdjęcie wykorzystane we wpisie pochodzi z portalu Unsplash i zostało zrobione przez: unsplash-logoYancy Min

Kategorie: Git

1 Komentarz

mac · 25 maja 2019 o 21 h 36 min

Bardzo uprosciles te cala historie. Cytujac wikipedie: ‘The copyright holder of BitKeeper, Larry McVoy, had withdrawn free use of the product after claiming that Andrew Tridgell had reverse-engineered the BitKeeper protocols.’. W swietle tych faktow wynika jasno, ze chlopaki od Open Source podejmowali proby zdobycia informacji jak to wszystko dziala. Git to otwarta reimplementacja BitKeeper’a, ktory (cytuje znow za wikipedia) ‘it was released as open-source software under the Apache License 2.0 on 9 May 2016’. Nie analizowalem obu kodow zwrodlowych, ale ewidentnie architekture opracowal i po raz pierwszy zaimplementowali programisci BitKeepr’a. Linus skopiowal zamysl i dal wszystkim wlasna jego implementacje.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *