You are on page 1of 31

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

CVS bez tajemnic


Autor: Jennifer Vesperman
Tumaczenie: Marek Paczyski (rozdz. 5 11, dod. A C),
Rafa Sionek (przedmowa, rozdz. 1 4)
ISBN: 83-7361-710-8
Tytu oryginau: Essential CVS
Format: B5, stron: 360

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Ksika CVS bez tajemnic to podrcznik opisujcy system CVS, zarwno z punktu
widzenia uytkownika, jak i administratora. Przedstawia metody zarzdzania kodem
rdowym projektw oraz tworzenia repozytoriw i administrowania nimi. Zawiera
zestawienie polece CVS oraz opisy aplikacji klienckich, umoliwiajcych poczenie
z systemem CVS z poziomu rnych rodowisk programistycznych i systemw
operacyjnych.
Instalacja systemu CVS
Projekty i repozytoria
Tworzenie znacznikw i odgazie
Wykorzystanie systemu CVS w pracy zespou programistycznego
Zarzdzanie repozytoriami i projektami
Zdalne repozytoria
Polecenia systemu CVS
Aplikacje klienckie i integracja ze rodowiskami programistycznymi
CVS bez tajemnic to doskonae rdo wiedzy dla programistw i administratorw.

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Spis treci
Przedmowa .................................................................................................................... 9

Cz I

Wprowadzenie

13

1. Czym jest CVS ................................................................................................................15


Czym jest system kontroli wersji
Obszary zastosowa CVS

15
17

2. CVS przewodnik dla pocztkujcych.......................................................................21


Instalowanie CVS
Tworzenie pierwszego repozytorium
Importowanie projektw
Uzyskiwanie dostpu do repozytoriw zdalnych
Pobieranie plikw
Wysyanie poprawek
Aktualizowanie magazynw lokalnych
Dodawanie plikw
Usuwanie plikw
Porady na zakoczenie

Cz II Uytkowanie systemu CVS

21
27
29
32
33
34
35
37
38
39

41

3. Podstawowe zastosowania CVS .................................................................................43


Informacje oglne
Magazyny lokalne i repozytoria
Wprowadzanie zmian do repozytorium
Sprawdzanie statusu plikw
Uaktualnianie plikw znajdujcych si w magazynie lokalnym
Dodawanie plikw do repozytorium
Usuwanie plikw z repozytorium
Przenoszenie plikw i katalogw
Zwalnianie magazynu lokalnego
Sowa kluczowe
Pliki binarne i warstwy otaczajce
Okrelanie domylnych opcji polecenia

43
45
50
53
55
62
64
68
69
70
74
76
5

4. Tworzenie znacznikw i odgazie ...........................................................................77


Oznaczanie
Lepko
Rozgazianie
Strategie rozgziania

77
86
88
98

5. Praca wielu uytkownikw ....................................................................................... 105


Jednoczesna praca nad projektem
Monitorowanie pliku
Rezerwowanie plikw
Porwnywanie rnych wersji pliku
Wywietlanie najnowszych zmian
Wywietlanie historii pliku

Cz III Administracja

106
106
112
115
118
119

123

6. Zarzdzanie repozytorium .........................................................................................125


Tworzenie repozytorium
Usuwanie repozytorium
Zabezpieczanie projektw
Struktura repozytorium
Pliki katalogu CVSROOT
Zmienne rodowiskowe serwera
Sporzdzanie kopii zapasowej repozytorium
Edycja repozytorium
Struktura magazynu lokalnego
Zmienne rodowiskowe systemu klienckiego
Kody statusowe

125
126
127
130
133
144
145
151
160
163
165

7. Zarzdzanie projektem...............................................................................................167
Tworzenie projektu
Dystrybucja plikw
Uruchamianie skryptw
Wsppraca CVS z innymi programami
Narzdzia CVS
Strategie i uwagi praktyczne

167
174
177
187
190
193

8. Zdalne repozytoria......................................................................................................197
Wyznaczanie cieek do repozytorium
Metoda dostpu local
Metody dostpu ext i server
Metoda dostpu fork
6

Spis treci

198
199
200
203

Metoda dostpu gserver


Metoda dostpu kserver
Metoda dostpu pserver
Wykorzystanie usugi inetd w metodach gserver, kserver i pserver

204
207
208
213

9. Rozwizywanie problemw ......................................................................................215


Oglne techniki rozwizywania problemw
Problemy z poczeniami
Problemy zwizane z nazwami plikw
Problemy ze znakami koca wiersza
Problemy z prawami dostpu
Pliki blokad

215
217
221
222
222
223

Cz IV Pomoc techniczna

225

10. Polecenia CVS............................................................................................................. 227


Opcje instrukcji wiersza polece
Polecenia CVS

227
230

11. Pozostae elementy CVS ............................................................................................ 273


Pliki administracyjne
Pliki katalogu CVSROOT
Zmienne plikw katalogu CVSROOT
Daty
Zmienne rodowiskowe
Sowa kluczowe i tryby zastpowania sw kluczowych
Wzorce dopasowania
Metody dostpu do repozytorium

274
276
287
289
293
295
298
300

Dodatki

303

A Oprogramowanie klienckie rnych systemw operacyjnych ................................ 305


B Narzdzia administratora.......................................................................................... 323
C Najwaniejsze polecenia CVS w skrcie ................................................................... 333
Skorowidz................................................................................................................... 339

Spis treci

ROZDZIA 4.

Tworzenie znacznikw i odgazie

Z pewnoci jedn z najbardziej pomocnych, jak rwnie niedocenianych funkcji CVS s znaczniki (ang. tag). Funkcja nadawania znacznikw pozwala nada rewizji etykiet umoliwiajc
jej pniejsze pobranie. Ponadto funkcja ta pozwala na rozwidlenie prac nad projektem w taki
sposb, i moliwa staje si rwnoczesna praca nad dwoma lub wicej wersjami projektu. Odgaziona wersja projektu nosi nazw gazi (ang. branch), a jego cz gwna pnia (ang. trunk).
W rozdziale tym obszernie wyjaniono takie pojcia jak oznaczanie i odgazianie projektw.
Podano w nim take przyczyny, dla ktrych wykonuje si operacje oznaczania i tworzenia
odgazie projektu, oraz opisano strategie i wskazwki pomocne w efektywnym zarzdzaniu odgazieniami w projekcie.

Oznaczanie
CVS umoliwia pobranie dowolnej, obecnej w repozytorium rewizji pliku. Jeeli pobieranie
rnych rewizji ma sens, dlaczego nie miaoby mie sensu pobieranie zestawu zgodnych ze
sob rewizji innych, tworzcych kompletn, w peni funkcjonaln wersj projektu? Np. wszystkich rewizji plikw, ktre skaday si na wersj 1.0 projektu, lub stay si pierwszym wydaniem ksiki.
Znakowanie jest sposobem nadawania znacznikw zestawowi rewizji plikw tworzcemu
jedn zwart grup. W przypadku oznaczania nie mona do tego celu uywa numerw rewizji, gdy np. rewizja 2.3 jednego pliku, moga tworzy wspln grup z rewizj 2.17 innego
pliku. Rysunek 4.1 przedstawia grup rewizji plikw wraz z lini okrelajc, ktre numery
rewizji nale do tej samej grupy.
System CVS umoliwia utworzenie pojedynczego znacznika, wskazujcego na rewizje poczone za pomoc wymienionej wczeniej linii. Aby mie wgld na wszystkie nalece do tego
znacznika rewizje, system CVS moe pocign za lini w celu zlokalizowania oznaczonych
rewizji. Rysunek 4.2 przedstawia t sam grup plikw z prost lini wskazujc pliki nalece do tego znacznika.
Znacznika mona uy do wskazania okrelonej wersji pojedynczego pliku lub okrelonego
zestawu rewizji grupy plikw i okrelenia nazwy dla tego zestawu. Od tej pory znacznik pozwala na atwe odzyskanie tej jednej rewizji lub caego zestawu. Ponadto zapamitanie acucha tekstowego jest o wiele atwiejszym zadaniem ni zapamitanie numeru wersji. Uywanie znacznikw przez programistw do oznaczania wersji wedug ich wasnych kryteriw jest
znacznie czstsze ni korzystanie z numerowania rewizji stosowanego przez system CVS.
77

Rysunek 4.1. Rewizje plikw nalecych do tej samej grupy

Rysunek 4.2. Oznaczanie rewizji plikw

.Nazwy znacznikw musz rozpoczyna si od znaku bdcego liter i mog skada si ze znakw alfanumerycznych, cznikw i znakw podkrelenia. Nazwa kadego znacznika musi by
rwnie niepowtarzalna. Pliki znacznikw oraz polecenia cvs tag i cvs rtag zostay opisane
w punktach Oznaczanie przy pomocy magazynu lokalnego i Oznaczanie za pomoc daty lub
rewizji niniejszego rozdziau.
Najlepiej uywa zrozumiaych i prostych nazw znacznikw. Powinny one wywoywa okrelone, zwizane z dan rewizj skojarzenia, podpowiadajce np. czemu dane pliku nale do jednej grupy. Przykadowymi, dobrymi nazwami znacznikw s: release-1-3-beta, release-2-13-patch-5,
testing-1-5-alpha i release-2-5-stable.
W trakcie trwania projektu naley ustali jednolit konwencj nazewnicz znacznikw i zachci
osoby pracujce nad projektem do jej stosowania. Nazwy nadawane znacznikom powinny odzwierciedla z kolei konwencj nazewnicz uywan do okrelania kolejnych wersji projektu,
nieobc wszake uczestnikom projektu. Na odpowiednio nazwanych znacznikach uczestnicy
projektu mog polega w duo wikszym stopniu, przy wyborze odpowiedniej rewizji projektu,
ni na wewntrznej numeracji CVS. Wewntrzna numeracja przeznaczona jest dla celw narzdzi
wewntrznych skadajcych si na system CVS i moe by tylko i wycznie utrudnieniem dla
uczestnikw projektu, gdyby mieli oni polega na niej przy okrelaniu etapw projektu.
78

Rozdzia 4. Tworzenie znacznikw i odgazie

W punkcie Plik taginfo w rozdziale 7. zaprezentowano skrypt, ktry moe by


uyty do automatycznego wymuszania standardw nazewniczych.

W systemie CVS istniej jednake dwie zastrzeone nazwy znacznikw. CVS uywa nazw
BASE i HEAD do nazywania odpowiednio: nazwy ostatnio zsynchronizowanej z repozytorium rewizji i nazwy znacznika ostatniej rewizji znajdujcej si w repozytorium.
Rozwamy hipotetyczn sytuacj, w ktrej wszyscy uczestnicy projektu synchronizuj rewizj do wersji 1.23, z tym, e dowolny uczestnik projektu dokonuje dwch synchronizacji swoich
zmian w repozytorium. Wobec tego numery rewizji pozostaych czonkw zespou, ktrzy
nie synchronizowali swoich magazynw lokalnych z repozytorium, wynosz nadal 1.23, podczas gdy obecnym numerem wersji HEAD jest ju 1.25, poniewa taka bya nazwa rewizji
BASE uytkownika, ktry synchronizowa wczeniej swj magazyn lokalny.

