Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
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
15
17
21
27
29
32
33
34
35
37
38
39
41
43
45
50
53
55
62
64
68
69
70
74
76
5
77
86
88
98
Cz III Administracja
106
106
112
115
118
119
123
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
204
207
208
213
215
217
221
222
222
223
Cz IV Pomoc techniczna
225
227
230
274
276
287
289
293
295
298
300
Dodatki
303
Spis treci
ROZDZIA 4.
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
.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
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.
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
80
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.
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.
82
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:
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
84
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.
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
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.
88
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.
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.
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
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)
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
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.
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.
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
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.
Rozgazianie
95
96
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.
Rozgazianie
97
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
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
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.
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).
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.
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:
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