CVS - tutorial

by The Deadline Crew

Tutorial będzie poprowadzony w formie przykładowego przebiegu czynności podczas tworzenia przykładowego projektu. Zalecam zaglądanie do Wprowadzenia w razie wątpliwości. Repozytorium, które wykorzystamy, założymy lokalnie w katalogu /tmp.

Przykładowy scenariusz

Polecenia Komentarze
mkdir /tmp/cvs
cd /tmp/cvs
export CVSROOT=`pwd`
export EDITOR=vim
cvs init
 
tworzymy katalog, w którym zainstalujemy repozytorium
ustawiamy zmienne środowiskowe CVSROOT oraz EDITOR (edytor używany przy komentowaniu zmian)
i inicjujemy cvs-a
mkdir /tmp/zpp
cd /tmp/zpp
touch plik1
cvs import zpp main start
cd ..
rm -rf /tmp/zpp
Tworzymy przykładowy zbiór plików na których będziemy pracować. Następnie importujemy go do cvs'a (czyli zakładamy w nim projekt o nazwie zpp, gałęzi main i początkowym punkcie start). Następnie usuwamy pliki, które były bazą projektu (możemy to zrobić, bo mamy je już w repozytorium).
cd /tmp
cvs checkout zpp
Tworzymy nowy sandbox przez polecenie checkout - w /tmp pojawia się katalog zpp z plikami z repozytorium oraz katalogiem CVS, którego nie należy ruszać, bo w nim są pliki pomocnicze cvsa.
echo "zpp" >>/tmp/zpp/plik1
cvs status
cvs commit
Zmieniamy plik1, sprawdzamy co wyrzuci status (zwraca Locally changed dla plik1), po czym zatwierdzamy zmiany w repozytorium.
echo "zad5" >/tmp/zpp/plik2
cvs status /tmp/zpp/plik2
cvs add /tmp/zpp/plik2
cvs status /tmp/zpp/plik2
cvs commit
Tworzymy nowy plik
Status zwraca że plik jest "Unknown"
Dodajemy plik do repozytorium
Teraz status to "Locally added"
Zatwierdzamy zmiany.
cd /tmp/zpp
mv plik2 plik3
cvs remove plik2
cvs add plik3
cvs commit
Zmiana nazwy pliku - dokonuje się ją sztucznie przez usunięcie starego i dodanie nowego pliku do repozytorium. Uwaga! W ten sposób traci się historię zmian pliku!
cd /tmp/zpp
cvs tag wersja1
Właśnie nazwaliśmy te 2 pliki tagiem wersja1. Od tej pory możemy się odwoływać do tych konkretnych wersji tych plików poprzez wywołanie poleceń cvs z parametrem -r wersja1
cvs rtag -b -r wersja1 galaz1 zpp
cvs update -r galaz1
echo "bla" >>plik1
cvs commit
Stworzylismy nową gałąź projektu, o nazwie galaz1. Od tej pory zmiany nie będą dotyczyły głównej gałęzi projektu. Możemy się o tym przekonać modyfikując plik1 - wersja z głównej gałęzi po commicie pozostaje nienaruszona.
mkdir /tmp/join
cd /tmp/join
cvs checkout -r wersja1 zpp
cd zpp
cvs update -j galaz1
cvs update -A
cvs commit
Przykład połączenia gałęzi z potokiem głównym projektu. Robimy checkout wersji1 do nowego katalogu, a następnie wykonujemy update -j (join) z gałęzią1. Za pomocą update -A pozbywamy się sticky tagów (patrz manual), a następnie zatwierdzamy zmiany.