CVS

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.

Notatka

Strona domowa CVS to www.cvshome.org

Powiemy pokrótce i w dużym uproszczeniu. CVS jest systemem kontroli wersji. Dzięki niemu każdy deweloper biorący udział w projekcie może wysłać na serwer plik, który przed chwilą poprawił. CVS notuje datę wysłania oraz nazwę użytkownika. Później, inni programiści mogą ściągnąć poprawiony plik z serwera - wiedzą dzięki temu kto i kiedy oraz co zmienił w danym pliku. Znacznie ułatwia to prace: poszczególne wersje danego pliku są stale przechowywane na serwerze, w prosty sposób można sprawdzić jakie zmiany zostały dokonywane w poszczególnych wersjach.

Notatka

CVS via WWW projektu Coyote dostępny jest pod adresem http://cvs.4programmers.net

Obsługa CVS

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 login	
	
Jeż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.

WAŻNE

Polecenie checkout wykonujemy tylko raz, gdy chcemy pobrać całe repozytorium na dysk. Jeżeli chcemy sprawdzić, czy na serwerze znajdują się jakieś poprawki wykonujemy polecenie cvs update, które uaktualni pliki zmienione przez innych programistów.

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:
  • coyote-0-9-1-pre2
  • coyote-0-9-1-rc1
  • coyote-0-9-1-rc2

Gałęzie CVS

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:

  • coyote-0-9-1
Należy przy tym wyjaśnić główne pojęcia jakimi będziemy się posługiwać:
  • gałąź - ang. branch; odrębna linia produkcyjna aplikacji
  • trunk - ang. trzon; główna linia produkcyjna
  • scalanie - ang. merge; włączenie gałęzi do głównej linii produkcyjnej
Obecną strukturę gałęzi na serwerze CVS prezentuje poniższy rynek:
                      ---------- 0.9.1 ---------               ----------- 0.9.2 ------- 
                     /                                        / 
                    /                                        /
 0.9.1-rc1 ----- 0.9.1-rc2 ------- 0.9.2 ------------------ /----------- 1.0 --------
                                                  |
				               0.9.2-rc1		   
	

Rysunek 2.1. Prezentacja gałęzi na serwerze CVS

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).

Obsługa gałęzi w WinCVS

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ć?
  1. z menu Create wybieramy Checkout module
  2. w polu Enter the module and name... wpisujemy coyote
  3. w polu Local folder... wpisujemy C:\usr\src
  4. na zakladce General w polu CVSROOT wpisujemy: anoncvs@cvs.4programmers.net:/usr/cvs
  5. na zakladce Checkout options w polu By revision/tag... podajemy coyote-0-9-1-rc2
  6. naciskamy OK, pliki zostają pobrane.

Notatka

Jeżeli posiadasz konto na CVS, w miejsce anoncv wpisz swój login. Dzięki temu będziesz mógł na serwerze CVS dokonywać także zmian.

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.

WAŻNE

W wersji stabilnej dokonujemy jedynie poprawek błędów oraz małych zmian. Takie poprawki można od razu umieścić na serwerze FTP (jeżeli masz do niego dostęp) 4programmers.net lub przekazać administratorowi lub osobie która ma dostęp do serwera FTP i może wrzucić poprawkę. Jeżeli chcesz dodać nową funkcję do systemu, wprowadzaj ją do wersji rozwojowej. Jeżeli nie jesteś pewien, lepiej zawsze spytać :-)
Scalanie

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).

Notatka

Ta sekcja wymaga aktualizacji. Jeżeli możesz rozbuduj ją o stosowny opis