CVS - podstawy - Koło Naukowe Systemów Open Source

Transkrypt

CVS - podstawy - Koło Naukowe Systemów Open Source
CVS - podstawy
Koło Naukowe Systemów Open Source
Wyzsza Szkoła Biznesu - National-Louis University
Krzysztof Walo
[email protected]
Czym jest CVS?
CVS to system kontroli wersji. Służy do zapisywania i przechowywania zmian w plikach
źródłowych . Umożliwia wielu programistom pracę nad jednym projektem. Zapewnia dostęp
do źródeł w dowolnej wersji.
Synopsis:
I\Y AI\Y UVZOUTYC IUSSGTJ AIUSSGTJ UVZOUTYC AIUSSGTJ GXMYC
cvs options - Opcje globalne. Mają wpływ na wszystkie komendy
command - Komenda. Ma główny wpływ na zachowanie programu
command options - Opcje dla danej komendy
command args - Argumenty - najczęściej jest to plik (katalog), lista plików, albo moduł
Pomoc
- Pomoc na temat opcji globalnych
I\Y NKRV UVZOUTY
- Lista wszystkich komend
I\Y NKRV IUSSGTJY
- Opcje pojedynczej komendy
I\Y . IUSSGTJ
Pobieranie źródła
CVS w przeciwieństwie do innych systemów kontroli wersji, nie blokuje tych plików, które
są poddawane edycji. Ściąga za to źródła w odpowiedniej wersji z repozytorium do katalogu
roboczego.
Komenda:
I\Y J A SKZUJG C YIOK`QG JU XKVU`_ZUXO[S INKIQU[Z SUJ[R
Pobiera źródła w najnowszej wersji z gałęzi głównej.
Metoda określa sposób dostępu do repozytorium.
Główne metody dostępu:
* :local: - dostęp do zasobów lokalnych
* :ext: - zasoby zewnętrzne
* :server: - jak wyżej
* :pserver: - dostęp chroniony hasłem
Moduł to jakiś katalog ze źródłami, znajdujący się w repozytorium.
Ścieżkę do repozytorium można zapisać w zmiennej środowiskowej CVSROOT:
K^VUXZ )<9855:# YIOK`QG JU XKVU`_ZUXO[S
I\Y INKIQU[Z SUJ[R
Usuwanie źródeł
Komenda:
I\Y XKRKGYK J QGZGRUM
Usuwa źródła i sprawdza, czy wszystkie pliki są zatwierdzone.
Zatwierdzanie plików zastępuje w pewnym sensie blokowanie w innych systemach kontroli
wersji.
Tworzenie nowego repozytorium
Repozytoria to miejsca, gdzie cvs przechowuje pliki historii, oraz inne pliki konfiguracyje.
Stąd są pobierane źródła w odpowiedniej wersji do katalogu roboczego. Repozytorium
powinno być dostępne (lokalnie, lub przez jakieś połączenie) z wszystkich miejsc, które chcą
z niego kożystać. Ilość miejsca na dysku powinna być trzykrotnie większa niż szacowany
rozmiar projektu.
Repozytorium tworzy się komendą:
I\Y J [YX RUIGR I\YXUUZ OTOZ
Opcja '-d' możne być zastąpiona zmienną środowiskową CVSROOT.
W katalogu CVSROOT, w repozytorium znajdują się różne pliki konfiguracyjne. W
pozostałych katalogach, są pliki historii. Pliki historii są zakończone ',v'. Tam są
przechowywane wszystkie informacje o zmianach, jakie były przeprowadzone.
Dodawanie projektu do repozytorium
Przykładowo, jeśli mamy źródła w katalogu ~/myproj i chcemy je dodać do repozytorium
cvs, wykonujemy nast. komendy:
IJ d S_VXUP
I\Y J [YX RUIGR I\YXUUZ OSVUXZ VXUPKQZ_ S_VXUP S_VXUP YZGXZ
Cvs otworzy edytor teksu, aby wpisać wiadomość do historii. Edytor można zdefiniować w
zmiennej środowiskowej EDITOR, jeśli zmienna nie jest zainicjowana, zostanie użyty vi.
Zamiast otwierać edytor, można podać wiadomość po opcji '-m', np.
I\Y J [YX RUIGR I\YXUUZ OSVUXZ S /SVUXZ S_VXUP VXUPKQZ_ S_VXUP S_VXUP YZGXZ
Kolejne argumenty 'projekty/myproj' to nazwa modułu, myproj i start to odpowiednio:
główny tag (vendor tag) i tag wydania (release tag).
Zatwierdzanie zmian
W przeciwieństwie do większości systemów kontroli wersji, CVS nie tworzy blokad na
plikach, które podlegają edycji, tylko tworzy kopie robocze, na których developerzy pracują
niezależnie. Po skończonej pracy, zmiany należy zatwierdzać.
Do zatwierdzania zmian, służy polecenie:
I\Y IUSSOZ S 1USKTZGX` VROQ
Jesli nie użyje się opcji -m, cvs otworzy edytor, aby wpisać komentarz do wprowadzonych
zmian. Edytor możemy wybrać, ustawiając zmienną środowiskową EDITOR.
Jeżeli wielu programistów pracuje nad jednym plikiem, może zajść sytuacja, kiedy będziemy
próbowali zatwierdzić plik, który został zmodyfikowany przez kogoś innego. Należy wtedy
przywrócić plik do najnowszej wersji (np. komendą update), nałożyć swoje zmiany i
ponownie próbować zatwierdzić.
Jeśli nie mamy praw zapisu w repozytorium, możemy wysłać developerowi wynik polecenia:
I\Y JOLL VROQ
Polecenie to wyświetla na ekran różnice między lokalnie zmodyfikowanym, a ostatnio
zatwierdzonym plikiem. Zmiany te można dodać do pliku za pomocą polecenia patch.
Dodawanie/usuwanie plików
Do dodawania/usuwania plików do/z repozytorium służą komendy:
I\Y GJJ
I\Y XKSU\K
Dodawanie:
Zanim dodamy jakiś plik musimy go stworzyć w katalogu roboczym:
ZU[IN VROQ
I\Y GJJ VROQ
I\Y IUSSOZ VROQ
@GZ]OKXJ`GS_ `SOGT_
Usuwanie:
XS VROQ
I\Y XKSU\K VROQ
I\Y IUSSOZ VROQ
Katalogów w cvs nigdy nie usuwamy!!! Spowodowałoby to, że nie możnaby odzyskać źródeł
sprzed usunięcia katalogu! Zamiast tego usuwamy/przenosimy wszystkie pliki z katalogu,
który chcemy 'usunąć'. Podczas pobierania źródeł do komend update, albo checkout
dodajemy opcję -P.
I\Y [VJGZK 6
Dzięki temu cvs nie pobierze pustych katalogów. Jeśli chcemy pobierać puste katalogi z
opcją -P, można w nich utworzyć ukryte pliki, np.
ZU[IN V[YZ_EQGZGRUM `GINU]GPESTOK
I\Y IUSSOZ V[YZ_EQGZGRUM `GINU]GPESTOK
Tagi
Tagi służą do nadawania nazw zatwierdzonym plikom. Dzięki nim można mieć dostęp do
poprzednich wersji plików, tworzyć gałęzie, itp.
Rozróżniamy następujące rodzaje tagów:
* Rewizje - każdy plik otrzymuje numer rewizji, wzrasta on za każdym razem, kiedy
zatwierdzamy plik. Numer jest przydzielany automatycznie
* symboliczne tagi - nadają nazwy odpowiednim numerom rewizji
* tagi gałęzi - nazwy nadawane gałęziom projektu
Rewizje
Rewizje to numery, które identyfikują wersję pliku. Numery rewizji mają zawsze
nieparzystą ilość kropek.
Przykładowe numer rewizji:
Za każdym razem kiedy zatwierdzamy jakiś plik, ostatnia liczba w numerze rewizji jest
zwiększana o 1. Rewizje, które mają więcej niż jedną kropkę, reprezentują pliki w gałęziach.
Przypisywanie numerów rewizji:
Z reguły nie ma potrzeby zmieniać numerów rewizji. Jest to jednak możliwe. Jeżeli np.
mamy program, który doczekał się wersji 2.0, możemy przypisać wszystkim plikom numer
rewizji 2.0. Wydajemy komendę w katalogu roboczym:
I\Y IUSSOZ X
Przydzielanie tagów
Plikom o odpowiednim numerze rewizji, można nadawać symboliczne nazwy - tagi. Nazwy
tagów nie mogą się składać z białych znaków. Do przydzielania tagów plikom o numerach
rewizji aktulanie znajdującym się w repozytorium służą komendy:
I\Y ZGM TG`]G ZGM[ VROQ
I\Y XZGM TG`]G ZGM[ SUJ[R
Komenda 'rtag' operuje wyłącznie na modułach, a 'tag' na plikach.
Tagi można przydzielać także innym wersjom plików, np.
I\Y ZGM X
VOKX]Y`_ VROQ
Przydziela tag 'pierwszy' plikowi 'plik' o numerze rewizji '1.1'.
Jeśli projekt posiada numery wydania, każde wydanie powinno mieć swój tag. Tagi dla
wydania powinny mieć specjalne nazewnictwo, np. nazwa i numer wydania oddzielony
znakiem minus, zamiast kropki.
Przydzielenie tagów dla wersji:
I\Y XZGM XKR
S_VXUP
Przeglądanie, wybieranie tagów
Przeglądanie:
I\Y YZGZ[Y \ VROQ
Wyświetla wszystkie tagi, jakie zostały przypisane do pliku.
Wybieranie:
Wiedząc jakie plik ma przypisane tagi, można ściągnąć projekt w odpowiedniej wersji:
I\Y INKIQU[Z X ZGM VROQ
Np. jeśli chcemy zobaczyć projekt w wersji 1.0, możemy użyć polecenia:
I\Y INKIQU[Z X XKR
SUJ[R
Usuwanie, przenoszenie, zmienianie nazw tagów
Zwykle nie należy modyfikować nazw tagów. Służą one do wydobywania informacji z
poprzednich wersji plików. Jedyne dopuszczalne przypadki, to kiedy się popełni błąd przy
nadawaniu nazwy.
Usuwanie:
I\Y ZGM J ZGM VROQ
Przenoszenie:
I\Y ZGM X
, YZGHRK VROQ
Przenosi tag 'stable' z pliku o numerze rewizji 1.4 na aktualnie używany plik.
Zmienianie nazwy:
Zmiana nazwy polega na przeniesieniu starej nazwy na nową i usunięciu starej nazwy.
I\Y ZGM X YZGX_ , TU]_ VROQ
I\Y ZGM J YZGX_ VROQ
Sticky tags
Sticky tags występują, kiedy używamy opcji -r przy komendach checkout, lub update.
Zwykle odpowiadają gałęzi, albo uniemożliwiają modyfikację jakiegoś pliku/katalogu.
Sprawdzanie, czy występują:
I\Y YZGZ[Y VROQ
Usunięcie 'sticky tags':
I\Y [VJGZK '
Jeśli chcemy pobrać plik w odpowiedniej wersji, ale bez przypisywania 'sticky tag':
I\Y [VJGZK V X ZGM VROQ $ VROQ
Opcja '-p' wypisuje zawartosc pliku na standardowe wyjście. Za pomocą operatora
przekierowania '>' wynik polecenia cvs wstawiany jest do pliku 'plik'.
Gałęzie i scalanie
Gałęzie służą do tworzenia osobnej częsci projektu. Zmiany nanoszone w gałęzi nie mają
wpływu na zmiany w gałęzi głównej.
Gałęzie tworzymy komendą:
I\Y ZGM H TG`]G MGRK`O VROQ
Gałąź możemy scalić z główną gałęzią projektu. Scalanie polega na wprowadzeniu zmian
między miejscem rozdzielenia, a ostanio zmodyfikowanym plikiem gałęzi do gałęzi głównej.
Scalanie do gałęzi głównej:
I\Y [VJGZK P TG`]G MGRK`O VROQ
Dobrze jest oznaczyć miejsce scalenia tagiem:
I\Y ZGM UYZGZTOK YIGRKTOK VROQ
W ten sposób przy ponownym scalaniu, można się posłużyć tym tagiem do określenia
miejsca, względem którego będziemy scalać:
I\Y [VJGZK P UYZGZTOK YIGRKTOK P MGRG` VROQ
Numey gałęzi
Numery gałęzi są podobne do numerów rewizji. Składają się z liczb oddzielonych parzystą
liczbą kropek. Numery rewizji plików, znajdujących się w gałęzi mają dołączoną po kropce
liczbę.
Np. gałąź o numerze 1.2.4 może mieć pliki o numerach rewizji 1.2.4.1, 1.2.4.2, itd.
Pliki znajdujące się w gałęzi oznaczonej tym samym tagiem mają różne numery gałęzi.