CVS - wprowadzenie
by The Deadline Crew
Przejdź do tutoriala.
Co to jest?
Concurrent Versions System wykorzystuje się do zbiorowej pracy nad wszelkimi plikami tekstowymi, takimi jak kody źródłowe programów czy dokumenty XML, HTML, itp. CVS umożliwia kontrolę wersji plików danego projektu w który zaangażowana może być dowolna ilość autorów. Można przeglądać etapy rozwoju projektu, cofać się do jego dowolnego stadium rozwoju, porównywać zmieniające się wersje plików, czy rozgałęziać projekt.
Postawowe pojęcia
- repozytorium - to miejsce, w którym przechowywane są
pliki projektów (w postaci modułów) i pliki konfiguracyjne CVS.
Dostęp do repozytorium realizowany jest różnymi metodami. Niniejsze
omówienie skupia się na uwierzytelnianiu zdalnych klientów przy
pomocy haseł (pserver). W praktyce, repozytorium to katalog
z modułem administracyjnym CVSROOT i modułami projektów.
- moduł - podkatalog w repozytorium zawierający pliki
przy pomocy których CVS kontroluje rozwój danego projektu. Szczególnym
modułem jest CVSROOT - w nim znajdują się pliki konfiguracyjne
repozytorium.
- piaskownica, katalog roboczy - kopie projektów pobrane i
synchronizowane z repozytorium, wykonywane przez autorów projektu
we własnym zakresie. Zawartość poszczególnych piaskownic jest
niezależna, o aktualność swoich wersji projektu należy zadbać
samodzielnie. Piaskownice mogą przedstawiać nie tylko bieżącą
postać projektu, ale również jego wcześniejsze stadia.
- rewizja - to konkretna postać danego pliku projektu
(określona numerem).
- konflikt - następuje gdy dwu (lub więcej) autorów
próbuje jednocześnie zmienić ten sam fragment któregoś pliku w
projekcie, a CVS nie potrafi połączyć wprowadzanych zmian w
całość. Autor wprowadzający ostatnie zmiany będzie musiał
ręcznie poprawić sporne miejsca.
CVS keywords
- $Id$ - nazwa pliku RCS, numer rewizji, data wprowadzenia do repozytorium, autor, stan pliku
- $Log$ - nazwa pliku RCS, numer rewizji, data, autor, komentarz
- $Date$ - data
- $Author$ - autor
- $Revision$ - numer rewizji
Polecenia
- cvs -d /usr/local/cvsroot init - tworzy CVSROOT w podanym katalogu
- export CVSROOT=:pserver:login@adres:/home/cvs
- cvs login
- cvs logout
- cvs import nazwa_projektu nazwa_galezi nazwa_startowa
tworzy nowy projekt wrzucajac wszystkie pliki z biezacego katalogu
- cvs checkout nazwa_projektu
pobranie calego repozytorium
- cvs update [pliki]
uaktualnia pliki lokalne na wersje z repozytorium
- cvs commit [pliki]
wyslanie plikow na serwer
- cvs status
status kazdego pliku
- cvs log
przejrzenie komentarzy przy zmianach pliku
- cvs add pliki
wymaga commita potem
- cvs remove pliki
jw.
Opcje wspolne dla wielu polecen
- -m string
komentarz
- -r tag
wybor rewizji po tagu
- -d katalog
ustawia CVSROOT (ignoruje zmienna systemowa)
- -D data
wybor rewizji po dacie (najnowszy do daty)
Spis oznaczeń polecenia update
- A - added
- C - conflict
- M - modified
- P - patched
- R - removed
- U - updated
- ? - nie ma w repozytorium, jest w piaskownicy
Tagowanie
- cvs tag nazwa [pliki]
taguje wszystkie pliki, lub pliki z bieżącego katalogu (rekurencyjnie też)
- cvs rtag -b -r stara_galaz nowa_nazwa_galezi nazwa_projektu
tworzy nowa galaz ktorej baza jest stara_galaz
- cvs update -j tag [pliki]
pobiera z repozytorium pliki zaznaczone tagiem i "mergeuje" je z plikami lokalnymi.
robi sie tak dla polaczenia galezi, np. niech Galaz bedzie odgalezieniem Glownego.
robimy cvs checkout Glowny; cvs update -j Galaz; cvs commit;
- cvs update -j starszy_tag -j nowszy_tag [pliki]
pobiera z repozytorium zmiany miedzy starszy_tag a nowszy_tag i aplikuje je do plikow lokalnych. reszta jw.
O czym powiedzieć
- wszelkie opcje -r, -D, branchowanie, są LEPKIE, tzn aplikują się do kolejnych poleceń wydawanych plikom
z tego samego katalogu, np. jeśli zrobimy cvs update -r cos, to kolejne update'y będą też
działały z "domyślną" opcją -r cos. aby "odlepić" taga, należy użyć opcji update -A
- głupie rename - bo go nie ma. trzeba cvs remove; cvs add; ale wtedy traci się historię
- COMMIT NIE JEST ATOMOWY! (robię commit a b, to ktos moze w tym czasie robic checkout i dostac stare a albo stare b)
- CVS jest głupi (nie ma move i rename, numeruje oddzielnie każdy plik)
- Subversion - lepszy CVS; podobna składnia; zawiera move i rename; rewizje są dla całych zestawów plików,
a nie pojedynczych plików; atomowy commit; składnia właściwie identyczna do CVS
Chcecie więcej?