CVS jest bardzo przydatny przy średnich i dużych projektach. Można przy jego pomocy łatwo wracać do poprzednich wersji kodu, a co najważniejsze mieć pewność że nasz kod gdzieś się nie zagubi. Poniższy tutorial był testowany na winXP oraz win2k.
Podstawy
Jeśli chce sie korzystać z CVS pod windowsami należy sciągnąć aktualną wersje z http://www.cvshome.org/downloads.html. Pod systemami unixopodobnymi CVS jest dostępny razem z konkretną dystrybucją. Pod win32 jest to plik binarny cvs.exe, który uruchamiamy z różnymi parametrami. Od tych parametrów zależy między innymi czy nasze repozytorium znajduje się lokalnie czy na jakimś odległym serwerze. Repozytorium jest to drzewo katalogów, które odzwierciedla katalogi naszego projektu. Jest ono tworzone przez program cvs.exe.
Dodatkowo potrzebny będzie nam klient SSH. Można go ściągnąć z www.ssh.com w wersji niekomercyjnej, plik w aktualnej wersji nazywa się SSHSecureShellClient-3.2.9.exe po zainstalowaniu potrzebny będzie nam tylko ssh2.exe który powinien znajdować się w katalogu instalacyjnym. Można także skorzystać z programu plink którego dostajemy razem z instalacją putty'ego (patrz linki).
Procedura utworzenia repozytorium na muszelce.
1. Uruchamiamy putty.exe, albo dowolnego innego klienta SSH i logujemy się.
2. Na muszelce mamy dostęp do CVS'a, więc możemy od razu utworzyć repozytorium w lokalnym katalogu. W tej chwili nie działa dostęp do dyzku Z, ale jeśli w przyszłości byłby on udostępniony wygodniej by było właśnie na nim utworzyć repozytorium. Wpisujemy :
cvs -d:local:/home/PJWSTK/sXXXX/cvsrep init
gdzie sXXXX to oczywiście nasz numer indeksu, ścieżka oczywiście może być dowolnie inna. Po tej operacji można sprawdzić jak wygląda nasze repozytorium (najłatwiej przy pomocy mc), jest to katalog cvsrep zawierający katalog CVSROOT. W nim znajdują się różne informacje o przechowywanych projektach. Każdy nowo dodany projekt będzie po prostu nowym katalogiem w cvsrep. A hierarchia katalogów będzie taka sama jak w naszym projekcie. Teraz możemy już się wylogować z muszelki.
Korzystanie z repozytorium
W tej chwili mamy już działający serwer z którym będziemy mogli się połączyć z dowolnego miejsca i ściągnąć lub przesłać uaktualnienia naszego kodu. Będziemy to robić przy pomocy lokalnej wersji binarnej cvs.exe. Poniżej znajduje się przykład jak możemy dodać nowy projekt do naszego rezpozytorium oraz jak później go uaktualniać. Zakładam że pliki cvs.exe i ssh2.exe znajdują się w katalogu z:\
1. Najpierw musimy ustawić dwie zmienne systemowe, otwieramy command prompt i wpisujemy :
set CVS_RSH=z:\ssh2
set CVSROOT=:ext:sXXXX@mushelka.pjwstk.edu.pl:/home/PJWSTK/sXXXX/cvsrep
Najłatwiej jest utworzyć plik setenv.bat na dysku Z i uruchamiać go zawsze przed używaniem CVS'a
2.Teraz utworzymy przykładowy projekt :
mkdir testpro
cd testpro
copy con test.cpp
po wpisaniu ostatniej lini możemy wprowadzić dowolny tekst, kończymy przy pomocy ctrl+z. Katalog testpro, zawiera nasz projekt teraz utworzymy dla niego moduł w naszym repozytorium na muszelce.
3. Jesteśmy już gotowi do zaimportowania naszego projektu, poniższą komende uruchamiamy z katalogu testpro :
cvs import -m "Moj projekt" myproject sample start
gdzie "moj projekt" to krótki opis projektu, myproject okeśla jego nazwę a sample np. autora. W czasie wykonywania komendy należy podać nasze haslo. Powinniśmy dostać taką odpowiedź na ekranie :
N myproject/test.cpp
No conflicts created by this import
Najczęstsze błędy wynikają z błędnie ustawionych zmiennych systemowych i niezgadzających się ścieżek dostępu do repozytorium. W naszym repozytorium na muszelce powinien pokazać się katalog myproject w katalogu cvsrep. Zawiera on plik test.cpp,v. Uwaga, nie należy tu nic grzebać.
4. Teraz załóżmy, że chcemy pobrać nasz projekt z repozytorium. W tym celu usuwamy lokalny katalog testpro i wykonujemy polecenie cvs'a checkout (zmienne systemowe muszą być ustawione):
cvs checkout myproject
Zostanie utworzony katalog myproject, zawierający nasz plik test.cpp. Zawiera on także katalog CVS z informacją o plikach z tego katalogu.
5. Teraz możemy dokonać zmian w test.cpp, a następnie przy pomocy komendy cvs'a commit przesłać te zmiany do repozytorium tworząc przy tym nową wersję pliku test.cpp.
cvs commit -m "male zmiany" test.cpp
lub tylko :
cvs commit
z katalogu myproject, powinien otworzyć się notepad gdzie wpisuje się co uległo zmianom dla tej wersji.
6. Jeśli chcemy tylko zsynchronizować wersję projektu z repozytorium z tą z lokalnego katalogu wykonujemy z katalogu projektu komendę :
cvs update
dokonuje ona pobrania najnowszej wersji projektu a w przypadku jakichś konfliktów informuje o nich. Najlepiej jest wykonywać update przed każdym commitem.
7. Porównywanie wersji wykonujemy komendą CVS'a diff :
cvs diff -r1.1 test.cpp
porównuje aktualną wersję test.cpp (znajduącą się lokalnie na naszym dysku) z wersją 1.2 znajdującą się w repozytorium. Powinniśmy otrzymać np. taki wynik:
D:\Projekty\MYPROJ~1>cvs diff -r1.1 test.cpp
s1525's password:
Index: test.cpp
=================================================================== < BR > RCS
file: /home/PJWSTK/s1525/cvsrep/myproject/test.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -r1.1 -r1.2
2a3
> return 0;
czyli w lini trzeciej została dodana linia return 0.
Ułatwienia
Jeśli nie lubi sie command promptu najlepiej jest zainstalować sobie TortoiseCVS i zintegrować sobie CVS'a z windowsami. Wiele środowisk ma wbudowane ułatwienia dla CVS'a np.: NetBeans dla javy albo Dev-C++.
Kilka faktów o muszelce :(
Nie należy za bardzo ufać że muszelka zawsze będzie działać, jeśli za często się z niej nie korzysta to się tego nie widzi ale czasami po prostu nie działa.
Przydatne komendy CVS'a
cvs add
file_name.txt D
odaje plik file_name.txt do repozytorium, należy po niej wykonać commita.
cvs update -A
Usuwa tzw. sticky tags, czasami może się przydać,
cvs --help
[komenda]
Pomoc na temat danej komendy
cvs export -rHEAD myproject Pobiera
nasz projekt bez katalogów CVS - wersję release
Przydatne linki
http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/cvs/ -
tutorial do CVS'a
http://www.prestosoft.com/ps.asp?page=edp_examdiff -
narzędzie do porównywania wersji, (win32)
http://www.tortoisecvs.org/ -
TortoiseCvs
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
- putty, plink (SSH client)