Oznaczanie przy pomocy magazynu lokalnego


W celu oznakowania wszystkich plikw w magazynie lokalnym wraz z nalecymi do niego
podkatalogami, naley wykorzysta polecenie cvs tag. Domylnie, oznaczana jest rewizja BASE.
Okrelone pliki mog zosta oznaczone po podaniu ich nazw jako argumentu polecenia cvs tag.
Skadnia polecenia cvs tag prezentuje si nastepujco:
cvs [opcja_cvs] tag [opcja_polecenia] nazwa_znacznika [nazwy_plikw]

Polecenie cvs tag okrela pliki i rewizje do oznaczenia ich na podstawie zawartoci magazynu lokalnego, lecz faktycznie oznacza je na podstawie numeru ostatnio synchronizowanej
z repozytorium rewizji. Zatem, jeeli w magazynie lokalnym pojawiyby si nowe zmiany od
czasu ostatniej synchronizacji przechowywanych w nim plikw z repozytorium, zmiany te nie
zostayby odzwierciedlone w oznaczonych rewizjach.
Opcja -c polecenia cvs tag pozwala sprawdzi, czy magazyn lokalny nie zosta zmodyfikowany, a dokonane w nim zmiany jak dotychczas niezatwierdzone, zanim dokonano oznakowania plikw. W przypadku gdy polecenie cvs tag -c napotka na niewprowadzone do repozytorium zmiany, zatrzyma swoje dziaanie, nie dokonujc oznakowania adnych plikw.
Aby jednak oznakowa rewizj znajdujc si w repozytorium, bez wprowadzenia wszystkich zmian z magazynw lokalnych, naley podczas wydawania polecenia cvs tag omin
opcj -c. Chcc oznakowa rewizj znajdujc si w magazynie lokalnym, naley wprowadzi
zmiany do repozytorium i uruchomi ponownie polecenie cvs tag.
W celu zidentyfikowania rewizji do oznakowania mona posuy si datami bd innymi,
istniejcymi ju znacznikami lub te numerami rewizji. Aby zidentyfikowa wersj za pomoc nazwy rewizji lub istniejcego znacznika, naley uy polecenia cvs tag -r rewizja lub
cvs tag -r nazwa_znacznika. Aby zidentyfikowa wersj za pomoc daty, trzeba posuy
si poleceniem cvs tag -D data. Dokonujc identyfikacji za pomoc daty, CVS oznaczy pierwsz
rewizj, ktrej data jest mniejsza od daty okrelonej za pomoc parametru -D. Wicej informacji
na temat dat mona znale w rozdziale 11.
Wraz z opcjami -D oraz -r mona rwnie stosowa opcj -f. Opcja ta nakazuje systemowi
CVS, aby uywa rewizji HEAD, w przypadku gdy adna inna rewizja nie spenia wymaga
okrelonych parametrami -r lub -D.

Oznaczanie

79

Domylnie, polecenie cvs tag dziaa rekursywnie w stosunku do wszystkich podkatalogw magazynu lokalnego. Za taki sposb wykonywania polecenia cvs tag odpowiada opcja -R, ktr
mona rwnie uywa, cho jak ju wspomniano wczeniej, nie ma takiej potrzeby.
Przykad 4.1 prezentuje oznakowanie plikw znajdujcych si w magazynie lokalnym znacznikiem o nazwie pre_alpha_0-1 za pomoc polecenia cvs tag.
Przykad 4.1. Uycie polecenia cvs tag
bash-2.05a$ cvs tag pre_alpha_0-1
cvs server: Tagging .
T Changelog
T INSTALL
T Makefile
T README
T TODO
cvs server: Tagging doc
cvs server: Tagging doc/design
T doc/design/AcceptanceTest.doc
T doc/design/Analysis.rtf
T doc/design/Requirements.doc
T doc/design/Specification.rtf
cvs server: Tagging doc/plan
T doc/plan/Schedule.rtf
cvs server: Tagging lib
cvs server: Tagging man
cvs server: Tagging src
T src/config.h
T src/main.c

Oznaczanie za pomoc daty lub rewizji


Polecenie cvs rtag pozwala na oznakowanie plikw bez odwoywania si do konkretnego
magazynu lokalnego. Polecenie rtag w celu zidentyfikowania rewizji plikw do oznakowania polega na parametrach podawanych wraz z poleceniem, tote podanie opcji -r lub -D wraz
z nazw co najmniej jednego pliku, katalogu lub moduu staje si obligatoryjne. Zagadnienie
moduw zostao szerzej ujte w rozdziale 7. Podajc jako argument opcji nazwy kilku katalogw, plikw lub moduw, naley rozdzieli je spacjami.
Skadnia polecenia cvs rtag jest nastpujca:
cvs [opcja_cvs] rtag opcja_polecenia nazwa_znacznika nazwy_plikw

Przykad 4.2 prezentuje nadanie znacznika pre_alpha_0-2 wszystkim plikom znajdujcym si


w podkatalogach, jak rwnie w samym katalogu wizzard za pomoc polecenia cvs rtag.
Opcja -r HEAD oznacza, e znacznik pre_alpha_0-2 zostanie przyporzdkowany rewizjom HEAD
wszystkich plikw.
Przykad 4.2 Uycie polecenia cvs rtag
bash-2.05a$ cvs -d cvs:/var/lib/cvs rtag -r HEAD pre_alpha_0-2 wizzard
cvs rtag: Tagging wizzard
cvs rtag: Tagging wizzard/doc
cvs rtag: Tagging wizzard/doc/design
cvs rtag: Tagging wizzard/doc/plan
cvs rtag: Tagging wizzard/lib
cvs rtag: Tagging wizzard/man
cvs rtag: Tagging wizzard/src

80

Rozdzia 4. Tworzenie znacznikw i odgazie

Jeeli w chwili wydania polecenia cvs rtag znajdujemy si w magazynie lokalnym, system
CVS jako repozytorium, w ktrym naley oznakowa pliki, domylnie przyjmie repozytorium
powizane z tym konkretnym magazynem lokalnym. Znajdujc si wic w magazynie lokalnym powizanym z innym repozytorium ni to, w ktrym ma doj do oznakowania plikw,
naley opuci je lub uy opcji -d cieka_do_repozytorium , tak jak zostao to pokazane
w przykadzie 4.2.
Jeli biecym katalogiem roboczym nie jest katalog magazynu lokalnego, mona okreli je za
pomoc zmiennej rodowiskowej CVSROOT (w przypadku komputera bdcego jedynie klientem CVS) lub opcji -d cieka_do_repozytorium (w przypadku komputera bdcego rwnoczenie serwerem, jak i klientem CVS).
Chcc oznakowa kad najnowsz rewizj wszystkich plikw znajdujcych si w repozytorium, naley uy opcji -r HEAD. Warto przy tym mie wiadomo tego, e operacje wykonywane przez CVS nie s niepodzielne i w przypadku, gdy podczas oznaczania plikw za pomoc opcji -r HEAD, ktry z uytkownikw bdzie rwnoczenie wprowadza swoje zmiany
do repozytorium, moe zdarzy si sytuacja, w ktrej jeden katalog zostanie oznakowany
przed wprowadzeniem zmian przez uytkownika, podczas gdy inny zostanie oznakowany
ju po dokonaniu operacji wprowadzenia zmian do repozytorium.
Uywajc opcji -D, trzeba pamita, e jeli nie zostaa okrelona konkretna godzina, system
CVS oznakuje ostatni rewizj, datujc si przed pnoc okrelonego za pomoc opcji -D dnia.
Przykadowo, opcja -D 12 Feb 2002 spowoduje oznakowanie plikw tak, jak wyglday one
o pnocy 12 lutego 2002 roku czasu lokalnego. Formaty daty zostay omwione w rozdziale 11.
Wikszo opcji polecenia cvs tag wykazuje podobne waciwoci jak w przypadku polecenia cvs rtag. Opcje -l i -R odpowiadaj za rekursywno dziaania opcji, a opcje -r, -D i -f
su okrelaniu rewizji, podobnie jak w poleceniu cvs tag. Opcja -c polecenia cvs tag nie
ma zastosowania w przypadku polecenia cvs rtag.

Pobieranie oznakowanych plikw


W celu wywietlenia znacznikw przyporzdkowanych danemu plikowi, naley wykona
polecenie cvs status -v w katalogu, w ktrym znajduje si rzeczony plik. Polecenie to wywietli rwnie informacje na temat aktualnej rewizji znajdujcej si w magazynie lokalnym,
aktualnej rewizji w repozytorium oraz informacj na temat lepkich znacznikw aktualnego
magazynu lokalnego. Nazwy znacznikw zostan umieszczone w dolnej czci wywietlonego
raportu. Warto zwrci uwag na znaczniki, ktrych nazwy s opatrzone nie tylko numerami
rewizji, lecz take sowem branch s to znaczniki bdce rwnoczenie znacznikami bazowymi danego odgazienia. Wicej informacji na ich temat mona znale w podrozdziale
Rozgazianie w dalszej czci tego rozdziau. Przykad 4.3 demonstruje sposb uycia polecenia cvs status w celu wywietlenia znacznikw pliku main.c.
Przykad 4.3 Znaczniki pliku
bash-2.05a$ cvs status -v src/main.c
= = = = = = = = = = = = = = = =
File: main.c
Status: Up-to-date
Working revision:
1.9
Repository revision: 1.9
Sticky Tag:
(none)

Oznaczanie

/var/lib/cvs/wizzard/src/main.c,v

81

Sticky Date:
Sticky Options:
Existing Tags:
pre_alpha_0-2
pre_alpha_0-1

(none)
(none)

(revision: 1.9)
(revision: 1.9)

