«« ( Date ) »» // «« ( Thread ) »» // csidc - 2002

CVS

by Dragan Milenkovic
utorak, 26. novembar 2002 - 21:49.

Dakle, mali tutorial... Ali pre toga problemi:

Meni cvs prijavljuje da user 'dragan' ne postoji,
a Zdravku da ne moze da se autorizuje (ili nesto slicno).

Srecom, to nam jos uvek ne treba, ali ja obecah uputstvo:

cvs komanda ima sledeci "usage":
cvs [globalne-opcije] <komanda> [opcije-komande]

Jedina korisna globalna opcija je -z9 sto znaci maksimalna
kompresija.

1. Svoju kopiju direktorijuma pravite komandom checkout (skraceno
'co'). To postoji u onom uputstvu na plone-u i NE radi, ali format je
uvek sledeci:

cvs [-z9] -d<cvs-root> checkout <modul>

Kreira se kompletna struktura direktorijuma kao i na serveru, a sve
pocinje u direktorijumu <modul>. Kreiraju se i neki kontrolni podaci,
njih mozete naci ako prchkate po direktorijumima sa imenom CVS.

O svakom fajlu se zna koja je verzija u pitanju i da li je
modifikovan. Da pojasnim: dovucete neku verziju 1.3 sa servera i nesto
promenite. Jos uvek je to verzija 1.3, ali ima status Localy-Modified.

2. Status fajlova

cvs status
cvs status <fajl>

Kaze vam lepo koja je verzija na serveru, koja kod vas i da li je
"Localy-Modified".

3. Commit - predaja fajlova serveru. Ova komanda nece uspeti ako
nemate najnoviju verziju. Tj. ako ste dohvatili 1.3, a neki divljak je
nesto menjao i "commit-ovao" i tako je najnovija verzija sada 1.4 =>
commit vama ne radi. Kada pogledate status tog fajla pise "Merge
needed".

cvs commit -m 'implementirano mlacenje prazne slame'
cvs commit -m 'implementirano mlacenje prazne slame' slama.cpp

4. Update - vrhunac genijalnosti CVS-a. Dohvata novu verziju.
Necete kao na RI4ST raditi stalno checkout. To se radi samo prvi put
(ili ako obrisete svoj work direktorijum, ali to je izuzetak).

cvs update
cvs update <fajl>

Sta znaci dohvata novu verziju? Vratimo se na prethodni primer. Imate
1.3 nekog fajla, i ispravili ste neki bug ili nesto promenili, ali
neko je vec tu nesto menjao, pa je sada aktuelna verzija na serveru
1.4. Status vaseg fajla je "Merge-needed", a to podrazumeva da je fajl
lokalno modifikovan. Ako bi ste dovukli novu verziju pa tamo iz
pocetka pravili iste ispravke, onda CVS nicemu ne bi sluzio.

"cvs update" ce pokusati (VEOMA USPESNO) da uradi merge, tako da na
kraju vi zavrsite sa verzijom 1.4 koja sadrzi i vase izmene. Mehanizam
je jednostavan - izmene koje ste vi vrsili nad datim fajlom (vidi diff
dole) u verziji 1.3 pokusaju da se ubace u verziju 1.4.

Za svaki obradjeni fajl dobijete slovo pre imena fajla koje govori o
tome sta je uradjeno sa njim. Moguce je:
U - imali ste staru ne-modifikovanu verziju koja je update-ovana
A - nad ovim fajlom je izvrsen 'add', ali niste uradili commit
R - nad ovim fajlom je izvrsen 'remove', ali niste uradili commit
M - imali ste staru verziju koju ste modifikovali, sada imate novu
verziju koja i dalje ima vase modifikacije
M - takodje znaci da sa fajlom nista nije uradjeno (bio svez i
modifikovan - ostao takav)
? - ovaj fajl postoji u vasem direktorijumu, ali nije deo CVS-a.
Mozete ga dodati sa add, ali to moze biti i neki obj fajl nastao
u procesu kompajliranja i kao takvom mu nije ni mesto u CVS-u.
C - CONFLICT. Neko je izvrsio MNOGO gadne modifikacije u onoj verziji
1.4 tako da je potreban ljudski faktor da se konflikt razresi.


5. Poslednje sto je potrebno za osnovno koriscenje -
dodavanje/oduzimanje fajlova

cvs add <fajl>
cvs remove <fajl>

Dodace dati fajl u bazu, ali samo u vasoj lokalnoj kopiji, tako da
nakon toga (ili mnogo kasnije) treba uraditi nesto kao:

cvs commit -m 'dodate klase za rad za bazom podataka'

6. Diff - da bi se podsetili sta ste menjali

cvs diff [-u]
cvs diff [-u] <fajl>

-u znaci da se koristi nesto sto se zove "unified output format",
smatram da je dosta pregledniji... probajte...

------------------------------------------------------------------

Moze se primetiti da skoro sve komande imaju verziju sa i bez fajla.
Sa fajlom je jasno, a ono bez fajla vrsi rekurzivno za sve fajlove u
trenutnom direktorijumu i njegovim poddirektorijumima.

update i commit najcesce koristite rekurzivno, a status i diff nad
jednim fajlom. U tom slucaju commit ce predati samo modifikovane
fajlove i nalepiti svima istu poruku. To je korisno ako ispravka nekog
bug-a podrazumeva modifikovanje vise fajlova - jedna komanda i sve je
commit-ovano, poruka jasno govori zasto.

Eh, da... te poruke citate sa
cvs log
cvs log <fajl>
ili bolje iz onog web-cvs browsera, tj. plone-a.


Ajd sad pitanja... Mada posto nemate gde da probate mislim da ih za
sada nece biti.

P.S. Ako u ovom tekstu ima bilo kakvih gresaka (sintaksnih,
semantickih, ...) ne mogu vam pomoci. Ja se tamo gore ne vracam!!!

--
Dragan Milenkovic