Systemy kontroli wersji są to programy używane do monitorowania zmian w kodzie dewelopowanym przez jednego lub większą ilość programistów. Dzięki nim mamy możliwość stałego śledzenia rozwoju aplikacji, powrotu do wersji oprogramowania, które mogło zostać błędnie zmienione, a także merge’owania branchy rozwijanych przez kilku programistów. Oprogramowanie to służy niekiedy również szeroko pojętym celom projektowym, a nie dotyczącym stricte prac programistów: na przykład do gromadzenia całości materiałów projektowych: harmonogramów, grafik, czy specyfikacji technicznych produktu.
Wśród systemów kontroli wersji najbardziej popularnymi dzisiaj są:
1/ SVN
2/ GIT
3/ CVS
Systemy kontroli wersji ze względu na ich architekturę można podzielić na trzy główne kategorie: systemy lokalne, korzystające z serwera centralnego oraz rozproszone.
Najprostszą kategorią spośród wymienionych powyżej są systemy lokalne takie jak RCS (w praktyce zastąpiony przez CVS, który działa w innej wzorcu, oraz PRCS), które zapisują dane jedynie na komputerze lokalnym, przez co mogą być używane tylko w przypadku pracy jednej osoby nad daną „partią” materiału. Dzisiaj aplikacje funkcjonujące jedynie w środowisku lokalnym nie stanowią trzonu systemów kontroli wersji ani w profesjonalnych firmach zajmujących się wytwarzaniem software’u ani w przypadku projektów rozwijanych przez pojedynczych programistów. Zdecydowanie bardziej popularne są te opisane w dalszej części artykułu.
Drugą kategorią systemów kontroli wersji są działające w oparciu o centralny serwer, takie jak wspomniany w poprzednim akapicie CVS oraz nowszy i zdecydowanie częściej używany SVN. CVS jest aplikacją jednocześnie bezpieczną i prostą w użyciu, udostępnianą na licencji GPL, jednak użytkownikom, którzy dopiero zaczynają pracę z systemami kontroli wersji, nie poleca się używania tego systemu: co prawda darmowego i bardzo stabilnego, ale również będącego aplikacją „starszej generacji”.
Trzecim, ostatnim rodzajem są programy bazujące na rozproszonej architekturze P2P takie jak zyskujący szczególną popularność systemy GIT oraz Mercurial.
Na trzech wymienionych w drugim akapicie programach skoncentrujemy się w drugiej części artykułu.
GIT działa w modelu rozproszonym i jest rozpowszechniony na open-sourcowych zasadach licencji GNU GPL 2. Rozpoczęcie pracy z GITem jest uznawane za bardzo proste dzięki pośrednictwu serwisów takich jak GitHub czy BitBucket (BitBucket jest często używany również na potrzeby innej aplikacji: Mercuriala). GitHub posiada dzisiaj ponad trzy miniony użytkowników oraz posiada ponad 5 milionów repozytoriów, umożliwiając zarejestrowanym użytkownikom hostowanie i wersjonowanie plików na zasadach darmowych lub płatnych.
CVS to, żartobliwie mówiąc, prekursor GITa, o którym krąży anegdota, że twórca GITa, podczas planowania prac nad swoim nowym systemem wziął przykład z CVSa, czego nie robić. Faktycznie aplikacja ta, działająca w architekturze klient – serwer, mimo niewątpliwych zalet: darmowości i łatwości użycia, jest uważana za już przestarzałą i nie polecaną początkującym. Krytykowana jest między innymi za problem w wersjonowaniu zmian nazw i przenoszeniu plików, relatywnie kosztowne operacje na branchach, brak wsparcia dla DRCS oraz problem z tzw. transakcjami atomowymi (w przypadku przerwania połączenia przy skomplikowanych operacjach, operacje te nie są wycofywane, ale przerywane).
SVN jest rozpowszechniany na zasadach licencji Apache i jest jednocześnie najpopularniejszym systemem kontroli wersji. W przeciwieństwie do CVSa, SVN umożliwia śledzenie nie tylko zmian samej zawartości plików, ale również nazw katalogów i plików oraz położeń plików / katalogów. SVN zapewnia również działanie w transakcjach, zabezpieczając skomplikowane operacje przed przerwaniem w ich trakcie. W stosunku do CVSa poprawione zostały również tagi oraz branche. W przypadku SVNa interfejsem ułatwiającym jego używanie jest TortoiseSVN: zestaw narzędzi, również rozpowszechnianych na zasadach licencji GNU GPL, które umożliwiając dostęp do SVNa z poziomu menadżera plików. Zobrazowane zostało na screenie poniżej:
Podsumowując, systemy kontroli wersji są istotnym krokiem dla pojedynczego programisty, mającego nawet epizodyczne problemy z niedostępnością poprzednich wersji swojego oprogramowania. W przypadku pracy w grupie (prac grupowych), oprogramowanie to jest wręcz konieczne, aby projekt toczył się sprawniej i bezpieczniej. Najnowsze trendy rozwoju Internetu kierują programistów w stronę systemów rozproszonych takich jak Mercurial lub GIT, zapewniających zaawansowane funkcje zarządzania wersjami oraz branchami, co zabezpiecza proste oraz naprawdę skomplikowane aplikacje przez niekontrolowaną utratą archiwalnych danych.
Autor: http://www.datalab.pl