Pobranie oznakowanego pliku lub caego ich zestawu jest moliwe dziki zastosowaniu parametru -r nazwa_znacznika jako opcji polecenia cvs checkout lub cvs update. Polecenia
checkout naley uy w celu utworzenia nowego magazynu lokalnego, a polecenia update przy
zaoeniu, e pliki maj by pobrane do aktualnego magazynu lokalnego. W drugim przypadku wszystkie znajdujce si w nim pliki zostan nadpisane plikami oznakowanej rewizji, jednake zmiany, ktre zostay dokonane od czasu ostatniej synchronizacji z repozytorium, zostan scalone z nowymi plikami. Przykad 4.4 prezentuje efekt dziaania polecenia cvs checkout
w przypadku oznakowanego magazynu lokalnego.
Przykad 4.4. Pobieranie plikw do oznakowanego magazynu lokalnego za pomoc polecenia cvs checkout
bash-2.05a$ cvs -d cvs:/var/lib/cvs checkout -r pre_alpha_0-2 wizzard
cvs server: Updating wizzard
U wizzard/Changelog
U wizzard/INSTALL
U wizzard/Makefile
U wizzard/README
U wizzard/TODO
cvs server: Updating wizzard/doc
cvs server: Updating wizzard/doc/design
U wizzard/doc/design/AcceptanceTest.doc
U wizzard/doc/design/Analysis.rtf
U wizzard/doc/design/Requirements.doc
U wizzard/doc/design/Specification.rtf
cvs server: Updating wizzard/doc/plan
U wizzard/doc/plan/Schedule.rtf
cvs server: Updating wizzard/lib
cvs server: Updating wizzard/man
cvs server: Updating wizzard/src
U wizzard/src/config.h
U wizzard/src/main.c

Wykonujc operacje pobrania plikw lub uaktualnienia magazynu lokalnego za pomoc daty
lub znacznika nie bdcego znacznikiem odgazienia (temat odgazie opisany zosta w dalszej czci tego rozdziau), znacznik lub data okrelajca pliki w magazynie lokalnym bd
lepkie. Pliki znajdujce si w magazynie lokalnym, ktre zostay pobrane poprzez okrelenie ich daty lub nazwy znacznika nie bdcego znacznikiem odgazienia s tylko statyczn
reprezentacj stanu projektu w danym czasie. Wprowadzenie zmian do takiego pliku nie jest
moliwe. Termin lepko odnosi si tylko do plikw znajdujcych si w magazynie lokalnym,
nie dotyczy za repozytorium. Dokadniejsze informacje na ten temat mona znale w podrozdziale Lepko.

Usuwanie oraz przenoszenie znacznikw


Nadawanie znacznikw ma zazwyczaj charakter stay, jednak czasami pojawia si potrzeba
usunicia znacznika, zmiany jego nazwy lub przeniesienia go. Operacje takie naley przeprowadza ze szczegln ostronoci, gdy mog spowodowa usunicie wczeniejszych informacji i rwnoczenie uniemoliwienie ich odzyskania.

82

Rozdzia 4. Tworzenie znacznikw i odgazie

Przy prbie usunicia specjalnego znacznika nazywanego znacznikiem odgazienia (patrz


podrozdzia Rozgazianie) system CVS wywietli informacj o bdzie i nie usunie znacznika, ani nie przeniesie go. Aby wymusi usunicie lub przeniesienie takiego znacznika, naley posuy si opcj -B.
Naley unika przenoszenia, jak rwnie zastpowania nazwy znacznika odgazienia bez potrzeby, a decydujc si na to, naley zadba, aby kopia zapasowa repozytorium odzwierciedlaa wszystkie ostatnie zmiany, gdy istnieje due zagroenie
utraty danych.

Usuwanie znacznika
Zwykle nie ma potrzeby usuwania poprawnie umieszczonego w pliku znacznika. Sytuacja
taka moe jednak zaistnie w przypadku bdnego nadania znacznika i wtedy, by moe, trzeba
bdzie usun dany znacznik i sprbowa nada go ponownie.
Aby usun znacznik, naley posuy si opcj -d:
cvs tag -d nazwa_znacznika [nazwa_pliku]

lub
cvs rtag -d nazwa_znacznika nazwa_pliku

Podczas wykonywania polecenia rtag poza magazynem lokalnym podanie cieki do repozytorium staje si obligatoryjne. Po wydaniu polecenia rtag wewntrz magazynu lokalnego
CVS przeszuka podkatalog CVS w celu znalezienia odpowiedniego repozytorium.
Polecenie tag musi by wykonywane wewntrz magazynu lokalnego. Domylnie odnosi si
ono do aktualnego magazynu lokalnego i znajdujcych si w nim podkatalogw. System CVS
przeszuka podkatalog CVS, by znale odpowiednie repozytorium.
Przykad 4.5 pokazuje sposb uycia polecenia cvs tag z zamiarem usunicia znacznika. Polecenie zostao wydane z najwyszego poziomu hierarchii katalogw magazynu lokalnego danego projektu.
Przykad 4.5. Usuwanie znacznika
bash-2.05a$
cvs server:
cvs server:
cvs server:
cvs server:
cvs server:

cvs tag -d pre_alpha_0-2


Untagging .
Untagging doc
Untagging doc/design
Untagging doc/plan
Untagging src

Przenoszenie znacznika
Najczstsz przyczyn przenoszenia znacznika jest poprawienie bdu w oznakowaniu. W niektrych zespoach projektowych uywa si rwnie przenonego znacznika w celu oznakowania
najnowszej wersji projektu, gotowej do wydania, lub najnowszej wersji poprawek. Znacznik
taki przenoszony jest za kadym razem, kiedy nowa wersja projektu zostaje ukoczona.
Aby przenie znacznik z jednej rewizji na inn rewizj tego samego pliku lub ich zestawu,
naley posuy si poleceniem cvs tag lub cvs rtag wraz z opcj -F. Za pomoc opcji -r okrela si rewizj, do ktrej ma zosta przeniesiony znacznik, podczas gdy opcja -F suy do okrelenia nazwy znacznika do przeniesienia. Przykad 4.6 ilustruje operacj przeniesienia znacznika
Oznaczanie

83

wykonan z poziomu magazynu lokalnego przy uyciu polecenia cvs rtag. Raport dotyczcy
statusu pliku wywietli si przed i po operacji przeniesienia. Uywajc do przeniesienia znacznika polecenia rtag, zamiast tag, naley okreli pen ciek z katalogu gwnego repozytorium
do pliku main.c, wczajc w to rwnie nazw projektu. Przy wykonywaniu polecenia cvs
status okrelenie penej cieki nie jest konieczne ze wzgldu na to, e polecenie to zostaje wydane z poziomu magazynu lokalnego.
Przykad 4.6. Przenoszenie znacznika
bash-2.05a$ cvs status -v src/main.c
= = = = = = = = = = = = = = = =
File: main.c
Status: Up-to-date
Working revision:
Repository revision:
Sticky Tag:
Sticky Date:
Sticky Options:

1.9
1.9
(none)
(none)
(none)

/var/lib/cvs/wizzard/src/main.c,v

Existing Tags:
pre_alpha_0-1
(revision: 1.9)
bash-2.05a$ cvs rtag -r 1.8 -F pre_alpha_0-1 wizzard/src/main.c
bash-2.05a$ cvs status -v src/main.c
= = = = = = = = = = = = = = = = = = = = = =
File: main.c
Status: Up-to-date
Working revision:
Repository revision:
Sticky Tag:
Sticky Date:
Sticky Options:

1.9
1.9
(none)
(none)
(none)

Existing Tags:
pre_alpha_0-1

(revision: 1.8)

/var/lib/cvs/wizzard/src/main.c,v

Usuwanie i przenoszenie znacznikw w plikach znajdujcych si w katalogu Attic


Pliki usunite z gwnego pnia projektu poleceniem cvs remove lub te pliki, ktre nigdy si
w nim nie znalazy, przechowywane s w podkatalogu Attic, znajdujcym si w katalogu repozytorium. Pliki takie mog by skojarzone ze znacznikami, ktre wymagaj usunicia, przeniesienia lub zmiany nazwy. Operacji tej nie da si wykona na plikach znajdujcych si
w katalogu Attic za pomoc polecenia cvs tag. Jednak polecenie cvs rtag ma opcj -a, ktra potrafi wymusi wykonanie polecenia cvs rtag -d -F w stosunku do usunitych wczeniej
plikw (np. takich, ktre s umieszczone w katalogu Attic) znajdujcych si w odpowiednim
module lub katalogu .
Po wydaniu polecenia cvs tag lub cvs rtag wraz z opcj -r nazwa_rewizji, system CVS
sprawdza katalog Attic pod ktem obecnoci okrelonej rewizji w plikach tam si znajdujcych,
co tym samym oznacza, e w takim wypadku opcja -a nie jest wymagana.

Zmienianie nazwy znacznika


Jeeli ktry z czonkw zespou projektowego doda do systemu znacznik nie odpowiadajcy standardom nazewniczym przyjtym w danym projekcie, mona przeprowadzi operacj
zmiany nazwy takiego znacznika.

84

Rozdzia 4. Tworzenie znacznikw i odgazie

Co prawda, CVS nie dysponuje specjalnym poleceniem do zmiany nazwy znacznika, jednake za pomoc polecenia cvs tag lub cvs rtag wraz z opcj -r nadanie nowego znacznika
bdnie oznaczonej rewizji jest bardzo proste. Po pomylnie zakoczonej operacji mona usun stary znacznik. Takie podejcie nie jest jednak odpowiednie w przypadku rozgazie.
Przykad 4.7. prezentuje operacj zmiany nazwy znacznika. Celem operacji jest zmiana nazwy
znacznika pre_alpha_0-1 na pre_beta_0-1. W pierwszej kolejnoci plikom oznaczonym jako
pre_alpha_0-1 nadaje si znacznik pre_beta_0-1, a nastpnie usuwa si stary znacznik poleceniem
cvs tag -d. Efektem takiej operacji jest zmiana nazwy znacznika pre_alpha_0-1 na pre_beta_0-1.
Przykad 4.7. Zmiana nazwy znacznika
bash-2.05a$ cvs tag -r pre_alpha_0-1 pre_beta_0-1
cvs server: Tagging .
T Changelog
T INSTALL
T Makefile
.
.
.
cvs server: Tagging src
T src/config.h
T src/main.c
bash-2.05a$ cvs tag -d pre_alpha_0-1
cvs server: Untagging .
D Changelog
D INSTALL
D Makefile
.
.
.
cvs server: Untagging src
D src/config.h
D src/main.c

Usunite pliki
Trzeba wiedzie, e jeli usunie si plik z oznakowywanego wanie projektu, to w plik nie
zostanie oznakowany. Nie ma to wikszego znaczenia w przypadku, gdy plik ten nie bdzie
ponownie dodany do projektu.
Jeeli jednak plik zosta usunity z projektu, a nastpnie do niego przywrcony, to trzeba mie
wiadomo, e nie istnieje prosty sposb na sprawdzenie, czy plik ten zosta oznakowany, czy
nie. Dzieje si tak, gdy znacznik mg zosta nadany pomidzy usuniciem pliku, a jego
przywrceniem, lub te z tego powodu, e znacznik moe by starszy ni plik. By zdoby wicej
informacji na ten temat, mona posikowa si datami plikw lub wykona polecenie cvs rdiff
-s -r nazwa_znacznika nazwa_projektu. Opcja -s polecenia rdiff generuje raport podsumowujcy, w ktrym wywietl si wszystkie pliki bd to zmienione, bd dodane lub te usunite.
Aby oznakowa zarwno usunite, jak i nieusunite pliki wraz z poleceniam cvs tag lub cvs
rtag, naley uywa opcji -r, na przykad -r HEAD.

