2004 03 CVS – system zarządzania wersjami [Programowanie]


dla programistów
Zobacz w:
CVS  system zarządzania
wersjami
Piotr Machej
programowanie Open Source jest często roz-
wijane przez wielu różnych programistów.
Każdy z nich może pracować nad innym
Ofragmentem kodu. Utrzymanie porządku
staje się w takim przypadku bardzo trudne. W celu ułatwie-
nia pracy programistom powstał CVS (Concurrent Versions
System), czyli system zarządzania wersjami. Przydaje się on
jednak nie tylko przy tworzeniu oprogramowania  świet-
nie nadaje się również do rozwijania serwisów WWW czy
dokumentacji. Można go zastosować właściwie wszędzie,
gdzie tylko występują cyfrowe dane.
Jak to działa?
Wykorzystując CVS mamy możliwość zapoznania się
z historią zmian w projekcie. Oprócz tego, możemy
Rysunek 1. Wielu webmasterów wykorzystuje CVS w pracach
w każdej chwili uzyskać informacje o różnicach pomiędzy
nad swoimi witrynami
poszczególnymi wersjami plików. Co więcej, w dowolnej
chwili możemy odtworzyć projekt w takiej postaci, w jakiej W dalszych etapach pracy nie będzie musiał już pobierać
znajdował się jakiś czas temu. Możemy nawet rozwijać pro- całości projektu, a jedynie będzie uaktualniał (ang. update)
jekt równocześnie w kilku kierunkach (tzw. rozgałęzieniach swoją wersję. Jeśli programista dokonał zmian w swojej
 ang. branches), co pozwala nam na eksperymentowanie kopii roboczej, może je przesłać (ang. commit) do repozy-
