Czy warto w projektach używać systemu kontroli wersji ?
poniedziałek, styczeń 30th, 2006 by Paweł RutkowskiOczywiście że tak !!!
Obecnie panuje przeświadczenie że systemy kontroli wersji są przydają się tylko w projektach w których uczestniczy wielu programistów. Nic bardziej mylnego. Jednak zacznijmy od początku
Czym jest system kontroli wersji
Narzędzia kontroli wersji, czy też systemy kontroli wersji pozwalają - przede wszystkim - na śledzenie zmian w plikach projektu wraz z upływem czasu. Możemy w każdej chwili sięgnąć do wersji z określonego punktu w czasie i zobaczyć jakie zmiany zaszły od tamtego czasu (a w większości narzędzi możemy zobaczyć kto je wprowadził).
Drugą właściwością jest możliwość pracy wielu programistów nad tymi samymi plikami. W standardowym modelu plików bardzo prawdopodobny jest następujący scenariusz:
- Programista A otwiera plik x.c
- Programista B otwiera plik x.c
- Programista A dodaje nowe linie do pliku i zapisuje go
- Programista B dodaje nową linię do pliku, zapisuje go co skutkuje usunięciem zmian wprowadzonych przez programistę A
Dlaczego tak się stanie ? Ponieważ obaj programiści otworzyli ten sam plik i każdy z nich wprowadził zmiany - jednak nie byli w stanie ich zsynchronizować. Tu z pomocą przychodzi system kontroli wersji. Każdy z programistów pracuje z własną wersją plików, które dowolnie modyfikuje i w miarę potrzeb wysyła do wspólnego repozytorium. Podczas wysyłania danych do repozytorium, następuje łączenie wszelkich zmian wprowadzonych przez programistę z innymi, które pojawiły się od momentu pobrania pliku.
Oczywiście czasem zdarza się że komputer nie jest w stanie automatycznie połączyć plików i wtedy następuje konflikt który trzeba usunąć ręcznie.
Dodatkową funkcją, często pomijaną, jest tzw. release management (nie znam dobrego polskiego odpowiednika - ogólnie można powiedzieć ze jest to zarządzanie “wypuszczonymi, kompletnymi” wersjami oprogramowania). Dzięki tej funkcji, kiedy projekt osiągnie określone stadium (np.: zostaną zaimplementowane wszystkie funkcje przeznaczone do wersji 2.3) możemy repozytorium oznaczyć odpowiednim znacznikiem (ang. tag) np.: REL_2_3. Wszystkie pliki znajdujące otrzymają taki znacznik, dzięki czemu zawsze będziemy w stanie pobrać pliki w takim stanie w jakim znajdowały się w czasie nadawania znacznika (gdybysmy tego nie zrobili, trzeba bylo każdy plik pobierać oddzielnie - sprawdzając która wersja była wtedy w użyciu).
Jeżeli następnie udostępnimy Klientom oprogramowanie bazujące na plikach oznaczonych odpowiednim znacznikiem, będziemy w stanie zidentyfikować jaką wersję plików posiadają nasi Klienci i w przypadku potrzeby naniesienia poprawek - wygenerowanie odpowiednich patchy.
Kolejną zaletą systemów kontroli wersji jest swego rodzaju backup. Jeżeli wszystkie pliki potrzebne do funkcjonowania oprogramowania są umieszczone w repozytorium to nawet w przypadku ich usunięcia czy modyfikacji jesteśmy w stanie powrócić do poprzedniej wersji. Oczywiście nie zabezpiecza nas to przez uszkodzeniem czy też utratą samego repozytorium.
To są główne funkcje, realizowane przez większość oprogramowania do kontroli wersji - zdarzają się narzędzia bardzo rozbudowane i bardzo potężne (np.: bitkeeper używany obecnie do rozwoju jądra Linuksa).
Czy system kontroli wersji jest dla każdego ?
Pisząc pierwszy projekt w zespole spotkałem się z opisanymi powyżej problemami. Utrata zmian, utrata plików, brak możliwości cofnięcia się do punktu w przeszłości - szukanie źródła błędów na oślep… Większość tych problemów znikneła od momentu wdrożenia kontroli wersji.
Odpowiadając zatem na postawione pytanie: Moim zdaniem warto. Jeżeli nawet jesteś jedynym programistą w projekcie moim zdaniem powinieneś używać systemu kontroli wersji. Natomiast jeżeli jest Was kilku to już na pewno powinniście ( o ile jeszcze tego nie robicie) zacząć z niego korzystać.
Osobiście używam systemu Subversion. Można także użyć klasycznego CVS ale posiada on kilka ograniczeń i jest stopniowo wypierany przez pierwszy z wymienionych programów. Oczywiście może się okazać iż dla Ciebie inne narzędzia będą lepsze bądź bardziej przydatne.