Sprava verzi


Co je to sprava verzi

Predstavte si, ze vytvarite (napr. pisete...) nejaky program, skladajici se z nekolika modulu, a spolupracujete pri tom s nekolika kolegy. Udrzovani poradku ve zdrojacich (vcetne napr. vedeni historie), oznaceni "chodicich" kombinaci jednotlivych modulu, vytvareni distribucnich archivu apod., to vse se da nazvat sprava verzi.

Na prvni pohled se vyse uvedene cinnosti mohou jevit jako neco, co pouze zdrzuje a odvadi opravdove programatory od jejich skutecne prace (a taky tomu tak skutecne vetsinou je). Avsak jen do doby, kdy se nam diky "dobre koordinovane spolupraci" nekolikrat podari zcela "rozkopat" pracne odladeny zdrojak (coz se stane temer vzdy, kdyz do nej zasahne nekolik lidi soucasne), nebo nemuzeme nikde na disku objevit (natoz poskladat dohromady) zdrojaky od kdysi prelozene verze programu, ktera dobre funguje.

Jsou tedy situace, pri kterych dobre usporadany balik zdrojaku vcetne cele historie jeho tvorby uvitame. Abychom se pritom se spravou verzi nemuseli moc trapit, existuje nekolik programu, jez ji usnadnuji.


RCS (Revision control system)

RSC je balik programu (zejmena rcs, ci, co, rcsdiff a rcsmerge) pro spravu verzi.

rcs
- slouzi k vytvareni noveho RCS souboru nebo ke zmene atributu existujiciho
ci
- (check in) vlozi do RCS souboru novou verzi
co
- (check out) vybere verzi z RCS souboru (pripadne ji zamkne)
rcsdiff
- spusti diff k porovnani dvou verzi z RCS souboru
rcsmerge
- vpracuje zmeny mezi dvema verzemi do pracovniho souboru


Funkce RCS:

Popis:
Soubory se uchovavaji v RCS-souborech, ktere maji priponu ",v". Ty jsou obycejne v podadresari RCS. Novy RCS soubor vytvorime jednoduse prikazem ci. Pomoci prikazu co, pripadne co -l vytvorime pracovni kopii souboru (read-only, pripadne zamknutou read-writre). Read-only kopie se hodi napr. pri kompilaci apod., kdy soubor nechceme menit, ale pouze pouzivat. Ostatni zatim mohou vyvijet nove verze. V pripade, ze chceme soubor editovat, vytvorime read-write kopii souboru, cimz jej zamkneme pro sebe a nemuze dochazet ke konfliktum s ostatnimi. Po skonceni editace pridame novou verzi souboru do RCS-souboru prikazem ci. Tak umoznime ostatnim pouzivat novou verzi. Pri vytvareni kopie muzeme pomoci options ziskat kteroukoli verzi (nejen posledni) souboru.

Priklad:

mkdir RCS
ci pokus.c		# vytvoreni souboru pokus.c,v s pocatecni verzi 1.1
			# bude pozadovan komentar - popis souboru

co pokus.c		# ziskani lokalni read-only kopie
co -l pokus.c		# ziskani lokalni read-write kopie pro editaci
#
# ...editace...
#
ci -u pokus.c		# zaznamenani nove verze 1.2 
			# + ponechani read-only kopie
			# bude pozadovan komentar - popis zmen

co -r1.1 pokus.c	# ziskani read-only kopie verze 1.1

rm -rf $HOME		# svet je krasny


CVS (Concurrent Versions System)

CVS je nadstavba nad RCS, ktera umoznuje:

Pouziti:
cvs [options] command [command-options] [parameters]

Zakladni prikazy:

add file...
prida file... do baliku

remove file...
odstrani file... z baliku

update
obnovi lokalni kopie zdrojaku

checkout modules...
vytvori lokalni kopie zdrojaku

commit file...
provede lokalni zmeny do souboru v baliku

Popis:
CVS uchovava soubory pomoci RCS v adresari urcenem promennou $CVSROOT. My pracujeme vzdy pouze s lokalni kopii, ziskanou prikazem cvs checkout. Chceme li zmeny v lokalni kopii promitnout do hlavnich souboru, pouzijeme cvs commit. Pro obnovu lokalnich kopii z hlavnich souboru slouzi cvs update. Pri obnove muze dojit ke kolizi, jestlize doslo ke zmene lokalni kopie tehoz souboru, s kterym pracoval jeste nekdo jiny, a nepovedlo se "zmergeovani". Tu je pak treba rucne vyresit, ale temer nikdy se to nestava.
Popis modulu (skupina souboru, na kterou se lze odvolavat symbolickym jmenem) je obsazen v souboru $CVSROOT/modules,v


diff & patch

Programy diff a patch umoznuji pri zmene verze prenaset pouze tyto zmeny misto prenaseni kompletniho souboru.

diff
porovna dva soubory (nebo cele adresare, pripadne i rekurzivne) a vypise zmeny
patch
provede zmeny, ziskane pomoci diff

Priklad pouziti:
Mejme starou a novou verzi programu. Nekdo jiny ma pouze starou verzi. Pouzijeme diff k ziskani vypisu zmen mezi verzemi. Preneseme pouze tento vypis. Aplikujeme zmeny pomoci patch. Nyni mame oba novou verzi.


Literatura

Bohatym zdrojem dalsich informaci necht vsem pripadnym zajemcum jsou manualove stranky.


Petr Mourek, 3.5.1995