Systemem Kontrol Wersji jest repozytorium plików, zazwyczaj plików kodu źródłowego programów komputerowych, z kontrolą dostępu. Każda zmiana wykonana na kodzie źródłowym jest śledzona razem z tym kto zrobił tą zmianę, dlaczego ją zrobił oraz adnotacjami do naprawionych problemów albo wprowadzonych ulepszeń. Systemy kontroli wersji są niezbędne dla wszelkich form współpracy nad rozwojem oprogramowania
Jak porównać kod programu z dnia dziejszego z jego stanem rok temu? Dzięki temu że systemy kontroli wersji śledzą każdą nawet najmniejszą zmianę takie porównanie staje się łatwe. Wiedząc kto, kiedy i dlaczego wprowadził jaką zmianę można także z dużą łatwością prześledzić kiedy zaczął się pojawiać jaki błąd. Wszelkie problemy jakie pojawiły się z powodu wprowadzonych zmian mogą także zostać cofnięte do poprzedniej ich wersji, co sprawia że nawet krytyczne błędy mogą być, chociażby tymczasowo, cofnięte i naprawione.
Rozwijanie programu jest zazwyczaj przeprowadzane przez zespoły skupione w jednym miejscu albo rozproszone. Kontrola wersji jest istotnym elementem koordynowania zmian wprowadzanych przez grupy programistów. Pozwala ona na wprowadzanie zmian jednemu użytkownikowi na jego kopii lokalnej, które następnie zostaną wprowadzone do kodu innych użytkowników. To pozwala wszystkim praocwać na tej samej wersji ale lokalnych kopiach kodu unikając ewentualnych blędów oraz konfliktów. W wypadku gdy dwoje użytkowników zmieni tę samą część kodu, t.j. konfliktu , są oni o tym powiadamiani co pozwala na szybkie rozwiązanie tego konfliktu.
Prowadzenie biznesu nieraz wymaga przeprowadzania należytej
staranności. Co
dokładnie jej podlega zależy od biznesu
jaki się prowadzi ale w przypadku własności intelektualnej są to zazwyczaj prawa
własności
jej części składowych. System
kontrol wersji zdecydowanie ułatwia ten proces pozwalając chociażby stworzyć
listę osób
które wniosły wkład w oprogramowanie
oraz dowiedzieć się kto dokonał dokładnie których zmian i w jakim czasie.
System kontroli wersji dodatkowo ułatwia monitorowanie pracy. Automatycznie
powiadamia on
gdy zostały wprowadzon jakieś zmiany.
Te notyfikacje wraz z logami dotyczącymi poszczególnych zmian pozwolą
menadżerowi
monitorować i sledzić wszelką aktywność związaną
ze oprogramowaniem.
Kolejną zaletą systemu kontroli wersji jest to, że w przypadku wątpliwości oraz
sporów
odnoszących się do prawa własności nad
poszczególnymi pomysłami mogą one pomóc ustalić pierwszeństwo.
Git jest obecnie najbardziej popularnym rozproszonym systemem kontroli wersji.
Zaprojektowany i stworzony w
2005 roku przez deweloperów jądra Linuxa (w tym Linusa Torvaldsa) służył im do
pracy nad
jądrem Linuxa. Chociaż różnice
pomiędzy Git-em a Mercurialem nie są znaczne jeśli chodzi o ich użytkowanie to
różnią się
sposóbem w jakim działają.
W tym wypadku Git działa w bardziej skomplikowany, co za tym idzie mnie
zrozumiały, sposób
ale jego popularność
sugeruje że dla jego użytkowników nie jest to problemem na tyle dużym aby z
niego rezygnować
a dodatkowe funkcjonalności
potrafią być zdecydowanie przydatne.
Mercurial jest właściwie młodszym bratem Git-a. Pierwsza wersjia Mercuriala
pojawiła się
zaledwie 12 dni po Gitcie a jego autorem
był Matt Mackall. Pierwotna idea za istnieniem Mercuriala była podobna do Gita:
miało to być
narzędzie do kontroli wersji
jądra Linuxa. Zespół zajmujący się nim wybrał niestety Gita ale jego konkurent
zyskał
popularność i do dziś jest używany w wielu
projektach. O jego sukcesie może też stanowić to, że używają go nawet takie
korporacje jak
Google czy Facebook. Jego podstawowe
funkcjonalności są bardzo podobne do Git-a ale jest prostszy w obsłudze.
Subversion jest najbardziej popularnym scentralizowanym systemem kontrol wersji.
Prace nad
nim rozpoczęły się w 2000 roku więc
jest starszy od swoich głównych konurentów. W 2009 roku został przyjęty jako
potencjanly
projekt Fundacji Apache, którym został
już w 2010 roku. Główną różnicą pomiędzy scentralizowanym systemem kontroli
wersji a
rozproszonym, jest to że w scentralizowanym
systemie wszystkie meta dane są trzymane tylko na centralnym serwerze (dla
porównania, w
rozproszonym systemie każda lokalna kopia
pracownika trzyma także meta dane). Różnica wyboru pomiędzy scentralizowanym a
rozproszonym
sytemem wersji jest głównie kwestią
filozofii. Scentralizowany system jest prostszy w użytkowaniu i wymaga wykonania
mniejszej
ilości akcji w codziennym użytkowaniu,
za to nie daje on pewności posiadania wielu kopii meta danych co znacznie
ułatwia
przywrócenie projektu w wypadku awarii.