Systemy kontroli wersji

Czym są systemy kontroli wersji?

Co to są systemy kontroli wersji oraz dlaczego jest to podstawowe narzędzie na liście rzeczy używanej przez każdego programistę? Systemy kontroli wersji pozwalają na śledzenie zmian w plikach i możliwość powrotu do dowolnej z poprzednich wersji pliku, pozwalają przywrócić stan projektu z przed kilku dni bądź też porównać zmiany w plikach i określić co i kiedy było zmieniane. Systemy kontroli wersji są bardzo przydatnymi narzędziami, a w przypadku kiedy nad projektem pracuje więcej niż jedna osoba – są wręcz obowiązkowe aby zapanować nad zmianami w kodzie. Ja jednak, mimo, że nad dużą ilością projektów pracuję samodzielnie – zawsze używam systemu kontroli wersji do kontroli kodu. Dzięki temu mogę bez problemy przywrócić kod który wydawał mi się nie potrzebny, bądź równolegle testować kilka rozwiązań jednego problemu napisanego w różny sposób. Oprócz tego mogę bez problemu przenosić pracę z jednego komputra na drugi, bez ryzyka, że zapomnę coś przenieść z innego komputera i wersje na obu urządzeniach się „rozjadą”. Co więcej – z systemów kontroli wersji może korzystać każdy, kto chce śledzić zmiany w plikach np. graficy komputerowi do projektów, administratorzy serwerów do śledzenia zmian w plikach konfiguracyjnych itd. Nie ma żadnego ograniczenia co do typów plików które są przechowywane w systemach kontroli wersji. Systemy kontroli wersji można zgrupować w trzy zbiory.

Lokalne systemy kontroli wersji

Pierwsze co zwykle przychodzi do głowy w sytuacji kiedy chcemy zachować archiwalne wersje kodu nad którym pracujemy jest po prostu skopiowanie go do innego katalogu i opatrzenie na przykład – datą bądź stosownym komentarzem. Na bazie tego pomysłu – programiści już dawno stworzyli narzędzia które automatyzują te procesy. Rozwiązanie to ma pewne wady – korzystanie z takiego repozytorium jest możliwe tylko przez jednego programistę, a przeniesienie na inny komputer jest obarczone takimi samymi problemami jakbyśmy w ogóle nie stosowali systemu kontroli wersji. W chwili obecnej nie jest warte poświęcanie czasu na poznawanie lokalnych systemów kontroli wersji, gdyż mało kto już z tego korzysta i istnieją dużo lepsze rozwiązania.

Rozproszone systemy kontroli wersji

Lokalne systemy nie rozwiązywały największego problemu – współpracy z różnymi programistami. Aby poradzić sobie z tym problemem – stworzone zostały scentralizowane systemy kontroli wersji. Całością kodu zarządzał serwer który przechowywał kod projektów. Użytkownicy łączyli się do serwera, pobierali aktualną wersję repozytorium, a po zmianach w plikach – wysyłali je bezpośrednio na serwer. Takie rozwiązanie dawało dużo większe możliwości zarządzania kodem, możliwe było definiowanie uprawnień dla poszczególnych użytkowników systemu. Przez długi okres czasu rozproszone systemy kontroli wersji były standardem z którego każdy korzystał.

Systemy tego typu mają jednak dużą wadę – gdy serwer jest niedostępny – nikt nie może pracować. W związku z tym nie jest możliwa praca nad kodem w przypadku kiedy nie mamy dostępu do sieci w której znajduje się serwer. Takie rozwiązanie nie jest również odporne na awarię serwera – w przypadku utraty danych z serwera – tracimy cały kod projektu.

Rozproszonymi systemami kontroli wersji są np. CVS czy Subversion.

Rozproszone systemy kontroli wersji

Dodatkową nowością która pojawiła się w raz z powstaniem rozproszonych systemów kontroli wersji jest to, że każda osoba pracująca z repozytorium kopiuje całość repozytorium na swój komputer. Gdy serwer na którym przechowywane jest główne repozytorium ulegnie awarii – można zawsze wykorzystać którąś z kopii użytkowników. Rozproszone systemy kontroli wersji eliminują więc ryzyko utraty całości kodu w przypadku awarii serwera. Jako że każdy z użytkowników ma swoją kopię repozytorium – do pracy nie jest potrzebny stały dostęp do serwera. W dowolnej chwili można jednak wysłać swoje zmiany do centralnego repozytorium danych. Tego typu systemy są obecnie powszechnie wykorzystywanym standardem.

Rozproszone systemy kontroli wersji to np. Git, Mercurial, Bazaar.