CVS

CVS służy do przechowywania i śledzenia zmian w całym zestawie plików, zwanym zwykle repozytorium. W prosty sposób umożliwa synchronizację pracy wielu ludzi naraz. Jak z tego skorzystac? Potrzebny jest klient cvs. W Linuxie, BSD i ogólnie wszystkich systemach unixopodobnych zwykle polecenie cvs jest domyślnie zainstalowane. W windowsach mozna ściągnąć sobie fure różnych klientów. Do popularnych należą WinCVS i cvs.exe.

cvs.exe - instrukcja obsługi

cvs.exe jest przeniesionym na platformę Windows klientem z systemów uniksowych. Jego główną zaletą jest szybkość działania i zgodność z istniejącymi rozwiązaniami, tzn. jego użycie jest takie samo, jak np. w Linuxie. Poniżej został przedstawiony opis jego zastosowania.

Pobranie projektu

Konieczne jest wydanie następujących poleceń (zamiast login użyj swojego loginu, a zamiast projekt nazwę projektu). Zamiast eksportować zmienną (set CVSROOT) można za każdym razem pisać cvs -d:pserver:login@ksirouter.eti.pg.gda.pl:/var/cvs polecenie, co jednak nie jest najlepszym pomysłem. W systemach uniksowych zamiast set CVSROOT=... należy użyć komendy export CVSROOT=... Zamiast za każdym razem ustawiać zmienną, w systemach Windows można zrobić to na stałe. W tym celu należy we "Właściwościach komputera" (prawy przycisk na ikonie Mój Komputer) wybrać ostatnią zakładkę o nazwie "Zaawansowane", następnie kliknąć "Zmienne środowiskowe" i tam dodaj zmienną. cvs do działania tworzy sobie plik .cvspass, który chce umieścić w katalogu domowym. W systemach Windows problem polega na tym, że nie ma czegoś takiego, jak katalog domowy. Zwykle jako domyślny wybierany jest katalog C:\documents and settings\nazwa_Usera\. Niestety, ten wybór jest niefortunny, ponieważ zawiera spacje, co uniemożliwia poprawne działania programu cvs. Rozwiązaniem problemu jest ustawienie zmiennej HOME, która pokaże, gdzie przechowywać plik .cvspass. (Tips: wiele innych programów przeniesionych ze środowiska uniksowego będzie korzystało z tej zmiennej. Sztandarowym przykładem jest o czywiście potężny edytor GNU Emacs.)

set HOME=c:/
set CVSROOT=:pserver:login@ksirouter.eti.pg.gda.pl:/var/cvs
cvs login
cvs co projekt

Update projektu

Co jakiś czas należy ściągnać do siebie poprawki wprowadzone przez innych uczestników projektu. Można to zrobić poleceniem:

cvs update -d

Polecenie należy wydać w katalogu, gdzie przechowywane jest repozytorium. Zwróć uwagę na to, że tym razem nie jest już konieczne ustawianie zmiennej CVSROOT. Dzieje się tak dlatego, że w każdym katalogu, który zawiera pliki z repozytorium, został utworzony podkatalog o nazwie CVS, który zawier "namiary" na repozytorium.

Wysyłanie zmian

Po wykonaniu zmian, należy wysłać je na serwer. Te operacja często zwana jest checkinem. Wykonuje się ją poleceniem:

cvs commit

aby wysłać wszystkie zmiany lub poniższą komendę aby wysłać zmiany w pliku plik1.txt

cvs commit plik1.txt

Dodawanie pliku

Pliki i katalogi można dodawać normalnie albo w trybie binarnym. Tryb binarny jest przydatny do umieszczania w repozytorium plików nietekstowych. Do wymuszenia trybu binarnego używa się opcji -kb. Aby dodac plik base.c i info.jpg (w trybie biarnym) należy wydać polecenie:

cvs add base.c
cvs add -kb dokument.pdf

Konflikty

Wyobraźmy sobie taką sytuację. W repozytorium jest przechowywany plik, który składa się z 3 sekcji. Dwie osoby ściągają go do siebie. Następnie pierwsza osoba edytuje sekcję 1 i 2, natomiast druga sekcje 2 i 3. Załóżmy, że w sekcji drugiej pierwsza osoba napisała w pliku, że "Powinniśmy iść w prawo.", natomiast druga, że "Musimy iść w lewo.". Pierwsza osoba wysyła zmiany. Teraz zmiany próbuje wysłać osoba druga (cvs commit plik.txt). Może w takiej sytuacji spotkać się komunikatem:

cvs server: Up-to-date check failed for `plik.txt'
cvs [server aborted]: correct above errors first!
cvs commit: saving log message in /tmp/cvsHrY2SA

CVS informuje, że nie jest możliwe wysłanie zmian, bo posiadamy lokalnie nieaktualną kopię. Należy najpierw pobrać zmiany (cvs update plik.txt). Zauważmy, że zmiany te muszą zostać połączone ze zmianami, które już zostały dokonane. W prezentowanym przykładzie pierwsza sekcja zostanie uaktualniona bez problemów. Kłopoty mogą pojawić się w sekcji 2. Efektem może być informacja o tzw. konflikcie.

retrieving revision 1.1
retrieving revision 1.10
Merging differences between 1.1 and 1.10 into plik.tzt
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in plik.txt
C plik.txt

Oczywiście nie ma możliwości automatycznego uwzględnienia obu zmian. Zatem użykownik znadzie w pliku następujący fragment:

<<<<<<< plik.txt
 Powinniśmy iść w prawo.
=======
 Musimy iść w lewo.
>>>>>>> 1.10

Musi teraz ręcznie zdecydować, która wersja jest słuszna. Może przerobić to naprzykład w ten sposób:

 Powinniśmy, a nawet musimy iść prosto.

W ten sposób użytkownik rozwiązał konflikt. Może teraz bez problemów wysłać swoje zmiany komendą cvs commit plik.txt

WinCVS

Drugim z prezentowanych tu klientów CVS jest WinCVS. Jest to wersja przygotowana z myślą o zatwardziałych użytkownikach systemu Windows, którzy czują nieuzasadniony lęk na widok konsol tekstowych. W związku z tym, że zasada działania jest identyczna, jak w przypadku klienta tekstowego, opis WinCVS jest nieco skrócony. Warto też wiedzieć o tym, że informacje WinCVS o brakującym języku TCL można spokojnie zignorować, ponieważ nie jest on potrzebny nawet do zaawansowanych czynności.

Ustawienia wstępne

Jako pierwsze należy ustawić zmienna CVSROOT. Robimy to w okienku preferences. Oczywiście zamiast thomson@klub.com.pl w projekcie Wireless City Gdańsk należy użyć swoj_login@ksirouter.eti.pg.gda.pl. Proszę zwrócić uwagę na dwukropek po nazwie hosta.

Logowanie

Kolejnym krokiem jest zalogowanie się. Służy do tego opcja "Login..."

Po nawiązaniu kontaktu z serwerem zostaniemy poproszeni o hasło. Tutaj należy posłużyć sie swoim hasłem.

Rezultat logowania, podobnie jak rezultat wszystkich innych czynności, wyświetlany jest w dolnej części okna. Jak słusznie można się domysleć, WinCVS jest tylko graficzną nakładką na tekstową wersję klienta cvs.

Pobranie projektu

Po zalogowaniu się można przystąpić do pobierania projektu, czyli checkoutu. Służy do tego opcja "Checkout module..." z menu "Create".

Następnie należy podać nazwę projektu. W przypadku projektu Wireless City Gdańsk zamiast dibbler będzie to wgdansk. Należy też podać, gdzie mają być umieszczone pliki na dysku lokalnym. Dla podanych tu przykładowych danych pliki wylądują w katalogu c:\devel\dibbler.

O ile wszystko zostało wykonane poprawnie, w okienku informacyjnym zostaną pokazane informacje o pobieranych plikach.

A tak wygląda poprawnie zakończone pobieranie całego repozytorium.

Wysyłanie zmian

W tej chwili mamy już lokalną kopię plików i można edytować poszczególne pliki. W prezentowanym tu przykładzie zmianom uległ plik AddrMgr.h. W przypadku, jeżeli w spisie nie byłyby pokazane żadne pliki, należy wyłączyć wszystkie czerwone ikonki.

Należy zaznaczyć konkretne pliki (lub cały katalog w drzewie po lewej) i wydać polecenie "commit selection..." Zostaniemy poproszeni o krótki komentarz wprowadzonych zmian. Dlatego lepiej commitować pliki pojedynczo, a nie hurtem.

Rezultat wysłania pliku powinien wyglądać następująco:

Tak w skrócie wygląda obsługa programu WinCVS. Warto zaznaczyć, że ze względu na otwartość protokołu CVS, dostępnych jest mnóstwo różnych klientów, z którch można korzystać. To jednak z wielu zalet tego rozwiązania - możliwość wyboru.

Tomasz Mrugalski, 2004-08-04