bez naruszania głównej wersji projektu. Jeśli dodać do tego torium. Może zdarzyć się, że wcześniej jakiś inny progra-
możliwość równoczesnego dostępu wielu programistów, mista wysłał już swoje poprawki. O ile nie kolidują one ze
system CVS okazuje się być bardzo przydatny. sobą, to nie będzie problemu. Jeśli jednak zmieniany był
Najważniejszym pojęciem dotyczącym CVS jest repo- ten sam fragment kodu, to podczas przesyłania będziemy
zytorium (ang. repository), czyli obszar na dysku kom- mieli możliwość zdecydowania, które poprawki i w jakiej
putera (lokalnego lub zdalnego), w którym przechowy- kolejności powinny być wprowadzone.
wane są wszystkie informacje na temat poszczególnych Warto wiedzieć, że CVS może działać nie tylko w trybie
projektów. Każdemu projektowi możemy przyporządko- sieciowym, ale również i lokalnym. Jeśli więc sami opraco-
wać osobny moduł, czyli po prostu podkatalog w repo- wujemy jakiś projekt, to z powodzeniem możemy wykorzy-
zytorium. stać CVS tworząc repozytorium na dysku własnego kom-
Wiemy już, że mamy jedno repozytorium z projek- putera.
tem, oraz wiele osób, które mogą z nim pracować. Powsta-
je pytanie, jak to działa. Otóż każdy z programistów (przyj- Przykład użycia
mijmy, że nasz projekt jest programem) może pobrać (ang. Obudziłem się z potwornym bólem głowy. Jeden rzut
checkout) z repozytorium aktualną wersję projektu. Posia- okiem na budzik uświadomił mi, że jest już po południu.
da wtedy u siebie kopię roboczą, z którą może pracować. Szybko wstałem i usiadłem przy komputerze  na jutro
muszę mieć skończony program na zaliczenie, a tu jesz-
cze tyle do napisania. Z zadowoleniem stwierdziłem, że
O autorze:
przed zaśnięciem wysłałem wszystkie moje zmiany do
Autor zakończył studia zaoczne na V roku Informatyki na
zdalnego repozytorium CVS. Sprawdziłem historię zmian
Politechnice Opolskiej. Z Linuksem (i ogólnie systemami
w plikach i ucieszyłem się jeszcze bardziej  koledzy z
uniksowymi) ma styczność od wielu lat. Obecnie admi-
grupy dopisali już kilkaset istotnych linii kodu. Ściągną-
nistruje siecią blokową złożoną z dziesięciu komputerów.
Kontakt z autorem: autorzy@linux.com.pl. łem na dysk nowsze wersje plików i zabrałem się dalej
do pracy.
58 marzec 2004
cvs
Na drugiej konsoli włączyłem pobieranie z CVS uaktual-
nienia mojego ulubionego MPlayera, a gdy już wylądowało
na moim dysku, uruchomiłem kompilację.
Tymczasem przyszedł mi do głowy nowy pomysł doty-
czący programu na zaliczenie. Stworzyłem osobną gałąz
projektu, aby nie przeszkadzać kolegom, po czym zacząłem
eksperymenty z kodem. Nawet nie zauważyłem, jak nad-
szedł wieczór. Pomysł okazał się dobry, więc za zgodą reszty
grupy włączyliśmy moje eksperymentalne zmiany do głów-
nego projektu, który w tym czasie znów się rozwinął. Jesz-
cze tylko ostatnie szlify i jutro będziemy mieli piątki z zali-
czenia. Nie da się ukryć, że CVS ułatwia pracę grupową.
Instalacja
Pakiet cvs znajduje się praktycznie w każdej z popularnych
Rysunek 2. Instrukcja pobierania programu MPlayer z CVS jest
dystrybucji i w większości przypadków będzie umieszczo-
umieszczona na witrynie domowej projektu
ny na dysku podczas standardowej instalacji. W przypad-
ku Auroksa 9.2 pakiet cvs-1.11.2-10.i386.rpm znajduje się
na drugiej płycie CD z dystrybucją. Jeśli przypadkiem CVS /cvsroot/mplayer login
nie jest zainstalowany, możemy doinstalować go samodziel-
nie poleceniem rpm -Uvh cvs-1.11.2-10.i386.rpm wydanym Dzięki temu powinniśmy zalogować się anonimowo do
w katalogu /RedHat/RPMS/ na drugiej płycie CD. W innych zdalnego repozytorium CVS. Po pytaniu o hasło należy po
dystrybucjach należy wykorzystać narzędzia właściwe dla prostu wcisnąć klawisz [Enter]. Następnie wydajemy właści-
konkretnej dystrybucji. we polecenie pobierające aktualne pliki zródłowe:
Niektórych Czytelników może nie zadowolić aktu-
S
alność pakietów dostarczanych z dystrybucją. W chwili cvs -z3 -d:pserver:anonymous@mplayerhq.hu:
pisania niniejszego artykułu dostępna już była stabilna /cvsroot/mplayer co -P main
wersja 1.11.11. Jeśli chcemy zainstalować najaktualniejszą
wersję, warto wejść na domową witrynę projektu (http:// Dzięki temu w podkatalogu main/ bieżącego katalogu
www.cvshome.org/ ) i z sekcji CVS Downloads pobrać zostanie umieszczona najbardziej aktualna wersja zródeł
najnowszy plik. Po pobraniu możemy rozpakować go programu. Dokładne znaczenie poszczególnych opcji zosta-
poleceniem tar xjvf cvs-1.11.11.tar.bz2 (nazwa pliku nie omówione w dalszej części artykułu.
dotyczy wersji aktualnej w chwili pisania artykułu).
Przechodzimy do utworzonego podkatalogu polece- Wykorzystujemy GCvs
niem cd cvs-1.11.11, po czym zapoznajemy się z doku- Jeśli wolimy korzystać z interfejsu graficznego, to musimy
mentacją (przede wszystkim z plikami INSTALL oraz wykonać nieco inne kroki. W przypadku programu GCvs
README). Kompilacja i instalacja nie powinna sprawić (opisanego dokładniej w rozdziale Interfejsy graficzne)
problemu  na ogół wystarczy standardowy ciąg pole- zaczynamy od wybrania opcji Admin  > Preferences.
ceń: ./configure, make i make install (to ostatnie wydane W otwartym okienku w zakładce General wpisujemy
z uprawnieniami użytkownika root). w pole CVSROOT linię:
Pobieramy dane ze zdalnego serwera anonymous@mplayerhq.hu:/cvsroot/mplayer
CVS
Większość użytkowników Linuksa najczęściej wykorzystu- Następnie w sekcji Authentication zaznaczamy pole Pas-
je CVS do pobierania najnowszych wersji oprogramowania. sword ("pserver"). Wartości te odpowiadają opcji -d:pse-
Jeśli tylko twórcy konkretnego programu przewidzieli moż- rver:anonymous@ mplayerhq.hu:/cvsroot/mplayer z poleceń
liwość pobrania plików z repozytorium CVS, to opis powi- wpisywanych w konsoli i wskazują na lokalizację repozyto-
nien znajdować się na stronie domowej projektu. rium, z którego będziemy pobierać pliki. W zakładce Glo-
Przykładem niech będzie popularny program MPlayer. bals warto zaznaczyć opcję Use TCP/IP compression  jeśli
Po wejściu na jego witrynę (http://www.mplayerhq.hu/ ustawimy ją na wartość 3, to będzie dokładnie odpowiadać
homepage/ ) możemy przejść do sekcji Downloads. Tam, na opcji -z3 z podanego wcześniej polecenia. Sprawia ona, że
samym dole strony (Rysunek 2), znajdziemy sekcję oznaczo- dane podczas przesyłania są kompresowane algorytmem
ną napisem CVS. Postępując zgodnie z umieszczonymi tam gzip (dzięki temu powinny szybciej znalezć się na naszym
informacjami, powinniśmy wydać w konsoli polecenie: dysku). Ostatnia z użytych opcji (-P) jest domyślnie usta-
wiona w zakładce Globals  Prune (remove) empty directo-
S
cvs -d:pserver:anonymous@mplayerhq.hu: ries. Sprawia ona, że po pobraniu plików z repozytorium,
www.linux.com.pl 59
dla programistów
kasowane są pobrane puste katalogi (oczywiście tylko na można pobrać plik gcvs-1.0-1.i386.rpm (i zainstalować
naszym dysku  w repozytorium pozostają bez zmian). poleceniem rpm -Uvh gcvs-1.0-1.i386.rpm) lub wybrać
Zmienione opcje zatwierdzamy przyciskiem OK. pakiet zródłowy gcvs-1.0-1.src.rpm (instalujemy go pole-
Teraz możemy zalogować sie do repozytorium. Służy do ceniami: rpmbuild --rebuild gcvs-1.0-1.src.rpm, rpm -Uvh
tego opcja Admin  > Login. Również w tym przypadku na /usr/src/redhat/RPMS/i386/gcvs-1.0-1.i386.rpm).
pytanie o hasło po prostu wciskamy przycisk OK. Po chwili Po instalacji możemy go uruchomić poleceniem gcvs.
w oknie komunikatów, poniżej linii cvs -z3 login, powi- Okno programu podzielone jest na trzy duże okna. Po
nien pojawić się napis *****CVS exited normally with code lewej stronie mamy listę katalogów. Możemy w niej wybrać
0***** Skoro zalogowaliśmy się bez problemu, możemy katalog, w którym akurat chcemy pracować. W górnym
.
pobrać pliki zródłowe MPlayera. W tym celu wybieramy oknie znajduje się spis plików wraz z informacjami na
opcję Create  > Checkout module. W otwartym okienku temat ich aktualności. Wreszcie w trzecim, dolnym oknie,
przechodzimy do katalogu, w którym chcemy zapisać pliki pojawiają się komunikaty drukowane przez CVS.
i wciskamy OK. Pozostaje nam w kolejnym okienku wpisać Program jest przyjemny i wygodny w użyciu, a dzięki
nazwę modułu do pobrania (w polu Enter the module wypisywaniu w oknie komunikatów postaci polecenia,
name...). W naszym przypadku jest to main. Wciskamy świetnie nadaje się do nauki CVS dla początkujących.
jeszcze raz przycisk OK i czekamy, aż pliki znajdą się na W niniejszym artykule postaram się wskazać, jak można
naszym dysku. w GCvs wykonać wszystkie opisywane czynności.
Jak widać, do zwykłego pobrania plików wygodniej jest
po prostu wpisać dwa polecenia w konsoli, zamiast klikać Wykorzystujemy CVS lokalnie
i klikać... Na dłuższą metę interfejs graficzny okazuje się Jak już wspomnieliśmy, CVS pozwala na pracę w trybie
jednak całkiem przydatny. lokalnym. Dzięki temu możemy stworzyć repozytorium na
Rysunek 3. Po pobraniu projektu do katalogu robocze- dysku naszego komputera i korzystać z niego bez potrzeby
go mamy dostęp do informacji o wersjach poszczególnych łączenia się z siecią komputerową.
plików
Tworzymy repozytorium
Interfejsy graficzne Tworzenie repozytorium zaczynamy od stworzenia katalo-
Minęły już chyba bezpowrotnie czasy, gdy słowa Unix gu, w którym umieszczane będą wszystkie pliki. Może on
i Linux kojarzyły się z czarnym ekranem wypełnionym znajdować się w dowolnym, wybranym przez nas miejscu.
białymi literkami. W dobie rozbudowanych środowisk Należy jednak pamiętać, abyśmy mieli do niego prawa
graficznych coraz trudniej o program, który nie posiadał- odczytu i zapisu. No i oczywiście powinniśmy dysponować
by interfejsu graficznego. CVS nie jest wyjątkiem. Posiada odpowiednią ilością wolnego miejsca na dysku. Przykłado-
graficzne nakładki działające nie tylko w systemach unikso- wo, niech będzie to katalog ~/repozytorium/  w naszym
wych, ale również w Windows czy MacOS. katalogu domowym na pewno możemy zapisywać pliki
Adresy witryn niektórych interfejsów graficznych i nie potrzebujemy do tego uprawnień użytkownika root:
umieszczone są na końcu artykułu, w ramce W Sieci.
Oprócz samych interfejsów graficznych (również tych mkdir ~/repozytorium
dostępnych z poziomu WWW), znajdują się tam też odno-
śniki do takich projektów, jak CVSMonitor (pozwala śledzić Teraz musimy zainicjować nasze repozytorium. Służy do
aktywność w projekcie, wprowadzane zmiany itp.) czy tego następujące polecenie:
CVSspam (program powiadamiający e-mailem o zmianach
wprowadzonych w repozytorium). Poniżej pozwolę sobie cvs -d ~/repozytorium init
krótko opisać jeden wybrany interfejs graficzny.
Powyższe czynności wykonujemy tylko raz. Od tego
GCvs momentu możemy już korzystać z utworzonego katalogu.
GCvs jest bardzo rozbudowanym i wygodnym klientem Warto zwrócić uwagę na opcję -d katalog. Wskazuje
CVS. Jest to odmiana programu WinCvs, przeznaczone- ona lokalizację repozytorium, do którego odwołujemy
go dla systemu Windows. Istnieje również odmiana tego się poleceniem cvs. Każdorazowe jej wpisywanie może
programu dla platformy Mac OS X  MacCvsX. Niezależnie być uciążliwe, dlatego lepiej umieścić nazwę właściwego
więc, z której platformy będziemy korzystać, mamy moż- katalogu w zmiennej środowiskowej CVSROOT. W naszym
liwość używania programów o praktycznie identycznych przykładzie dokonamy tego poleceniami:
interfejsach.
Program GCvs możemy pobrać z witryny domowej CVSROOT=~/repozytorium
projektu (http://cvsgui.sourceforge.net/ ), z sekcji Download. export CVSROOT
Dostępne są zarówno zródła, jak i pakiety RPM oraz DEB.
Zależnie od posiadanej przez nas dystrybucji, pobieramy Możemy te linie dopisać do któregoś z plików wykonywa-
odpowiedni plik i instalujemy. W przypadku Auroksa nych w momencie logowania, dzięki czemu nawet po prze-
60 marzec 2004
cvs
logowaniu się zmienna środowiskowa CVSROOT będzie
Ciekawe opcje wywołania CVS:
ustawiona. W Auroksie takim plikiem jest ~/.bash_profile.
Od tej chwili możemy pomijać opcję -d katalog i stoso-
" -d katalog_główny_CVS  pozwala pracować na innym
wać skróconą wersję poleceń (np. cvs init).
repozytorium niż zdefiniowane w zmiennej środowiskowej
W przypadku programu GCvs pole CVSROOT ustawia-
CVSROOT;
my na ~/repozytorium, natomiast opcję Authentication na
" -e edytor  wskazuje nazwę edytora, który będzie wyko-
wartość Local.
rzystywany do wpisywania informacji do rejestru zmian
Jeśli chcemy, aby z repozytorium w trybie lokalnym
(przydaje się, jeśli nie chcemy korzystać z domyślnego);
mogli korzystać inni użytkownicy, warto przygotować je
" -n  nie wykonuje żadnych operacji zmieniających repo-
tak, jak opisano w rozdziale Tworzymy własny serwer CVS. zytorium lub kopię roboczą, a jedynie wypisuje komuni-
katy;
Szczególnie należy zwrócić uwagę na rozdział Nieupoważ-
" -z liczba  ustawia kompresję na poziom określony war-
nionym wstęp wzbroniony.
tością liczba.
Umieszczamy projekt w repozytorium
Jeśli rozpoczęliśmy już pracę z naszym projektem, możemy W naszym poleceniu użyliśmy opcji -m, która pozwala
go teraz umieścić w repozytorium. Załóżmy, że pliki pro- dodać własną informację do rejestru zmian w projek-
jektu znajdują się w katalogu ~/projekt/. Przechodzimy do cie. W opcji nazwa_modułu podajemy krótką nazwę,
niego poleceniem cd ~/projekt, po czym wydajemy pole- którą będzie nosił podkatalog utworzony w katalogu
cenie: ~/repozytorium/, zawierający pliki z naszym projektem.
W polu vendor możemy wpisać dowolne słowo nie zawie-
S
cvs import -m "Pierwszy import projektu" rające spacji i znaków specjalnych  np. może to być nasz
projekt gerard start przydomek (nick). Ostatnia opcja, release, pozwala na
użycie symbolicznego określenia numeru wersji. Nazwa
Oczywiście polecenie to możemy dostosować do naszych start odpowiada numerowi 1.1.1.1.
potrzeb  ma ono postać: W GCvs wybieramy opcję Create  > Import module.
Następnie w otwartym oknie przechodzimy do katalogu,
cvs import [-opcje] nazwa_modułu vendor release w którym znajdują się pliki projektu (w naszym przypadku
~/projekt) i wciskamy OK. Jeśli pojawi się okienko z komu-
nikatem błędu, to należy je dokładnie przeczytać i odpo-
wiednio zareagować. Może okazać się przykładowo, że
GCvs zle odgadnie typ pliku i uzna plik tekstowy za binar-
Podstawowe polecenia CVS:
ny (BINARY). W takim przypadku należy wskazać odpo-
" checkout moduł (skrót: co)  tworzy podkatalog z kopią wiednią pozycję i wcisnąć Edit. Z listy możemy wybrać
roboczą plików umieszczonych w repozytorium
jedną z opcji: Leave unchanged (nic nie zmieniaj), Force
" update (skrót: up)  uaktualnia pliki kopii roboczej do naj-
binary (potraktuj plik jako binarny), Force text (potraktuj
nowszej wersji obecnej w repozytorium
plik jako tekstowy) oraz Ignore (zignoruj).
" add plik  komunikuje CVS, że plik zostaje dołączo-
Warto dbać, aby pliki miały przypisany właściwy typ.
ny do projektu i ma zostać przesłany przy następnym
Jeśli plik binarny zapiszemy jako tekstowy, to zostanie on
wywołaniu commit;
doszczętnie zniszczony  CVS przechowuje pliki tekstowe
" remove plik  po usunięciu pliku z kopii roboczej możemy
wraz z historią zmian zapisaną w nich samych. Z tego
użyć tej funkcji, aby plik został również usunięty z repo-
samego powodu nie ma sensu czystych plików tekstowych
zytorium (przy najbliższym wywołaniu commit);
przechowywać jako binarnych  wysłanie każdej popraw-
" commit plik  przesyła zmiany wprowadzone w pliku do
ki do repozytorium wiązałoby się z jego powiększeniem
repozytorium;
" diff  wypisuje różnice pomiędzy plikami z kopii robo- o kolejny plik.
czej i ich wersjami z repozytorium;
W kolejnym oknie możemy ustalić jeszcze nazwę
" import  przesyła pliki do repozytorium tworząc nowy
modułu, wpisać komunikat (odpowiednik opcji -m) oraz
projekt;
ustawić wartości pól Vendor i Release.
" init  inicjuje repozytorium dodając w nim katalog
Jeśli przesłanie plików do repozytorium zakończyło się
CVSROOT oraz domyślne pliki konfiguracyjne;
bez błędów, możemy skasować nasz katalog ~/projekt/ wraz
" log  wyświetla informacje o zmianach w plikach;
z zawartością. Za chwilę odzyskamy go z repozytorium, już
" status  podaje informacje o aktualnym stanie plików
razem z informacjami o wersjach poszczególnych plików.
(numer wersji w repozytorium i kopii roboczej, czy pliki
były edytowane itp.);
Pobieramy projekt z repozytorium
" tag znacznik  ustawia nazwę symboliczną znacznik
Przyszedł czas na prawdziwą pracę. Zaczynając pracę
dla aktualnych wersji plików w repozytorium (można się
pózniej do niej odwoływać z użyciem opcji -r znacznik). z naszym projektem musimy pobrać go z repozytorium.
W tym celu wybieramy sobie odpowiadający nam katalog,
www.linux.com.pl 61
dla programistów
w którym będziemy chcieli przechowywać pliki z projek-
tem. Może to być nawet katalog domowy (~/ ), gdyż wywo-
łanie polecenia, które za chwilę poznamy, spowoduje
utworzenie odpowiedniego podkatalogu. Podkatalog ten
będzie miał taką nazwę, jakiej użyliśmy w opcji nazwa_
modułu polecenia cvs import. No dobrze, zatem stwórzmy
katalog ~/projekty1/ i wykonajmy nasze polecenie:
mkdir ~/projekty1
cd ~/projekty1
cvs checkout projekt
W programie GCvs po prostu wybieramy opcję Create  >
Checkout module. W otwartym oknie tworzymy katalog
~/projekty1/, po czym wchodzimy do niego i wciskamy OK.
Rysunek 5. Wybieranie odpowiednich opcji porównania plików
W kolejnym oknie wpisujemy nazwę modułu do pobrania
jest znacznie wygodniejsze w interfejsie graficznym
(projekt) i możemy znów wcisnąć OK. Jeszcze tylko wybie-
ramy opcję Query  > Reload view, dzięki czemu zostanie
uaktualniona lista katalogów i plików. które mają być wysłane do repozytorium. Wystarczy wyli-
Teraz w katalogu ~/projekty1/projekt/ mamy nasze pliki, czyć je na końcu polecenia, np.:
które wcześniej znajdowały się w katalogu ~/projekt/. Czy
coś się zmieniło? Tak  pojawiły się podkatalogi o nazwie cvs commit plik1.c plik3.php
CVS/. Zawierają one informacje o wersjach  nie należy ich
edytować ani kasować. Możliwość ta jest bardzo przydatna, gdy chcemy już wysłać
uaktualnienie do niektórych plików, podczas gdy z innymi
Dokonywanie poprawek zmodyfikowanymi chcemy jeszcze popracować.
Edycji plików dokonujemy w odpowiednich programach W przypadku programu GCvs zaznaczamy pliki,
 ta sprawa z oczywistych względów jest niezależna od CVS. które chcemy uaktualnić (możemy też zaznaczyć kata-
Tak więc do edycji plików tekstowych możemy użyć nasze- log), a następnie wybieramy Modify  > Commit selection.
go ulubionego edytora (np. Vim), do retuszowania fotografii Podajemy komentarz dotyczący uaktualnienia, po czym
(również ich wersjami można zarządzać dzięki CVS) możemy wciskamy OK.
wykorzystać GIMP-a itd. Gdy dokonamy już poprawek i Jeśli nad projektem pracuje więcej osób, to może
jesteśmy z nich zadowoleni, należy wydać polecenie: okazać się, że ktoś inny wysłał już uaktualnienie do popra-
wianego przez nas pliku. W takim przypadku polecenie cvs
cvs commit commit zakończy się błędem i komunikatem zbliżonym do
poniższego:
Zostaniemy poproszeni o podanie komentarza dotyczącego
tego uaktualnienia. Możemy też wskazać konkretne pliki, cvs commit: Up-to-date check failed for `plik1.c'
W takim przypadku należy pobrać (update) do siebie
najnowszą wersję pliku, a następnie zapoznać się z róż-
nicami (pobrany plik będzie zawierał o nich informa-
cje). Po zlikwidowaniu konfliktów w pliku, możemy
skasować kopię zapasową (zapisaną w pliku o nazwie
.#nazwa_pliku), a następnie ponownie wysłać plik do
repozytorium.
Pobieranie poprawek z repozytorium
Gdy mamy już na dysku (pobraną przez cvs checkout) kopię
roboczą projektu, nie musimy jej już ponownie pobierać
w całości. Jeśli nad naszym projektem pracują i inne osoby,
to po każdej przerwie w pracy warto sprawdzić, czy nie
zostały wprowadzone jakieś poprawki. Dokonujemy tego
poleceniem wydanym w katalogu z projektem:
Rysunek 4. Praca z CVS w linii komend również jest dosyć
wygodna  wymaga tylko lepszej znajomości poleceń cvs -n update
62 marzec 2004
cvs
Jeśli wskaże ono jakieś zmienione pliki, możemy pobrać
poprawki poleceniem:
OFERTA PRACY DLA PROGRAMISTY
cvs update
Firma o ustabilizowanej pozycji na rynku zatrudni programistów
zajmujących się tworzeniem oprogramowania dla platformy
Różnica pomiędzy tymi poleceniami jest taka, że dzięki
Linux.
opcji -n nie dokonujemy żadnych zmian, a jedynie
otrzymujemy komunikaty. Jeśli chcemy sprawdzić
Wymagania:
l
dokładnie, jakie zmiany zostały wprowadzone, możemy Praktyka w programowaniu aplikacji bazodanowych SQL
 najlepiej pod SYBASE ASE;
zapoznać się z historią zmian dzięki poleceniu cvs
l
Dobra znajomość programowania w C, C++;
log nazwa_pliku. Następnie możemy porównać nasz
l
Dobra znajomość semantyki języka i umiejętność jej
plik z jego wersją w repozytorium. W tym celu wyda-
wykorzystania w praktyce: foxpro, clipper, dbase;
jemy polecenie cvs diff nazwa_pliku -r nr_wersji.
l
Pożądana znajomość pakietu CLIP (www.itk.ru);
Wartość pola nr_wersji odczytujemy sobie z wyniku
l
Znajomość tematyki z zakresu zarządzania firmą  czyli
wcześniejszego polecenia. Możemy też pominąć opcję
systemów ERP/CRM/MRP na poziomie podstawowym.
-r, a wtedy porównanie zostanie przeprowadzone
Oferty (CV, list motywacyjny, oczekiwania finansowe, termin podjęcia
z plikiem w wersji takiej, jaką mamy w naszej kopii
pracy) z dołączoną klauzula: Wyrażam zgodę na przetwarzanie danych
roboczej. Opcję -r możemy wykorzystywać w innych
osobowych zawartych w mojej ofercie pracy w celach rekrutacyjnych,
zgodnie z ustawa z dn. 29.08.1997r.  O ochronie danych osobowych ,
poleceniach, np. użycie jej z poleceniem cvs update
Dz.U. nr 133, poz. 833.
spowoduje uaktualnienie kopii roboczej do konkretnej
wersji projektu z repozytorium. W ten sposób możemy
Kontakt: info@softwork.com.pl
edytować starsze wersje projektu.
WWW: www.softwork.com.pl
Podobnie jak w przypadku cvs commit, możemy wska-
zać konkretne pliki, które chcemy uaktualnić. Jeśli w repo-
zytorium znajdują się nowsze wersje plików, to zostaną one Innym wyjściem jest umożliwienie korzystania z CVS za
przesłane do naszej kopii roboczej. pomocą SSH  o tym jednak przeczytamy w następnym
Jak już wiemy, w GCvs możemy po prostu zaznaczyć rozdziale.
pliki, na których chcemy pracować. Pózniej wystarczy
wskazać opcję Query  > Query update w celu spraw- Konfiguracja serwera
dzenia aktualności kopii oraz Modify  > Update selec- Wszystkie czynności wykonujemy z uprawnieniami użyt-
tion w celu pobrania poprawek. Odpowiednie opisa- kownika root. Zaczynamy od stworzenia katalogu dla repo-
ne wcześniej polecenia (cvs log i cvs diff) znajdują się zytorium. Ponieważ będzie to katalog przeznaczony dla
w opcjach Query  > Log selection oraz Query  > Diff większej grupy użytkowników, więc możemy go umieścić
selection. przykładowo w katalogach /usr/ lub /home/. Ja proponuję
utworzyć katalog /usr/cvsroot/:
Tworzymy własny serwer CVS
Posiadanie repozytorium na własnym dysku jest wygod- mkdir /usr/cvsroot
ne, jednak tylko do pewnego momentu. Jeśli nad pro-
jektem pracuje więcej osób, to najczęściej nie wszystkie Następnie postępujemy podobnie jak przy trybie lokalnym
mają bezpośredni dostęp do naszego komputera. W takim  musimy zainicjować nasze repozytorium:
przypadku musimy skonfigurować własny serwer CVS.
cvs -d /usr/cvsroot init
Listing 1. Zawartość pliku /etc/xinetd.d/cvspserver
Ze względu na to, że tym razem w naszym katalogu będą
service cvspserver przechowywane hasła użytkowników, warto ograniczyć do
{ niego dostęp:
port = 2401
socket_type = stream chmod -R o-rwx /usr/cvsroot
protocol = tcp
wait = no Dzięki temu tylko użytkownik i grupa root będą mieli
user = root prawa do tego katalogu.
passenv = PATH Serwer CVS uruchamiany jest przez demona xinetd,
server = /usr/bin/cvs więc musimy stworzyć specjalny plik konfiguracyjny  /
server_args = -f --allow-root=/usr/cvsroot pserver etc/xinetd.d/cvspserver. Treść, którą należy w nim umieścić,
} znajduje się na Listingu 1. Wartość zmiennej server jest
zależna od tego, gdzie mamy zainstalowany CVS. Najlepiej
www.linux.com.pl 63
dla programistów
z trzech pól oddzielonych dwukropkiem. Kolejne pola
to:
" nazwa użytkownika CVS (a więc nazwa wykorzystywa-
na przy logowaniu się);
" hasło oraz nazwa użytkownika, z którego prawami ma
działać CVS, jeśli autoryzacja przebiegnie pomyślnie.
Tylko pierwsze pole jest obowiązkowe  dwa ostatnie
pola są opcjonalne i można je pominąć. Jak jednak wspo-
mnieliśmy przed chwilą, należałoby podać co najmniej
hasło. Zobaczmy na przykładowe dwie linie naszego pliku
z hasłami:
gerard:$1$61pntEz1$my4xVjdiPpLXj8Zgm23i8.
Rysunek 6. Informacje z CVS o wielu projektach możemy uzyskać
ktos:$1$RrFGfpK2$/54OCXueq4SpQ4a/SOBSC0:gerard
również za pośrednictwem WWW
Mamy tu użytkownika gerard (który musi istnieć w syste-
sprawdzić to poleceniem which cvs. Ścieżka umieszczona mie) z zakodowanym hasłem cvspass. Oprócz tego mamy
w zmiennej server_args to oczywiście ścieżka do naszego użytkownika ktos z zakodowanym hasłem ProsteHaslo,
katalogu z repozytorium. który po poprawnej autoryzacji będzie pracował w CVS
Pozostaje nam uruchomić ponownie demona xinetd jako gerard. Dzięki temu użytkownik o nazwie ktos nawet
poleceniem /etc/rc.d/init.d/xinetd restart. nie musi istnieć w systemie, ale i tak będzie miał możliwość
korzystania z CVS. Hasła są kodowane tą samą metodą
Konfiguracja klienta co w pliku /etc/shadow, więc można je stamtąd po prostu
Z punktu widzenia użytkownika korzystającego z CVS, przekleić.
jedyną różnicą w porównaniu z trybem lokalnym jest inna Prawa do pliku /usr/cvsroot/CVSROOT/passwd może
wartość zmiennej środowiskowej CVSROOT. Chcąc połączyć mieć tylko root, więc wydajemy polecenie chmod 600 /usr/
się z serwerem CVS będziemy ustawiać ją następująco: cvsroot/CVSROOT/passwd. Oprócz tego w pliku /usr/cvsroot/
CVSROOT/config wstawiamy linię o treści SystemAuth=no
CVSROOT=:pserver:gerard@192.168.0.1:/usr/cvsroot (wystarczy usunąć znak # znajdujący się na jej początku),
export CVSROOT a wtedy z CVS będą mogli korzystać tylko użytkownicy
określeni w naszym pliku /usr/cvsroot/CVSROOT/passwd.
Oczywiście zamiast gerard i 192.168.0.1 wpisujemy naszą
nazwę użytkownika na zdalnym serwerze oraz adres tego ser- Nieupoważnionym wstęp wzbroniony
wera. Opcja pserver określa sposób autoryzacji użytkownika. Jeśli użytkownicy mają mieć dostęp do repozytorium,
W przypadku korzystania z GCvs, ustawiamy w polu musimy ustawić odpowiednie prawa dostępu do plików
CVSROOT wartość gerard @192.168.0.1:/usr/cvsroot, nato- i katalogów. Katalogi wewnątrz repozytorium powinny
miast w sekcji Authentication zaznaczamy pole Password być zapisywalne przez osoby, które mają mieć możliwość
(proszę porównać opis w rozdziale Pobieramy dane ze zmieniania plików w tych katalogach. Co więcej, jeśli nawet
zdalnego serwera CVS). dana osoba ma tylko czytać pliki, to i tak musi mieć prawo
Poza tym obsługa nie różni się niczym od obsługi CVS do zapisu (ze względu na tworzenie plików blokujących).
w trybie lokalnym. Sprowadza się to do tego, że jeśli chcemy, aby nad jakimś
projektem pracowała większa ilość osób, to musimy stwo-
Hasła użytkowników rzyć w systemie grupę, do której wszystkie te osoby będą
CVS w domyślnej konfiguracji pozwala na autoryzowanie należeć. Grupę taką należy uczynić właścicielem katalogów
użytkowników na podstawie systemowego pliku z hasła- i plików z projektem.
mi. Niesie to ze sobą duże zagrożenie, gdyż CVS stosuje
bardzo proste kodowanie przesyłanych haseł. Jeśli więc Korzystanie z CVS poprzez SSH
użytkownicy będą korzystać ze swoich haseł systemowych, Wiemy już, że korzystanie z CVS za pomocą metody pser-
potencjalnemu włamywaczowi będzie bardzo łatwo je ver może być niebezpieczne ze względu na słabe kodowa-
odszyfrować (zakładając, że uda mu się je podsłuchać  co nie haseł podczas przesyłania. Problem ten możemy obejść
wcale nie musi być trudne). stosując tunel SSH lub wykorzystując SSH bardziej bezpo-
Z tego powodu warto poświęcić trochę czasu na średnio. CVS daje nam taką możliwość  jedną z metod
edycję pliku /usr/cvsroot/CVSROOT/passwd. Plik ten ma pracy zdalnej jest wykorzystanie SSH do przesyłania pole-
bardzo prostą konstrukcję. Każda linia może składać się ceń i danych. Jeśli zdecydujemy się na tę drugą metodę,
64 marzec 2004
cvs
użytkownicy będą musieli ustawić następujące zmienne
środowiskowe:
CVSROOT=:ext:gerard@192.168.100.1:/usr/cvsroot
CVS_RSH=ssh ; export CVSROOT CVS_RSH
Polecenia te można oczywiście dodać do pliku ~/.bash_pro-
file lub innego odpowiedniego dla naszej dystrybucji. Od tej
chwili wszystkie polecenia będą miały taką samą postać,
jak podczas korzystania z CVS lokalnie.
Korzystając z programu GCvs musimy ustawić pole
CVSROOT na wartość gerard @192.168.100.1:/usr/cvsroot,
a opcję Authentication na Secure shell.
Oczywiście, aby skorzystać z tej metody, musimy
spełnić kilka warunków. Na komputerze z repozytorium
musi być uruchomiony serwer SSH. Oprócz tego każdy
z użytkowników mających mieć dostęp do CVS musi mieć
tam konto  do autoryzacji wykorzystywane jest jego hasło
systemowe. Do katalogów repozytorium stosują się wszyst-
kie zasady opisane w rozdziale Nieupoważnionym wstęp
wzbroniony  musimy zadbać o odpowiednie ustawienia
praw dostępu do plików.
Przy wykorzystaniu dostępu przez SSH nie potrzebujemy
konfigurować serwera CVS. W zamian za to nie ma możliwo-
ści jednorazowego zalogowania się do CVS i wykonywania
kolejnych czynności. Każde polecenie musi być autoryzowa-
ne hasłem. Możemy tego uniknąć wykorzystując parę kluczy
SSH (publiczny i prywatny). Można o tym przeczytać w arty-
kule Praca z OpenSSH w numerze styczniowym.
W Sieci:
" Witryna domowa CVS:
http://www.cvshome.org/
" Zalety i wady CVS:
http://www.softax.pl/prywatne/marcink/narzedzia/
narzedzia_cvs/
" The CVS Book  darmowa książka o CVS:
http://cvsbook.red-bean.com/
" GCvs:
http://cvsgui.sourceforge.net/
" CVS Monitor:
http://ali.as/devel/cvsmonitor/
" TkCVS:
http://www.twobarleycorns.net/tkcvs.html
" CVSspam:
http://www.badgers-in-foil.co.uk/projects/cvsspam/
" CVS2HTML:
http://cvs.sslug.dk/cvs2html/
" CVSadmin:
http://www.cooptel.qc.ca/~limitln/cvsadmin/
" CVSweb:
http://www.freebsd.org/projects/cvsweb.html
" LinCVS:
http://www.lincvs.org/
" CvsGraph:
http://www.akhphd.au.dk/~bertho/cvsgraph/
www.linux.com.pl 65


Wyszukiwarka

Podobne podstrony:
2004 03 Analiza logów systemowych [Administracja]
Rola laboratoriów w świetle wymagań systemów zarządzania jakoscią
Korzysci z wdrozenia systemu zarządzania środowiskowego
Wspolczesne systemy zarzadzania Jakosc?zpieczenstwo ryzyko zaprak
LIMS system zarządzania działalnością laboratorium Cz III Uprawnienia i rozwiązania indywidualne
Zarzadzanie procesami Program
Motywacja w systemie zarządzania jakością usług
pokaz system zarzadzania bhp
zasady dokumentowania systemu zarzadzania verlag dashofer
Sudden Strike 3 Cold War Conflicts(2004 03 25)
2004 09 Rozszerzanie możliwości przeglądarek WWW [Programowanie]

więcej podobnych podstron