Przy oznakowywaniu rewizji HEAD, by moe bdzie trzeba zapewni ochron plikom znajdujcym si w repozytorium przed zmianami innych uytkownikw, pomidzy momentem,
w ktrym zostaje podjta decyzja, e pliki s gotowe do oznakowania, a ich faktycznym oznakowaniem. Rady dotyczce tego, jakie podj w takim wypadku dziaania, zawarte zostay
w punkcie Blokowanie repozytorium znajdujcym si w rozdziale 6.
Oznaczanie

85

Strategie oznakowywania
Nadawanie znacznikw uatwia pniejsze pobieranie plikw nalecych dodanego etapu
projektu. Znaczniki naley nadawa zawsze wtedy, gdy projekt osiga kolejne, znaczce etapy realizacji. Jako absolutne minimum naley przyj oznaczanie kadego rozgazienia projektu i kadego kolejnego, ukoczonego wydania projektu.
Dobrze jest obmyli wasn lokaln strategi oznakowywania. Ponisza lista wanych punktw projektu, ktre naleaoby wzi pod uwag podczas opracowywania strategii, jest silnie
zorientowana na tworzenie programw:
po zakoczeniu prac nad kad waniejsz funkcj,
w momencie osignicia kadej znaczcej fazy projektu,
tu przed odrzuceniem istniejcej ju funkcji,
tu przed rozpoczciem testowania,
przed wprowadzeniem zmian mogcych zepsu uruchamiajcy si ju kod,
tu przed rozszczepieniem gazi,
tu po scaleniu odgazie.

Naley uywa zrozumiaych znacznikw o wczeniej ustalonym formacie, zawierajcych


