Ważnym czynnikiem pracy grupowej jest odpowiedni system odpowiadający za przechowywanie plików źródłowych projektu. Owszem, możnaby przechowywać pliki na zwykłym serwerze FTP lub HTTP, ale znacznie utrudniłoby to pracę. Trudno byłoby nam się domyśleć, kto ostatnio pracował nad plikiem, co w nim zmienił. W przypadku projektów grupowych (tak jak Coyote) szybko doszłoby do bałaganu.
Dlatego na serwerze http://cvs.4programmers.net zainstalowany jest system kontroli wersji o nazwie CVS. Nie będziemy tutaj opisywać zasad działania samego programu CVS; tego możesz dowiedzieć się z licznych manuali, podręczników i kursów.
Strona domowa CVS to www.cvshome.org
CVS via WWW projektu Coyote dostępny jest pod adresem http://cvs.4programmers.net
Standardowo CVS jest programem uruchamianym z linii poleceń w konsoli. My polecamy edytory, nakładki graficzne dzięki czemu obsługa CVS jest jeszcze prostsza. Jednym z takich aplikacji pod system Windows jest WinCVS.
Zakładamy, że umiesz posługiwać się CVS w stopniu conajmniej podstawowym. Aby korzystać z CVS należy się najpierw zalogować. Zalogować można się w trybie anonimowym, lecz wówczas Twoje uprawnienia ograniczają się jedynie do pobierania źródeł na dysk. NIE możesz wysyłać na serwer poprawek. Polecenie, dzięki któremu można zalogować się na serwer wygląda tak:
cvs -d:pserver:anoncvs@cvs.4programmers.net:/usr/cvs loginJeżeli jesteś osobą, która posiada konto na naszym serwerze CVS, w miejsce anoncvs należy wpisać swój login. W naszym repozytorium CVS znajdują się dwa katalogi: roadrunner oraz coyote. Jeżeli chcesz pobrać na swój dysk oba foldery, musisz wykonać następujące polecenie:
cvs checkout .W tym momencie kody źródłowe zostaną ściągnięte na Twój dysk. Jeżeli interesuje Cię jedynie projekt Coyote, to polecenie ściągające kody jedynie tego projektu, wygląda tak:
cvs checkout coyote
W tym momencie na Twój dysk zostaną pobrane aktualne, najnowsze wersje plików. Oczywiście jeżeli mówimy o wersjach
najnowszych, to naturalną rzeczą będzie, gdy będą one posiadały błędy. Aby tego uniknąć, możesz ściągnąć ostatnie
wersje źródeł, które zostały w jakimś stopniu sprawdzone i nie powinny posiadać błędów. O tym możesz przeczytać w sekcji
Tagi CVS.
Wyobraź sobie, że do pliku o nazwie functions.php dodałeś funkcję validate_url() i tym samym w module zawarłeś wszystkie funkcje, które chciałeś zawrzeć. Możesz teraz jakoś specjalnie odznaczyc ten plik nadając im tzw. tag. Inna sytuacja: uznaliśmy (jako zespół programistów), że obecne kody źródłowe na CVS są dość stabilne, aby wydać wersje 1.1 projektu Coyote. Teraz na każdy plik w repozytorium CVS można nałożyć tag - przykładowo - Coyote-1-1. Ok, mamy wersje 1.1. możemy przejść do dodawania nowych funkcji w projekcie. Jeżeli jednak użytkownik będzie chciał ściągnąć wersje stabilną 1.1 może posłużyć się tagiem wydając takie polecenie:
cvs checkout -r Coyote-1-1 coyote
Takie polecenie ściągnie na dysk pliki jedynie w wersji stabilnej (czyli takie na które nałożony jest tag Coyote-1-1.
System Coyote posiada następujące tagi: Wyobraź sobie sytuację, w której wydano wersje projektu, opatrzoną numerkiem 0.9.1-rc2. Na pliki tej wersji nałożono tagi; można dalej rozwijać projekt. Wyobraź sobie, że chcemy do systemu wprowadzić znaczące poprawki, których wdrożenie może potrwać i obejmują one kilka plików. W miare postępu prac, efekty naszych działań możemy umieszczać na CVS. Wyobraźmy teraz sobie, co się stanie jeżeli w edytowanym przez nas pliku (w którym wprowadzone są znaczące zmiany, jeszcze nie przetestowane) znaleziono poważny błąd. Błąd należy naprawić, ale ponieważ w pliku namieszaliśmy już wystarczająco dużo, trzeba wycofać wszystkie wprowadzone przez nas zmiany, poprawić błąd i poprawiony plik wysłać na FTP.
Na serwerze CVS oprócz głównego trzonu istnieją następujące gałęzie:
---------- 0.9.1 --------- ----------- 0.9.2 -------
/ /
/ /
0.9.1-rc1 ----- 0.9.1-rc2 ------- 0.9.2 ------------------ /----------- 1.0 --------
|
0.9.2-rc1
Na tym przykładzie możesz zaobserwować, iż od wersji 0.9.1-rc2 nastąpił podział projektu
na dwie linie produkcyjne: główną (trunk) oraz gałąź 0.9.1 (branch). Obie wersje kodu źródłowego mogą być
rozwijane równocześnie. Programiści, którzy dotychczas rozwijają projekt mogą nadal pracować nad wersją
stabilną. Natomiast programiści wprowadzający nowe funkcje do systemu mogą pracować nad wersją rozwojową
(w tym wypadku, główna linia produkcyjna).
Jeżeli zespół programistów uzna, iż w gałęzi rozwojowej zrealizowano wszystkie punkty z TODO można wydać wersję 0.9.2-pre1 i wysłać pliki na serwer FTP serwisu 4programmers.net, aby sprawdzić jak projekt sprawuje się w "boju". Jeżeli wersja będzie na tyle stabilna żeby wydać wersję rc1, zakładamy tag i zamrażamy rozszerzanie funkcjonalności. Od tej pory tworzymy nową gałąź stabilną Coyote-0.9.2 i nie wprowadzamy już w tej wersji nowych funkcji - jedynie poprawiamy błędy, tak, aby zminimalizować ilość błędów. Jednocześnie w tym momencie zaczynają się pracę nad nową wersją aplikacji - 1.0 (tak jak to przedstawiono na rysunku powyżej).
Pytanie: jak zorganizować sobie pracę nad danymi gałęziami? Opisze to na swoim przykładzie. Przede wszystkim należy przygotować sobie katalog roboczy, do którego sciągnięte zostaną pliki projektu. W moim wypadku wyglada to tak: na dysku C: posiadam katalog usr w którym znajduje się:
- Apache (serwer HTTP)
- php4
- mysql
- src (katalog główny serwera)
W katalogu src posiadam foldery:
- coyote (plik źrodłowe projektu Coyote)
- roadrunner (pliki źródłowe projektu RoadRunne)
W Apacheu mam ustawione kilka wirtualnych hostów, ale aktualnie nie ma to znaczenia. Powiem tyle, że
host 127.0.0.1 wskazuje na katalog coyote, a 127.0.0.3 wskazuje na katalog roadrunner. Czyli po
wpisaniu w przeglądarce http://127.0.0.1 wyswietla mi się zawartość katalogu coyote. Tak więc pliki z
CVS można ściągnąć do katalogu coyote i tym samym pod hostem 127.0.0.1 będzie nam
działał Coyote. Jak to zrobić?
Ja mam jednak nieco inaczej. Otóż pliki z wersji 0.9.1-rc2 znajdują się u mnie w katalogu C:\usr\src\coyote\stable tak więc jeżeli chcę pracować na wersji stabilnej wchodzę poprzez adres http://127.0.0.1/stable. W folderze coyote mam także katalog dev w którym znajdują się wersje rozwojowe (dostęp do nich uzyskam poprzez adres http://127.0.0.1/dev/).
Jak to zrobiłem? Pobrałem źródła do katalogu C:\usr\src\coyote, co spowodowało iż CVS utworzył kolejny folder coyote tak więc zródła byłyby pod adresem C:\usr\src\coyote\coyote. Nazwę folderu coyote zmieniłem na stable i teraz mam kody pod katalogiem C:\usr\src\coyote\stable.
Wyobraź sobie, że w wersji rozwojowej poprawiasz błąd, który istnieje także w tym samym pliku, w wersji stabilnej. Tym samym musisz poprawić ten sam błąd w dwóch wersjach. Jest to troche uciążliwe stąd opcja merge która umożliwia właczenie poprawek z pliku z gałęzi do pliku z człona (trunk).