w swojej nazwie wszystkie potrzebne informacje. Poniszy przykad jest jednym z moliwych do
zastosowania, lecz rwnoczenie niezwykle uszczegowionym formatem nazywania
znacznikw.
wersja-[alpha-|beta-][test-|final-|patch-][patch#-][pub|priv]

W przypadku, gdy zaistnieje konieczno pobrania starszej wersji kodu w celu przetestowania lub opracowania poprawki, naleaoby mie pod rk atwy sposb identyfikacji tej wersji, o ktr nam chodzi. Powyszy przykad formatu nazwy znacznika zapewnia informacj
na temat numeru rewizji oraz mwi o tym, czy oznakowana rewizja jest wersj testow, czy
te finaln, okrela stadium testw, a take powiadamia o tym, czy dane wydanie jest wersj
oglnodostpn, czy wewntrzn.
Naley mie na uwadze fakt, e zaprezentowany powyej przykad jest tylko jednym z moliwych do zastosowania formatw. Bazujc na potrzebach wasnego zespou projektowego
najlepiej jest jednak opracowa swj wasny format nazywania znacznikw. Wikszo zespow bdzie preferowaa format krtszy od tego, jaki zosta tutaj zaprezentowany.

Lepko
Pojcie lepkoci (ang. stickiness) jest jedn z waniejszych cech systemu CVS, szczeglnie gdy
mowa o nadawaniu znacznikw i rozgazianiu. Lepko jest zasadniczo cech wewntrzn
systemu CVS, ogranicza ona jednak zakres zmian, jakie mona wprowadzi do magazynu
lokalnego.
Kiedy ktry z plikw znajdujcych si w repozytorium osiga stan, w ktrym nie powinien
by on ju poddawany adnym modyfikacjom, co nie jest domylnym typem zachowania dla
plikw znajdujcych si w magazynie lokalnym, stan taki nazywa si stanem lepkim (ang. sticky).

86

Rozdzia 4. Tworzenie znacznikw i odgazie

Lepko pliku moe by spowodowana przynalenoci pliku do pewnej okrelonej rewizji


lub odgazienia projektu, lub te moe on posiada pewne opcje sw kluczowych.
Dany plik mona wczy do okrelonej rewizji poprzez pobranie go z repozytorium za pomoc okrelajcej go nazwy znacznika, numeru rewizji lub daty. W przypadku, gdy plik zostanie pobrany za pomoc daty, mwi si, e ma on lepk dat. Jeeli zostanie pobrany za pomoc znacznika, mwi si o lepkim znaczniku, a przypadku pobrania za pomoc numeru rewizji,
analogicznie plik taki okrela si jako plik posiadajcy lepk rewizj.
Podobnie jak w powyszym przykadzie, o plikach znajdujcych si w magazynie lokalnym,
nalecych rwnoczenie do odgazienia, mwi si, e posiadaj one lepkie odgazienie,
a w przypadku pliku o okrelonych dla danego magazynu lokalnego sowach kluczowych,
mwi si jako o pliku majcym lepkie sowa kluczowe.
Znacznik lepkoci determinuje zachowanie wszystkich uruchamianych polece majcych wpywa na tene plik. Plik, z lepk data, rewizj lub ze znacznikiem nie nalecym do jakiegokolwiek odgazienia nie zostanie zaktualizowany do nowszej wersji; plik taki nie moe zosta
rwnie zsynchronizowany z repozytorium. Z kolei plik okrelony lepkim odgazieniem
zawsze zostanie zaktualizowany lub zsynchronizowany z okrelonym odgazieniem.
Stan lepkoci plikw moe by monitorowany za pomoc polecenia cvs status. Przykadowo,
aby zobaczy raport dla pliku index.htm, naley wyda polecenie cvs status index.htm. Przykad 4.8. prezentuje raport na temat statusu pliku majcego lepkie odgazienie.
Przykad 4.8. Wywietlenie statusu lepkiego pliku
bash-2.05a$ cvs status main.c
= = = = = = = = = = = = = = = =
File: main.c
Status: Up-to-date
Working revision:
Repository revision:
Sticky Tag:
Sticky Date:
Sticky Options:

1.9
1.9
/var/lib/cvs/wizzard/src/main.c,v
beta_0-1_branch (branch: 1.9.2)
(none)
(none)

Katalogi magazynw lokalnych rwnie mog by lepkie, a stan taki implikuje przekazywanie go rwnie kademu plikowi dodanemu do takiego katalogu. Nazwy katalogw oznaczonych jako lepkie znajduj si w pliku Tag umiejscowionym w podkatalogu CVS takiego lepkiego katalogu. Przykad 4.9. prezentuje plik Tag.
Przykad 4.9. Zawarto pliku Tag
bash-2.05a$ less CVS/Tag
Tbeta_0-1_branch

Stan lepkoci nadaje si lub zmienia za pomoc polecenia cvs checkout lub cvs update wraz
z opcjami -k, -D lub -r. Stan taki mona usun poprzez uruchomienie polecenia cvs update -A,
ktre to polecenie spowoduje pobranie z pnia repozytorium rewizji HEAD, nadanie ustawie
domylnych odpowiednim plikom oraz usunicie wszystkich lepkich znacznikw z katalogw.
Aby usun oznaczenie lepkoci z danego katalogu, naley posuy si poleceniem cvs
update -A, okrelajc dany katalog jako cel dziaania tego polecenia. Polecenie cvs update -A
nazwa_pliku nie spowoduje usunicia znacznika lepkoci katalogu, jak rwnie nie bdzie
ono odnosio si do innych plikw znajdujcych si w katalogu.

Lepko

87

Rozgazianie
We wczeniejszej wersji tego rozdziau okrelono rozgazienie jako rozwidlon lini projektow, z wyrnieniem linii nazywanej rozgazieniem lub odgazieniem (ang. branch) oraz lini
gwn projektu nazywan pniem (ang. trunk). W skad zarwno odgazienia, jak i pnia wchodz te same dane do momentu, w ktrym zostay one rozdzielone moment ten nazywany
jest podstaw (ang. base) odgazienia. Od tego momentu dane na temat zmian dokonanych
w odgazieniu, jak i pniu, przechowywane s oddzielnie. Kolejnym wersjom odgazienia
nadawane s numery rewizji bazujce na numerze rewizji podstawy odgazienia.
Odgazi mona nie tylko pojedynczy plik, ale take ich grup lub nawet cay projekt, podobnie jak przypadku oznakowywania, gdzie mona nadawa znaczniki pojedynczym plikom,
jak rwnie caej ich grupie. Najlepiej jednak rozgazia cay projekt. Dowiadczenie wskazuje na to, e dokonujc odgazienia jednego pliku, koniec kocw trzeba bdzie odgazi
rwnie i inne pliki wchodzce w skad tego samego projektu z tych samych powodw, z jakich odgaziono pierwszy z plikw. Duo atwiej jest wic ledzi w trakcie projektu pojedyncz ga ni du ilo niezwizanych ze sob gazi, stworzonych dla pojedynczych plikw.
Znacznik okrela rewizj kadego oznakowanego pliku, a oznakowany nim magazyn lokalny
nie moe by zmodyfikowany. W odrnieniu od takiego zachowania, za pomoc mechanizmu rozgaziania tworzone s zdatne do edytowania rewizje, ktre mog by niezalenie
synchronizowane z repozytorium, pobierane, aktualizowane i oznakowywane. Pod wieloma
wzgldami odgazienie mona traktowa jako zupenie niezalen lini rozwojow projektu.
Plik mona oznakowa dowoln iloci znacznikw, przy czym adna z nazw znacznikw
nie moe si powtarza. CVS pozwala rwnie na oznakowywanie odgazionych rewizji za
pomoc rnych znacznikw gazi. Bazuje on przy tym na niepowtarzalnoci nazw znacznikw i odgazie, przyjmujc nazw odgazienia jako nazw znacznika.
Odgazienie jest aktywn lini rozwojow projektu, w zwizku z czym znaczniki s wykorzystywane do oznaczania okrelonych wersji projektu w istotnych dla niego momentach. Pomimo faktu, i zarwno odgazienia, jak i znaczniki tworzy si za pomoc polecenia cvs tag,
ich zadanie jest zgoa rne. Odgazienie reprezentuje wiele rnych rewizji, podczas gdy
znacznik tylko jedn.
W przypadku niektrych polece, takich jak np. cvs diff, system CVS wymaga, aby
odgazienie wskazywao tylko na jedn rewizj. W takich przypadkach system CVS
wskazuje na najnowsz rewizj znajdujc si w danym odgazieniu.

Odgazienia wykorzystywane s czsto do tego, aby umoliwi testerom przeprowadzenie


testw aplikacji na wersji release candidate, gdy przygotowywana jest ju oglnodostpna wersja
wydania programu, podczas gdy niezalenie od przeprowadzanych testw moe ju by
opracowywana nowa linia rozwojowa produktu. Odgazienia mog by rwnie wykorzystywane do opracowywania w oddzieleniu od gwnej linii rozwojowej eksperymentalnych
zmian w projekcie, np. do kompletnego przepisania kodu biblioteki.
W idealnym przypadku dobrze byoby mie wiadomo potrzeby stworzenia odgazienia
jeszcze przed rozpoczciem modyfikacji plikw projektu znajdujcych si w magazynie

88

Rozdzia 4. Tworzenie znacznikw i odgazie

lokalnym. Rozgazienie projektu z poziomu magazynu lokalnego zaprezentowano w punkcie Tworzenie odgazienia znajdujcego si w dalszej czci tego rozdziau.
Zdarzaj si sytuacje, gdy wiadomo eksperymentalnego charakteru dokonanych zmian
lub potrzeba przeprojektowania caej sekcji projektu przychodzi dopiero po zmodyfikowaniu
plikw. W takich sytuacjach warto utworzy odgazienie projektu umoliwiajce ledzenie
dokonanych zmian, a ktre nie bdzie wpywao na reszt projektu. Sposb wykonania takiego
odgazienia zosta opisany w punkcie Wsteczne tworzenie odgazie w dalszej czci tego rozdziau. Wsteczne tworzenie odgazie moe by nieco trudniejsze do wykonania
standardowego rozgazienia, najlepiej wic planowa tego typu dziaania z wyprzedzeniem.
Na rysunku 4.3 zaprezentowano operacje rozgazienia projektu. Rewizja 2.6 jest rewizj bazow odgazienia, a odgazienie jako takie jest reprezentowane jako rewizja 2.6.2. Odgazienie posiada wasn, niezalen od gwnego pnia projektu lini rozwojow, numerowan
poczwszy od rewizji 2.6.2.1. Numeracja rewizji gwnego pnia jest kontynuowana jako 2.7.

Rysunek 4.3. Odgazienie

Odgazienie bazuje na pniu gwnym. Jednak zarwno pie, jak i odgazienie przechowywane s w tym samym pliku znajdujcym si w repozytorium, co wie si z tym, e polecenia operujce na tym pliku na poziomie repozytorium mog wpywa na pie, a take na odgazienie. Przykadowo, ten sam znacznik nie moe by uyty w tym samym pliku do oznakowania
pnia i odgazienia. Oprcz tego, wynik dziaania polecenia cvs status i cvs log wywietlaj caociow informacje na temat pliku, wczajc w to informacje zarwno na temat pnia
jak i odgazienia.
Zmiany dokonane w pniu mog zosta wczone do odgazienia, ale take zmiany poczynione
w odgazieniu mog zosta wczone do gwnego pnia projektu. Dalszy rozwj odgazienia
moe zosta albo porzucony, albo kontynuowany w zalenoci od przeznaczenia scalenia zmian.

Obszary zastosowa odgazie


Odgazienia maj wiele zastosowa. Zwykle s one wykorzystywane do tworzenia oddzielnych linii rozwojowych projektu, podczas gdy pie suy opracowywaniu gwnej linii projektowej produktu.
W projektach programistycznych i w zadaniach dotyczcych zarzdzania treci, odgazienia s czsto wykorzystywane do prac eksperymentalnych, opracowywania wersji kandydackich produktu, refaktoryzacji kodu lub treci, a take do wprowadzania poprawek.
W przypadku zarzdzania konfiguracj za pomoc CVS, pie gwny moe suy jako konfiguracja domylna, a odgazienia jako poszczeglne warianty konfiguracyjne, np. jedna ga odpowiada za konfiguracje usug sieciowych, inna za konfiguracj usug zwizanych z dostarczaniem poczty itd.

Rozgazianie

89

Ponisza lista prezentuje niektre z typowych zastosowa dla rnych typw odgazie. Typy
odgazie opisano w podrozdziale Strategie rozgaziania w dalszej czci tego rozdziau.
Warianty zastosowa jednego schematu, takie jak przechowywanie konfiguracji serwerw
W przypadku zastosowania odgazie jako repozytorium wariantw konfiguracyjnych,
najlepiej uywa dugich odgazie lub te okazjonalnie odgazie zagniedonych.
Dodatkowe zmiany najlepiej wprowadza w pniu, a nastpnie scala je z odgazieniem,
jeli jest to wymagane do poprawnego funkcjonowania odgazienia.
Zarzdzanie poprawkami
W celu zarzdzania poprawkami bdw naley uywa dugich rozgazie, a zmiany
scala z pniem gwnym projektu.
Prace eksperymentalne, takie jak nowe fragmenty kodu lub np. projekt nowego wygldu strony
W takich wypadkach naley uywa krtkich rozgazie, a zmiany scala z pniem gwnym.
Zasadnicze zmiany projektu, takie jak kompletne przepisanie kodu
W zalenoci od rozpitoci zmian mona stosowa dugie odgazienia scalane do pnia,
dugie odgazienia scalane w obu kierunkach, jak i odgazienia krtkie.
Testowe wersje kandydackie
Naley stosowa dugie odgazienia scalane do pnia gwnego. Mona rwnie pokusi
si o konwersj tego typu odgazie na odgazienia zarzdzania poprawkami po wypuszczeniu penej wersji produktu.

Tworzenie odgazienia
Odgazienie tworzy si za pomoc polecenia cvs tag lub cvs rtag wraz z opcj -b. Opcja ta
moe wystpowa w poczeniu z dowolnymi innymi opcjami tych polece, odpowiedzialnymi za tworzenie znacznikw. W celu identyfikacji wersji majcej zosta rozgazionej mona
uy zarwno daty, istniejcego ju znacznika lub numeru rewizji.
Za pomoc polecenia cvs tag mona rwnie utworzy odgazienie na podstawie ostatnio
zsynchronizowanej rewizji magazynu lokalnego. Utworzenie odgazienia w ten sposb przypomina sposb oznaczania plikw, jaki opisano w punkcie Oznaczanie przy pomocy magazynu lokalnego.
Przykad 4.10. ilustruje sposb utworzenia odgazienia za pomoc polecenia cvs tag z wykorzystaniem nazwy znacznika do identyfikacji rewizji do rozgazienia. Wydajc polecenie cvs
update mona upewni si, czy wszystkie pliki z rewizji pre_beta_0.1 znajduj si w magazynie
lokalnym. Wywietlony wynik dziaania polecenia cvs update pozwala rwnie na upewnienie
si, e aden z plikw nie zosta zmieniony.
Przykad 4.10. Tworzenie odgazienia
bash-2.05a$ cvs update -d -r pre_beta_0-1
.
.
.
bash-2.05a$ cvs tag -r pre_beta_0-1 -b pre_beta_0-1_branch
cvs server: Tagging .
T Changelog
T INSTALL
T Makefile

90

Rozdzia 4. Tworzenie znacznikw i odgazie

T README
T TODO
cvs server: Tagging doc
cvs server: Tagging doc/design
T doc/design/AcceptanceTest.doc
T doc/design/Analysis.rtf
T doc/design/Requirements.doc
T doc/design/Specification.rtf
cvs server: Tagging doc/plan
T doc/plan/Schedule.rtf
cvs server: Tagging src
T src/config.h
T src/main.c

Odgazienie zostaje utworzone w repozytorium, a nie w magazynie lokalnym. Aby rozpocz edycj plikw wchodzcych w skad odgazienia, naley najpierw pobra pliki do magazynu lokalnego, realizujc polecenie cvs checkout, lub zaktualizowa magazyn za pomoc polecenia cvs update, tak aby odzwierciedla on odgazienie.
Dobr praktyk jest z kolei oznaczanie gwnego pnia projektu tu przed wykonaniem operacji rozgazienia, z tego wzgldu, e uatwi to przysze scalenie zmian. Aby mie pewno,
e pliki oznaczone jako te, ktre maj by podstaw odgazienia w istocie staj si plikami,
na bazie ktrych jest ono wykonywane, naley utworzy odgazienie za pomoc polecenia
cvs rtag -r znacznik_podstawy -b znacznik_odgazienia nazwa_projektu. Polecenie to
wykorzystuje znacznik podstawy do okrelenia rewizji bdcej podstaw do tworzenia nastpnych odgazie.
Przykad 4.11 przedstawia sposb, w jaki naley utworzy znacznik podstawy, a nastpnie
wykona operacj rozgazienia. Polecenie cvs status zostao wykorzystane do pokazania
stanu znacznika jednego z plikw.
Przykad 4.11. Oznakowywanie rewizji przed wykonaniem operacji rozgazienia
bash-2.05a$ cvs tag beta_0-1_branch_root
cvs server: Tagging .
T Changelog
T INSTALL
.
.
.
cvs server: Tagging src
T src/config.h
T src/main.c
bash-2.05a$ cvs rtag -r beta_0-1_branch_root -b beta_0-1_branch wizzard
cvs rtag: Tagging wizzard
cvs rtag: Tagging wizzard/doc
cvs rtag: Tagging wizzard/doc/design
cvs rtag: Tagging wizzard/doc/plan
cvs rtag: Tagging wizzard/lib
cvs rtag: Tagging wizzard/man
cvs rtag: Tagging wizzard/src
bash-2.05a$ cvs status -v src/main.c
= = = = = = = = = = = = = = = = = = = = = = = = =
File: main.c
Status: Up-to-date
Working revision:
Repository revision:
Sticky Tag:
Sticky Date:
Sticky Options:

1.9
1.9
(none)
(none)
(none)

Rozgazianie

/var/lib/cvs/wizzard/src/main.c,v

91

Existing Tags:
beta_0-1_branch
beta_0-1_branch_root
pre_beta_0-1

(branch: 1.9.2)
(revision: 1.9)
(revision: 1.8)

Wsteczne tworzenie odgazie


W sytuacji, gdy po dokonaniu pewnej iloci zmian, ale jeszcze przed ich zatwierdzeniem w repozytorium, powstaje potrzeba wykonania odgazienia, naley sprbowa utworzy odgazienie na podstawie wersji przed zmianami. Jeli zmiany nie zostay jeszcze zatwierdzone,
odgazienie mona wykona wstecznie, postpujc zgodnie z poniszymi wskazwkami:

1. Nie naley wprowadza zmian do repozytorium, a do momentu wykonania odgazienia. Informacja ta jest wana z tego wzgldu, e wykorzystywana jest funkcja polecenia
cvs tag pozwalajca na utworzenie odgazienia przed ostatnimi zmianami.
Ze wzgldu na brak moliwoci wprowadzenia zmian do repozytorium przed rozpoczciem procedury, najlepiej jest utworzy kopi zapasow zmienionych plikw, wydajc
systemowe polecenie copy. Kopia powinna obejmowa cay magazyn lokalny i powinna
by przechowywana a do momentu wprowadzenia zmian do repozytorium.
2. Odgazienie naley utworzy za pomoc polecenia cvs tag -b nazwa_odgazienia.
Polecenie cvs tag oznakowuje ostatni rewizj, ktra zostaa zsynchronizowana z repozytorium, wanie t, ktra ma zosta poddana operacji rozgaziania. Polecenie to nie
powoduje modyfikacji magazynu lokalnego.
3. Za pomoc polecenia cvs update -r nazwa_odgazienia naley wczyta pliki danego
odgazienia do magazynu lokalnego. Spowoduje to prb scalenia plikw odgazienia
z plikami znajdujcymi si w magazynie lokalnym, lecz poniewa pliki z magazynu lokalnego bazuj na plikach odgazienia, operacja scalenia nie wywoa zmiany jakichkolwiek plikw. CVS oznaczy pliki znajdujce si w magazynie lokalnym jako pliki bdce
czci odgazienia, nadajc im lepkie znaczniki.
4. Wydajc polecenie cvs commit, naley zapisa zmiany dokonane w plikach do repozytorium jako kolejn rewizj odgazienia.
5. Sprawdzi poprawno plikw, a nastpnie usun pliki tymczasowej kopii zapasowej
Powyszy proces bazuje na zaoeniu, e polecenie cvs tag oznakowuje repozytorium takim,
jakie byo ono w chwili ostatniego wprowadzenia zmian z magazynu lokalnego. Odgazienie
jest zatem tworzone dla tego momentu, a ewentualna prba aktualizacji magazynu lokalnego
z odgazieniem powoduje, e system CVS stara si scali pliki podstawy, na bazie ktrych
zosta utworzony magazyn lokalny z plikami w nim si znajdujcymi, w wyniku czego magazyn lokalny pozostaje niezmieniony.
Przykad 4.12 przedstawia operacj wstecznego utworzenia odgazienia.
Przykad 4.12. Wsteczne utworzenie odgazienia
ash-2.05a$ cvs tag -b test_0-1_branch
cvs server: Tagging .
T config.h
T main.c
bash-2.05a$ cvs update -r test_0-1_branch
cvs server: Updating .
M config.h
bash-2.05a$ cvs commit

92

Rozdzia 4. Tworzenie znacznikw i odgazie

Po wprowadzeniu zmian do repozytorium mona rwnie wykona operacj wstecznego utworzenia rozgazienia za pomoc okrelonej daty, tak jak to pokazano na rysunku 4.2, trzeba jednak zastpi opcj -b nazwa_znacznika, opcj -D data.
W przypadku czstego kopiowania i wklejania godzin podawanych przez polecenie
cvs log, naley dodatkowo okreli stref czasow UTC za pomoc opcji -D data.

Tworzenie magazynu lokalnego odgazienia


Aby zmodyfikowa pliki odgazienia, naley pobra pliki z magazynu lokalnego, bdcego
protoplast odgazienia, ktre ma zosta zmodyfikowane. Polecenie cvs commit wydane z poziomu magazynu lokalnego odgazienia spowoduje wprowadzenie zmian z magazynu lokalnego odgazienia do repozytorium, a polecenie cvs update pobranie plikw z repozytorium
do magazynu lokalnego.
Magazyn lokalny odgazienia tworzy si za pomoc polecenia cvs checkout lub cvs update
wraz z opcj -r nazwa_znacznika_odgalezienia. Rysunek 4.4 prezentuje operacj pobrania
plikw do magazynu lokalnego odgazienia

Rysunek 4.4. Magazyn lokalny odgazienia

CVS oznacza pliki znajdujce si w magazynie lokalnym odgazienia lepkim znacznikiem,


aby tym samym podkreli ich przynaleno do odgazienia. Przykad 4.13 prezentuje sposb utworzenia magazynu lokalnego odgazienia i raport dotyczcy statusu plikw, z ktrych
jeden oznaczony jest lepkim znacznikiem odgazienia.
Przykad 4.13. Utworzenie magazynu lokalnego odgazienia
bash-2.05a$ cvs -d cvs:/var/lib/cvs checkout -r beta_0-1_branch wizzard
cvs server: Updating wizzard
U wizzard/Changelog
U wizzard/INSTALL
.
.
.
cvs server: Updating wizzard/src
U wizzard/src/config.h
U wizzard/src/main.c
bash-2.05a$ cd wizzard/src/
bash-2.05a$ cvs status main.c
= = = = = = = = = = = = = = = = = = = = = = = = =
File: main.c
Status: Up-to-date

Rozgazianie

93

Working revision:
Repository revision:
Sticky Tag:
Sticky Date:
Sticky Options:

1.9
1.9
/var/lib/cvs/wizzard/src/main.c,v
beta_0-1_branch (branch: 1.9.2)
(none)
(none)

Istnieje moliwo pobrania poszczeglnych plikw odgazienia do gwnego magazynu lokalnego, jednak taka operacja, skutkujca mieszanin plikw nalecych do odgazienia i pnia,
nie jest zalecana. Pobranie pojedynczych plikw nie nalecych do tego samego odgazienia
lub pnia, co aktualny magazyn lokalny, jest moliwe z poziomu katalogu nie bdcego magazynem lokalnym.
Polecenie cvs update -A umoliwia uaktualnienie plikw znajdujcych si w magazynie lokalnym za pomoc plikw z pnia projektu. Polecenie to usuwa znaczniki
lepkoci i pobiera najnowsze wersje plikw nalece do pnia. Wszystkie zmiany z magazynu lokalnego wykonane od momentu, gdy zostay pobrane plik,i na ktrych w
magazyn bazuje (rewizji BASE), s scalane z nowo pobieranymi plikami.

Magazynu lokalnego odgazienia mona uywa jak normalnego magazynu. Czynnoci wykonywane na poszczeglnych rewizjach plikw bd jednak bardziej dotyczyy samego odgazienia, a nie pnia projektu. Z kolei czynnoci dotyczce kopii pliku znajdujcego si w repozytorium bd dotyczyy wszystkich jego instancji. Przykadowo, polecenie cvs status wydane
z poziomu magazynu lokalnego wygeneruje raport przedstawiajcy status lokalnych kopii
plikw, numery rewizji pnia dla rewizji roboczych i tych znajdujcych si ju w repozytorium
oraz aktualny znacznik odgazienia i rewizji oznaczony jako lepki.

Dodawanie i usuwanie plikw


Po kadym wykonaniu polecenia cvs add lub cvs remove na plikach przechowywanych w magazynie lokalnym odgazienia, operacja dodania lub usunicia plikw ogranicza si do plikw nalecych do odgazienia i nie obejmuje swoim dziaaniem pnia. W przykadzie 4.14
pokazano odpowied systemu CVS po dodaniu pliku do odgazienia.
Przykad 4.14. Dodawanie pliku do odgazienia
bash-2.05a$ cvs add handheld.c
cvs server: scheduling file `handheld.c' for addition on branch `beta_0-1_branch'
cvs server: use 'cvs commit' to add this file permanently

Scalanie odgazie
Proces scalenia odgazienia z pniem powoduje uwzgldnienie zmian dokonanych w trakcie
istnienia odgazienia w najnowszej wersji kodu pnia. To, czy dziaanie takie jest podane,
zaley od powodu, dla ktrego zostao ono utworzone. Jednym z takich powodw moe by
wczenie poprawek do kodu gwnego, innym ch wczenia zawartoci eksperymentalnego odgazienia do kodu gwnego. Mona rwnie scali zmiany z kodu gwnego do
odgazienia lub poczy razem zawarto dwch odgazie.
Oznakowanie odgazienia w momencie scalenia go z pewnoci naley do dobrej praktyki.
Znaczniki takie zachowuj si niczym markery wskazujce na to, kiedy miao miejsce kade
scalenie.

94

Rozdzia 4. Tworzenie znacznikw i odgazie

Po scaleniu dwch odgazie lub odgazienia i pnia, zwykle w efekcie otrzymuje si jeden
element zmodyfikowany i jeden, ktry pozosta bez zmian. Po scaleniu zmian z odgazienia
do pnia gwnego, a nastpnie po wprowadzeniu do repozytorium zmian z magazynu lokalnego, nastpna rewizja kodu gwnego bdzie uwzgldniaa wszystkie te zmiany. Aby mc
jednak pracowa na kopii kodu gwnego pozbawionej scalonych zmian, naley rozway
scalenie kodu gwnego z odgazieniem lub utworzenie nowego odgazienia zawierajcego
zarwno dane wchodzce w skad kodu gwnego, jak i dane z odgazienia.
Koczc prac z odgazieniami logicznym poleca si usunicie jej lub zamknicie jej w jakikolwiek inny sposb. CVS jednak nie oczekuje na to, i niewykorzystywane odgazienia bd usuwane. Zamiast tego przechowuje on je jako cz zapisu projektu. Nie istnieje rwnie
adne polecenie oznakowujce dane odgazienie jako nieuywane. Jako znacznika kocowego
odgazienia naley uy komunikatu dziennika.
Za pomoc polecenia cvs commit -f mona wymusi na CVS zsynchronizowanie
z repozytorium plikw, w ktrych nie zostay dokonane adne zmiany, po to aby
mc wprowadzi do dziennika komunikat na temat wykonanego scalenia tych plikw.

Scalanie zmian z odgazienia do kodu gwnego


W celu scalenia zmian z odgazienia do kodu gwnego, naley najpierw pobra pliki do aktualnego magazynu lokalnego pnia, a nastpnie uruchomi polecenie cvs update -j znacznik_
bazowy_odgazienia -j nazwa_odgazienia. Nastpnie konieczne jest rozwizanie
wszystkich zgoszonyh przez operacj scalenia konfliktw i wprowadzenie zmian do repozytorium. Jeeli wprowadzane zmiany maj zoony i kompleksowy charakter, rozwizaniem
konfliktw powinien zaj si jeden z deweloperw lub osoba prowadzca projekt, odpowiedzialna za zarzdzanie odgazieniami i kodem gwnym.
W przypadku, gdy odgazienie zostao ju wczeniej scalone z kodem gwnym i zostao ono
rwnie na tym etapie oznakowane, polecenie cvs update -j znacznik_ostataniego_
scalenia -j nazwa_odgazienia spowoduje scalenie zmian dokonanych od czasu ostatniej
operacji.
Przykad 4.15 przedstawia proces scalenia odgazienia z kodem gwnym. W tym wypadku
CVS odmwi usunicia zmienionego pliku z kodu gwnego, lecz usun taki plik w odgazieniu. Przykad ten demonstruje rwnie operacje dodania pliku handheld.c utworzonego
wczeniej w odgazieniu.
Przykad 4.15. Scalanie zmian z odgazienia do kodu gwnego
bash-2.05a$ cvs update -j beta_0-1_branch_root -j beta_0-1_branch
cvs server: Updating .
cvs server: file config.h has been modified, but has been removed in revision beta_01_
branch
U handheld.c

Scalanie zmian z kodu gwnego do odgazienia


Przed scaleniem zmian z kodu gwnego do odgazienia konieczne jest pobranie plikw do
aktualnego magazynu lokalnego odgazienia, a nastpnie uruchomienie z poziomu tego magazynu polecenia cvs update -j znacznik_bazowy_odgazienia -j HEAD. Nastpnie naley

Rozgazianie

95

rozwiza wszystkie zgoszone przez operacj scalenia konflikty i wprowadzi zmiany do


repozytorium. Jeeli wprowadzane zmiany maj zoony i kompleksowy charakter, rozwizaniem konfliktw powinien zaj si jeden z deweloperw lub osoba prowadzca projekt,
odpowiedzialna za zarzdzanie odgazieniami i kodem gwnym.
W przypadku, gdy kod gwny zosta ju wczeniej scalony z odgazieniem i zosta on rwnie
na tym etapie oznakowany, polecenie cvs update -j znacznik_ostataniego_scalenia -j HEAD
spowoduje scalenie zmian dokonanych od czasu ostatniej operacji.
Przykad 4.16 prezentuje wynik prby scalenia kodu gwnego z odgazieniem. Plik config.h
zosta usunity z odgazienia, lecz nadal jest obecny w kodzie gwnym. Konflikt ten musi
zosta rozwizany, najprawdopodobniej poprzez anulowanie operacji usunicia. Z kolei plik
handheld.c nie istnia wczeniej w kodzie gwnym, lecz poniewa zosta do niego dodany
podczas operacji scalenia zaprezentowanej w przykadzie 4.15, w zwizku z tym wygenerowany komunikat o bdzie dotyczcy tego pliku moe zosta zignorowany.
Przykad 4.16. Scalanie zmian z kodu gwnego do odgazienia
bash-2.05a$
cvs server:
cvs server:
cvs server:
U server.c

cvs update -j beta_0-1_branch_root -j HEAD


Updating .
file config.h does not exist, but is present in revision HEAD
file handheld.c exists, but has been added in revision HEAD

Scalanie zmian z odgazienia do odgazienia


Scalenia zmian z jednego odgazienia do drugiego mona dokona pobierajc pliki do magazynu lokalnego odgazienia docelowego, a nastpnie uruchomiajc polecenie cvs update -j
bazowa_nazwa_znacznika -j nazwa_drugiego_odgazienia. Dziki temu scalona zostanie
tym samym zawarto jednego magazynu lokalnego z drugim, odwieonym przed chwil,
magazynem lokalnym odgazienia.
W przypadku gdy dane odgazienia byy ju wczeniej scalane, a odgazienie rdowe na
tym etapie oznakowane, polecenie cvs update -j znacznik_ostataniego_scalenia -j nazwa_
odgazienia uruchomione z poziomu magazynu lokalnego odgazienia docelowego spowoduje scalenie zmian dokonanych od czasu ostatniej operacji.

Sowa kluczowe a scalanie odgazie


Zastpienia sw kluczowych (patrz: rozdzia 3.) mog powodowa konflikty w trakcie scalania dwch rnych rewizji plikw. Najczstsz przyczyn konfliktw jest sowo kluczowe
Revision, poniewa zostaje ono zastpione aktualn rewizj pliku. Konfliktw tych mona
unikn za pomoc trybu zastpowania sw kluczowych -kk, dziki ktremu sowa kluczowe
nie s zastpowane odpowiednimi wartociami.
Tryb -kk moe spowodowa uszkodzenie plikw binarnych, jeeli bd one zawieray acuch znakw, ktry CVS rozpozna jako nazw lub warto sowa kluczowego.

96

Rozdzia 4. Tworzenie znacznikw i odgazie

Scalanie plikw binarnych i plikw specjalnych


Zmiany poczynione w plikach binarnych, jak rwnie w innych plikach, ktrych nie da si
scali, nie mog niestety zosta automatycznie scalone. Pliki takie mog by scalone, pod warunkiem e istniej dla nich odpowiednie narzdzia dziaajce na podobnych zasadach jak
narzdzia diff i patch dla plikw tekstowych. W innym wypadku scalenie tego rodzaju plikw
trzeba bdzie przeprowadzi rcznie. Fakt ten powinien zosta wzity pod rozwag przy
planowaniu rozgaziania linii rozwojowej tego typu plikw.

Numery rewizji odgazie


Numery rewizji zwykych plikw skadaj si z prefiksu oraz ze zwikszajcego si skokowo identyfikatora, std te po zatwierdzeniu kolejnych zmian po rewizji 1.1 nastpuje
rewizja 1.2, 1.3 i 1.4.
Numer rewizji plikw odgazienia tworzony jest na podstawie numeru rewizji, z ktrej zostao ono odgazione. A zatem numerami rewizji dla odgazienia 1.4.2 bd numery 1.4.2.x,
gdzie za x naley przyj zmieniajcy si identyfikator rewizji. Warto przy tym pamita, e
odgazienie nie skada si z pojedynczej rewizji, w jego skad wchodzi caa linia rewizji.
Na rysunku 4.5 pokazano rozgaziony plik wraz z kolejnymi numerami jego rewizji.

Rysunek 4.5. Numery rewizji

System CVS nie nadaje nigdy odgazieniu stworzonemu przez uytkownika numeru 1.1.1, ten
konkretny numer rewizji zarezerwowany jest dla specjalnej gazi nazywanej gazi dostawcy.

Numery specjalne odgazie


System CVS wstawia czasami na pozycji drugiej z prawej strony numeru odgazienia cyfr
0. Czyni to, aby zapewni lepsz wydajno samego systemu CVS. Skutek takiego dziaania
moe czasem odbija si na dziaaniu polecenia cvs log, moe rwnie wpywa na polecenia
cvs admin wykonywane z poziomu odgazienia, lecz poza tymi przypadkami dziaanie to
nie jest w aden sposb widoczne na zewntrz. W przypadku gazi 1.4.2, jej numer bdzie wywietlany jako 1.4.0.2. Kolejne rewizje odgazienia nie bd jednak ju zawieray wspomnianego zera, numerem pierwszej rewizji w gazi 1.4.0.2, bdzie rewizja 1.4.2.1, a rewizj drug
bdzie 1.4.2.2.
Ta niestabilno zachowania w stosunku do liczby zero nie dotyczy jednak samego sposobu
uytkowania CVS, do gazi mona si odwoywa bez podawania zera. Przykadowo polecenia cvs update -r 1.4.2 i cvs update -r 1.4.0.2 pobior dokadnie te same rewizje plikw.

Rozgazianie

97

Usuwanie lub przenoszenie odgazie


Odgazienie usuwa lub przenosi si za pomoc polecenia cvs tag lub cvs rtag wraz z opcjami,
odpowiednio: -d lub -F. System CVS wymaga rwnie aby zostaa uyta opcja -B, aby upewni
si, e ma by usunita lub przeniesiona dokadnie ta ga, na ktr wskazuje odpowiedni
znacznik.
Nie zaleca si usuwania lub przenoszenia gazi z wyjtkiem przypadku, gdy zostaa ona
dopiero utworzona i jak do tej pory nikt na niej nie pracowa. Podczas gdy wikszo znacznikw mona usun bd przenie bez wpywania na zapis historii projektu, zmiany tego
typu dokonywane na gaziach staj si czci zapisu zmian w kadym pliku wchodzcym
w skad danej gazi.
Przykad 4.17 ilustruje operacj utworzonej chwil wczeniej gazi
Przykad 4.17. Usuwanie gazi
bash-2.05a$ cvs tag -d -B pre_beta_0-1_branch
cvs server: Untagging .
D Changelog
D INSTALL
D Makefile
D README
D TODO
cvs server: Untagging doc
cvs server: Untagging doc/design
D doc/design/AcceptanceTest.doc
D doc/design/Analysis.rtf
D doc/design/Requirements.doc
D doc/design/Specification.rtf
cvs server: Untagging doc/plan
D doc/plan/Schedule.rtf
cvs server: Untagging src
D src/config.h
D src/main.c

Strategie rozgziania
Podrozdzia ten przedstawia podstawy strategii tworzenia odgazie i dwie gwne przesanki
filozofii rozgaziania. Bdzie tu mona rwnie znale odpowiedzi na kilka pyta o to, kiedy
i dlaczego powinno tworzy si odgazienia.

Filozofia rozgaziania
Podstawow zasad rozgaziania jest zasada utrzymywania gwnej linii rozwojowej projektu
jako kodu gwnego (pnia) wszystko inne moe zosta rozgazione. Zasadniczy problem
powstaje w momencie, gdy trzeba okreli zasig gwnej linii rozwojowej. Czy gwna cz
kodu powinna skada si tylko z kodu stabilnego czy moe rwnie zawiera kod niestabilny? Czy kade kolejne wydanie powinno by odgaziane w celu przeprowadzenia testw?
Czy nowe funkcje powinny by opracowywane w kodzie gwnym, czy w odgazieniu?

98

Rozdzia 4. Tworzenie znacznikw i odgazie

Odpowiedzi na wszystkie powysze pytania zale od sposobu podejcia okrelanego przez


dwie zasadnicze definicje gwnej linii rozwojowej. Te dwie rne definicje skutkuj w dwch
rnych filozofiach rozgaziania, ktre mona okreli jako stabilnoci i niestabilnoci

Filozofia stabilnoci
Filozofia stabilnoci opiera si na zaoeniach, e kodem gwny programu powinien by
kod niemale gotowy do wydania. Do prac rozwojowych wykorzystywane s odgaziania,
poprawki, wersje testowe i refaktoryzacja. Odgazienia s rwnie uywane do opracowywania kodu eksperymentalnego.
Najbardziej ortodoksyjna odmiana tej filozofii zakada, e nic co nie przeszo przez dzia kontroli jakoci nie powinno by scalone do kodu gwnego. Daje to pewno, e jakakolwiek
wersja release candidate bazujca na kodzie gwnym, moe by opublikowana po poniesieniu
niewielkiego nakadu rodkw na testowanie, lub te sprzedana.
agodniejsze podejcie pozwala na scalenie z kodem gwnym wszystkiego, co zostao przetestowane, co najmniej na poziomie zespou projektowego. Podejcie takie wymaga jednak tego, aby wersja release candidate zostaa odgaziona, a nastpnie przed publikacj przesza pen
procedur testow i analiz dziau kontroli jakoci.
Do zalet filozofii stabilnoci mona zaliczy:
moliwo utworzenia w kadej chwili nowego wydania projektu na podstawie kodu

gwnego, po jego uprzednim przetestowaniu;


ze wzgldu na powolne tempo zachodzenia zmian w kodzie moliwo przeprowadza-

nia prac eksperymentalnych na odgazieniach przy niewielkim prawdopodobiestwie


zniweczenia wysikw innych osb po dokonaniu scalenia z powrotem do kodu gwnego.
Najwiksz niedogodnoci takiego podejcia jest to, e scalanie zwykle jest wtedy wykonywane przez testera, a nie przez osob rozumiejc semantyk scalanego kodu. Rwnie zagroenie tym, e kod gwny mg zmieni si znacznie od momentu, w ktrym nastpio
odgazienie do momentu scalenia, jest znaczne. Oba z tych problemw mog zosta zniwelowane poprzez dokonywanie okresowych scale, przy mniej restrykcyjnych zasadach, przeprowadzane przez jednego z deweloperw.

Filozofia niestabilnoci
Filozofia niestabilnoci zakada, e kod gwny programu powinien zawsze zawiera najnowsz wersj zmian, bez wzgldu na jego stabilno. Wersja release candidate powinna by
przy tym odgaziana w celu przeprowadzenia testw kontroli jakoci.
Najbardziej ortodoksyjna odmiana tej filozofii zakada, e cay proces rozwoju projektu odbywa si na poziomie kodu gwnego, podczas gdy odgazienia uywane s dla wersji release
candidate, wersji odgazie poprawkowych, a take kolejnych wyda.
agodniejsze podejcie pozwala na odgazianie w celu przeprowadzania prac nad kodem
eksperymentalnym, refaktoryzacji i w innych specjalnych przypadkach. Ponowne scalanie
odgazienia do pnia gwnego wykonywane jest przez menederw odgazie.

Strategie rozgziania

99

Do zalet tej filozofii mona zaliczy brak koniecznoci przeprowadzania czstych scale, a co
znaczco je rwnie uatwia, gdy mog by one przez to wykonywane przez osoby bardziej
obeznane z kodem.
Najwiksz niedogodnoci tej filozofii, szczeglnie w odniesieniu do jej najbardziej restrykcyjnej wersji, jest to, e kod gwny zawiera czsto niestabilny kod z du iloci bdw, kod eksperymentalny, lub nawet czasem taki, ktry zupenie nie daje si skompilowa. Niedogodno ta
moe zosta zmniejszona poprzez czste oznaczanie plikw w momentach, gdy ich kod jest
poprawny,b te w momentach, gdy kto rozpoczyna na nim prace eksperymentalne lub refaktoryzacyjne. agodniejsze podejcie preferuje przechowywanie kodu eksperymentalnego
oraz takiego, ktry moe spowodowa najwiksze problemy z dala od kodu gwnego, co redukuje czas potrzebny do przygotowania wydania projektu do publikacji.

Sposoby rozgaziania
System CVS umoliwia tworzenie i wykorzystywanie odgazie, nie narzuca on jednak adnej
szczeglnej techniki wykonywania tych zada. W punkcie tym zostan przedstawione niektre z tych technik.
W niniejszym podpunkie okrelenie ga duga oznacza albo aktualne odgazienia, albo odgazienia scalone ju kilkakrotnie wczeniej, a nie uywane obecnie. Ga krtka oznacza z kolei odgazienie scalone raz z kodem gwnym, lecz nie uywane od tego czasu.
CVS umoliwia ponown aktywacj odgazienia w dowolnym momencie; nie mona powiedzie zatem, e dane odgazienie nie jest duej wane. Zakoczenie prac nad gazi
polega po prostu na poinformowaniu deweloperw o tym, e ga ta nie bdzie ju duej
przedmiotem aktywnego rozwoju.

Scalanie do dugiej gazi


Posiadanie aktywnego odgazienia, do ktrego systematycznie scalane s zmiany kodu gwnego jest uyteczne w sytuacjach, gdy zmiany z odgazie nie powinny wpywa na kod gwny, ale s one potrzebne w odgazieniu. Metoda ta moe by wykorzystywana do tworzenia
i zarzdzania kopiami lustrzanymi witryn sieciowych. Rysunek 4.6 ilustruje zasady tej techniki.

Rysunek 4.6. Kod gwny scalany systematycznie do dugiej gazi

Scalanie dugiej gazi do kodu gwnego


Posiadanie aktywnego odgazienia, scalanego systematycznie z kodem gwnym jest uyteczne w sytuacjach, gdy zmiany bdce rezultatem trwajcych prac nad kodem gwnym
nie powinny wpywa na kod odgazienia, przy rwnoczesnej potrzebie zawarcia zmian
z odgazienia w kodzie gwnym. Przykadem zastosowania moe by kada sytuacja, w ktrej naley przetestowa i przygotowa do opublikowania dane odgazienie. Projekty, w ktrych testowanie ju trwa mog wykorzystywa t technik poprzez wczenie zawartoci
100

Rozdzia 4. Tworzenie znacznikw i odgazie

testowanego kodu do odgazienia, a nastpnie ponownego scalenia poprawek z powrotem


do kodu gwnego (rysunek 4.7).

Rysunek 4.7. Scalanie dugiej gazi do kodu gwnego

Scalanie dugiej gazi zarwno do kodu gwnego, jak i do innej gazi


Duga ga scalana w obydwu kierunkach zapewnia zarwno odzwierciedlenie zmian odgazienia w kodzie gwnym, jak i sytuacj odwrotn tj. uwzgldnienie zmian kodu gwnego w odgazieniu. W przypadku, gdy deweloperzy pracujcy na poziomie odgazienia
prowadz na nim biece prace rozwojowe, odgazienie moe by scalone z powrotem do
kodu gwnego po kadym zakoczonym etapie. Wprowadzanie do odgazienia zmian z kodu gwnego moe by dokonywane zawsze wtedy, gdy s do tego przygotowani deweloperzy odgazienia. Technika ta moe by przydatna, jeli sekcja po sekcji przepisywany jest stabilny
ju kod, podczas gdy do kodu gwnego dodawane s nowe funkcje programu (rysunek 4.8).

Rysunek 4.8. dwukierunkowe scalanie dugiej gazi

Gazie krtkie
Przykadem krtkiej gazi moe by pojedyncze odgazienie uyte w celu wykonania jednej, prostej zmiany. Ga taka moe by idealnym wyborem w momencie, gdy powstaje potrzeba dodania jednej funkcji, napisania kodu eksperymentalnego, czy te np. przygotowania
do kolejnego wydania.
Gazi krtkich mona rwnie uy w celu zasymulowania dugiej gazi scalonej do kodu
gwnego i z nim. Seria krtkich gazi pozwala unikn koniecznoci scalania zmian odgazienia do kodu gwnego, a nastpnie zmian kodu gwnego do odgazienia. Zamiast tego
wystarczy scali zmiany z odgazienia do kodu gwnego, a nastpnie utworzy nowe odgazienie, bazujce na kodzie gwnym. Metoda ta moe by uyteczna w momencie, gdy zmiany zarwno w kodzie gwnym, jak i w odgazieniu s znaczne (rysunek 4.9).

Rysunek 4.9. Gazie krtkie

Strategie rozgziania

101

Gazie zagniedone
CVS pozwala rwnie na tworzenie odgazie z odgazie. Ga gwn traktuje si przy
tym jako kod gwny, a do zarzdzania podgazi stosuje si jedn z opisanych ju wczeniej
technik. Gazie zagniedone s najbardziej przydatne do zarzdzania zmianami konfiguracji.
Aby unikn zamieszania, naley wystrzega si zbytniego rozbudowywania gazi zagniedonych.
W przypadku, gdy w trakcie opracowywania nowego zestawu funkcji w danej gazi powstaje
potrzeba przekazania jednej z tych funkcji do testowania przy rwnoczesnym zachowaniu
cigoci prac nad odgazieniem, mona utworzy odgazienie testowe, skadajce si tylko
z testowanej funkcji. Na rysunku 4.10 przedstawiono zestaw gazi zagniedonych, odczonych
od gwnego kodu projektu.

Rysunek 4.10. Gazie zagniedone

Polityka rozgaziania
Jednolite zasady mog pomc zapewni, e odgazianie projektu bdzie rzeczywicie stanowio
dla niego znaczc pomoc. Bez tego, moe okaza si, e jedyne co nam zostao to trudny do
ogarnicia baagan w odgazieniach, gdzie nie sposb przeledzi ich rozkadu.
Dziki okrelonym i wprowadzonym w ycie jednolitym zasadom mona przeprowadza
operacj scalania w bardzo prosty sposb. Minimalizacja iloci scale wymaga wikszej komunikacji pomidzy deweloperami pracujcymi nad odgazieniem i tymi zajmujcymi si
kodem gwnym.
Najlepiej wypracowa takie zasady, ktre bd przynosiy wymierne korzyci zespoowi
projektowemu. Ponisze zasady okazay si pomocne dla autorki i jej zespou:

1. Okrelenie oglnych zaoe projektu.


2. Zminimalizowanie iloci aktualnie aktywnych odgazie oraz upewnienie si, czy kade
z nich ma okrelone zadanie.
3. Zminimalizowanie zoonoci systemu odgazie. CVS umoliwia tworzenie odgazie
zagniedonych, jednak zoone systemy odgazie bardzo rzadko okazyway si pomocne.
4. Uywanie jednolitego schematu nazewnictwa odgazie, ktry odzwierciedlaby rwnoczenie przeznaczenie kadego odgazienia.
5. Uwiadomienie sobie semantycznych rnic pomidzy odgazieniem i kodem gwnym;
dobry projekt jak rwnie sprawna komunikacja mog przyczyni si do zminimalizowania tych rnic.
102

Rozdzia 4. Tworzenie znacznikw i odgazie

Przykadem rnicy semantycznej jest sytuacja, gdy jeden z deweloperw zmieni liczb
(lub, co gorsza, kolejno) parametrw funkcji, podczas gdy inny prbuje wywoa t funkcj
ze starymi parametrami.

6. Unikanie uywania plikw binarnych tam, gdzie si tylko da, aby umoliwi systemowi
CVS automatyczne dokonywanie operacji scalania.
7. Czste scalanie zmian. Im mniej zmian do jednorazowego scalenia z kodem gwnym,
tym atwiej jest je scali.
8. Oznaczanie odgazienia przy kadym scalaniu, co pozwala unikn ponownego scalania
tych samych zmian.
9. Oznaczanie kodu gwnego w momencie tworzenia odgazienia, jak rwnie tu
przed i po wykonaniu operacji scalenia, na wypadek gdy powstaaby potrzeba ponownego odtworzenia zawartoci kodu gwnego dla tych momentw.
Uywanie jednolitego schematu nazewnictwa znacznikw powizanych z odgazieniami.

Strategie rozgziania

103

You might also like