<< Back to man.lupaworld.com


[ powrót ] [ Spis treści ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ dalej ]

Debian Reference
Część 12 - Systemy kontroli wersji


12.1 Concurrent Versions System (CVS)

Przeczytaj (np. przeglądarką lynx) pliki: /usr/share/doc/cvs/html-cvsclient, /usr/share/doc/cvs/html-info, /usr/share/doc/cvsbook lub wykonaj polecenia: info cvs oraz man cvs w celu uzyskania dokładnych informacji.


12.1.1 Instalacja serwera CVS

Poniższe ustawienia pozwalają na wprowadzanie zmian w repozytorium wyłącznie użytkownikom należącym do grupy „src”, a na administrację CVS wyłącznie członkowi grupy „staff”, redukując w ten sposób szanse zastrzelenia samego siebie.

     # cd /var/lib; umask 002 ; mkdir cvs # [Woody] FSH
     # apt-get install cvs cvs-doc cvsbook
     # export CVSROOT=/var/lib/cvs
     # cd $CVSROOT
     # chown root:src .	# „staff” dla większych ograniczeń rozpoczynania projektów
     # chmod 3775 .		# Jeśli w powyższym występuje „staff”, użyj 2775
     # cvs -d /var/lib/cvs init 	# bezpieczniej jest określić -d tutaj!
     # cd CVSROOT
     # chown -R root:staff .
     # chmod 2775 .
     # touch val-tags
     # chmod 664 history val-tags
     # chown root:src history val-tags

12.1.2 Przykładowe sesje CVS

Poniżej znajdują się przykłady konfiguracji środowiska powłoki dla dostępu do repozytoriów CVS.


12.1.2.1 Anonimowy CVS (tylko pobieranie)

Zdalny dostęp tylko do odczytu:

     $ export CVSROOT=:pserver:anonymous@cvs.sf.net:/cvsroot/qref
     $ cvs login
     $ cvs -z3 co qref

12.1.2.2 Użycie lokalnego serwera CVS

Dostęp lokalny z powłoki na tej samej maszynie:

     $ export CVSROOT=/var/lib/cvs

12.1.2.3 Użycie odległego pservera CVS

Zdalny dostęp bez SSH (używając obsługi RSH w cvs):

     $ export CVSROOT=:pserver:account@cvs.foobar.com:/var/lib/cvs
     $ cvs login

Jest to metoda podatna na podsłuch.


12.1.2.4 Użycie zdalnego CVS przez ssh

Zdalny dostęp z SSH:

     $ export CVSROOT=:ext:account@cvs.foobar.com:/var/lib/cvs

lub dla SourceForge:

     $ export CVSROOT=:ext:account@cvs.sf.net:/cvsroot/qref

Możesz również użyć uwierzytelnienia RSA (Połączenia z mniejszą ilością haseł – RSA, Rozdział 9.5.3), które eliminuje pytanie o hasło.


12.1.2.5 Tworzenie nowego archiwum CVS

Dla,

     OBIEKT              WARTOŚĆ                          ZNACZENIE
     Drzewo źródeł:      ~/project-x           Wszystkie kody źródłowe
     Nazwa projektu:     project-x             Nazwa projektu
     Źródło modułu:      Main-branch           Nazwa całego modułu (vendortag)
     Etykieta wydania:   Release-original      Nazwa wydania (releasetag)

Wykonaj,

     $ cd ~/project-x                 # przejdź do katalogu ze źródłami
      ... stwórz drzewo źródeł ...
     $ cvs import -m "Start project-x" project-x Main-branch Release-original
     $ cd ..; rm -R ~/project-x

12.1.2.6 Praca z CVS

Praca nad projektem project-x przy użyciu lokalnego repozytorium:

     $ cd                            # przejście do przestrzeni roboczej
     $ cvs co project-x              # pobranie źródeł z CVS-u
     $ cd project-x
      ... wprowadzanie zmian w zawartości ...
     $ cvs diff -u                   # podobne do diff -u repozytorium/ lokalne/
     $ cvs up -C modyfikowany_plik   # cofnięcie zmian w pliku
     $ cvs ci -m "Opisz zmiany"      # wysłanie modyfikacji do CVS
     $ vi nowy_plik
     $ cvs add nowy_plik
     $ cvs ci -m "Dodano nowy_plik"
     $ cvs up                        # pobranie najnowszych wersji z CVS
      ... by utworzyć wszystkie nowoutworzone katalogi w CVS użyj
      ... "cvs up -d -P" w zastępstwie.
      ... uważaj na linie zaczynające się od „C nazwa_pliku”
      ... kod niezmodyfikowany przeniesiony jest do `.#nazwa_pliku.wersja'.
      ... szukaj "<<<<<<<" i ">>>>>>>" w nazwa_pliku.
     $ cvs tag Release-1             # dodaj symboliczną nazwę wydania
      ... edytuj dalej ...
     $ cvs tag -d Release-1          # usuń nazwę wydania
     $ cvs ci -m "następne komentarze"
     $ cvs tag Release-1             # ponownie dodaj nazwę wydania
     $ cd                            # wróć do przestrzeni roboczej
     $ cvs co -r Release-initial -d old project-x
      ... pobierz wersję oryginalną do katalogu old
     $ cd old
     $ cvs tag -b Release-initial-bugfixes # stwórz nazwę odgałęzienia (-b)
      ... możesz teraz pracować na starej wersji (Tag=sticky)
     $ cvs update -d -P         # nie twórz pustych katalogów
      ... drzewo źródeł ma teraz trwałą (sticky) nazwę „Release-initial-bugfixes”
      ... pracuj na tym odgałęzieniu
     $ cvs up -d -P # zsynchronizuj z plikami modyfikowanymi przez innych w tej gałęzi
     $ cvs ci -m "check into this branch"
     $ cvs update -kk -A -d -P
      ... usuń trwałą nazwę i zapomnij zawartość
      ... aktualizuj z głównego pnia bez rozwijania słów kluczowych
     $ cvs update -kk -d -P -j Release-initial-bugfixes
      ... włączenie z odgałęzienia Release-initial-bugfixes do drzewa
      ... głównego.  Napraw konflikty edytorem.
     $ cvs ci -m "włączono Release-initial-bugfixes"
     $ cd
     $ tar -cvzf old-project-x.tar.gz old     # stwórz archiwum, -j dla bz2
     $ cvs release -d old               # usuń lokalne źródła (opcjonalne)

Miłe opcje do zapamiętania (używaj jako pierwszych opcji dla cvs):

     -n      pusty przebieg, żadnych efektów
     -t      wyświetl komunikaty pokazujące etapy pracy cvs

12.1.2.7 Eksport plików z CVS

Aby pobrać najnowszą wersję z CVS użyj „tomorrow”:

     $ cvs ex -D tomorrow nazwa_modułu

12.1.2.8 Zarządzanie CVS

Dodaj alias dla projektu (serwer lokalny):

     $ su - admin           # członek grupy staff
     $ export CVSROOT=/var/lib/cvs
     $ cvs co CVSROOT/modules
     $ cd CVSROOT
     $ echo "px -a project-x" >>modules
     $ cvs ci -m "px jest teraz aliasem project-x"
     $ cvs release -d .
     $ exit                 # Ctrl-D aby wyjść z su
     $ cvs co -d project px
      ... pobierz project-x (alias:px) z CVS to katalogu project
     $ cd project
      ... wprowadź zmiany w zawartości ...

0


12.1.3 Rozwiązywanie problemów z CVS


12.1.3.1 Uprawnienia plików w repozytorium

CVS nie nadpisuje aktualnych plików w repozytorium, tylko zastępuje je innymi. Z tego powodu, pozwolenie na pisanie do katalogu z repozytorium ma kluczowe znaczenie. Dla każdego nowego repozytorium, wykonaj następujące czynności aby zapewnić ten warunek.

     # cd /var/lib/cvs
     # chown -R root:src repozytorium
     # chmod -R ug+rwX   repozytorium
     # chmod    2775     repozytorium  # jeśli potrzebne, w podkatalogu

12.1.3.2 Bit wykonywalności

Bit wykonywalności pliku jest zachowany przy pobieraniu z CVS. Kiedy tylko zobaczysz problem z prawem do wykonywania w pobranych plikach, zmień uprawnienia pliku w repozytorium następującym poleceniem.

     # chmod ugo-x nazwa_pliku

12.1.4 Polecenia CVS

Oto polecenia CVS wraz ze skrótami.

     {add|ad|new} [-k kflag] [-m 'komunikat'] pliki...
     {admin|adm|rcs} [opcje-rcs] pliki...
     {annotate|ann} [opcje] [pliki...]
     {checkout|co|get} [opcje] moduły...
     {commit|ci|com}   [-lnR]  [-m  'podsumowanie_zmian'  |  -f  file] \
             [-r rewizja] [pliki...]
     {diff|di|dif} [-kl] [opcje_rcsdiff] [[-r rev1 | -D data1] \
             [-r rev2 |  -D data2]] [pliki...]
     {export|ex|exp} [-flNn] -r rev|-D data [-d katalog] [-k kflag] moduł...
     {history|hi|his} [-report] [-flags] [-options args] [pliki...]
     {import|im|imp} [-opcje] repozytorium vendortag releasetag...
     {login|logon|lgn}
     {log|lo|rlog} [-l] opcje-rlog [pliki...]
     {rdiff|patch|pa} [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] moduły...
     {release|re|rel} [-d] katalogi...
     {remove|rm|delete} [-lR] [pliki...]
     {rtag|rt|rfreeze} [-falnR]  [-b]  [-d]  [-r  tag  |  -D  data] \
              nazwa_symboliczna moduły...
     {status|st|stat} [-lR] [-v] [pliki...]
     {tag|ta|freeze} [-lR] [-F] [-b] [-d] [-r tag | -D data]  [-f] \
              nazwa_symboliczna [pliki...]
     {update|up|upd} [-AdflPpR] [-d] [-r tag|-D data] pliki...

12.2 Subversion

Subversion jest systemem kontroli wersji nowej generacji, który tworzony był z myślą o zastąpieniu CVS. Według twórców jest on obecnie w stanie „alpha”, jednak prawdopodobnie jest wystarczająco stabilny dla większości użytkowników. W momencie powstawania tego tekstu, Subversion dostępny jest wyłącznie w niestabilnej gałęzi Debiana.


12.2.1 Instalacja serwera Subversion

Meta-pakiet subversion-server jest zależny od wymaganych do użycia systemu Subversion pakietów (libapache2-dav-svn oraz subversion-tools).


12.2.1.1 Tworzenie repozytorium

Aktualnie, pakiet subversion nie tworzy repozytorium, więc musi być ono utworzone ręcznie. Jednym z możliwych miejsc dla repozytorium jest /var/local/repos.

Utwórz katalog:

     # mkdir -p /var/local/repos

Utwórz bazę danych repozytorium:

     # svnadmin create /var/local/repos

Daj prawo do zapisu w repozytorium serwerowi WWW:

     # chown -R www-data:www-data /var/local/repos

12.2.1.2 Konfiguracja Apache2

Aby umożliwić dostęp do repozytorium przez uwierzytelnienie użytkownika, dodaj (lub usuń komentarz) następujące wpisy do /etc/apache2/mods-available/dav_svn.conf:

     <Location /repos>
       DAV svn
       SVNPath /var/local/repos
       AuthType Basic
       AuthName "Repozytorium Subversion"
       AuthUserFile /etc/subversion/passwd
       <LimitExcept GET PROPFIND OPTIONS REPORT>
         Require valid-user
       </LimitExcept>
     </Location>

Następnie stwórz plik z hasłami użytkowników używając polecenia:

     htpasswd2 -c /etc/subversion/passwd jakiś-użytkownik

Przeładuj Apache2, a Twoje nowe repozytorium Subversion będzie dostępne pod adresem http://nazwa_hosta/repos.


12.2.2 Przenoszenie repozytorium CVS do Subversion


12.2.3 Przykłady użycia Subversion

Poniższe części pokazują jak używać różnych poleceń w Subversion.


12.2.3.1 Tworzenie nowego archiwum

Aby stworzyć nowe archiwum Subversion, napisz poniższe polecenia:

     $ cd ~/twój-projekt         # przejdź do katalogu źródeł
     $ svn import http://localhost/repos twój-projekt \
       nazwa-projektu -m "początkowy import projektu"

Tworzy to katalog o nazwie nazwa-projektu w Twoim repozytorium. Katalog ten zawiera pliki Twojego projektu. Sprawdź pod adresem http://localhost/repos/ czy się tam znalazł.


12.2.3.2 Praca z Subversion

Praca z project-y przy użyciu Subversion:

     $ cd                            # przejdź do przestrzeni roboczej
     $ svn co http://localhost/repos/project-y  # pobierz źródła
     $ cd project-y
      ... wykonaj pracę ...
     $ svn diff                      # podobne do diff -u repozytorium/ lokalne/
     $ svn revert modyfikowany_plik  # cofnij zmiany w pliku
     $ svn ci -m "Opisz zmiany"      # wyślij pliki do repozytorium
     $ vi dodany_plik
     $ svn add dodany_plik
     $ svn add nowy_katalog          # rekursywnie dodaj pliki z nowy_katalog
     $ svn add -N new_dir2           # nierekursywnie dodaj nowy katalog
     $ svn ci -m "Dodano nowy_plik, nowy_katalog, nowy_katalog2"
     $ svn up                        # pobranie najnowszej wersji z repozytorium
     $ svn log                       # pokazuje wszystkie wprowadzone zmiany
     $ svn copy http://localhost/repos/project-y \
           http://localhost/repos/project-y-branch \
           -m "Tworzę własną gałąź project-y"  # rozgałęzienie project-y
     $ svn copy http://localhost/repos/project-y \
           http://localhost/repos/proj-y_release1.0 \
           -m "project-y 1.0 release"    # dodanie tagu release
      ... zauważ, że odgałęzianie i tagowanie są tym samym. Jedyną różnicą jest to,
      ... że gałęzie można uaktualniać, a tagów nie.
     
      ... wprowadzaj zmiany w gałęzi ...
     
     $ # połącz odgałęzienie z gałęzią główną
     $ svn merge http://localhost/repos/project-y \
        http://localhost/repos/project-y-branch
     $ svn co -r 4 http://localhost/repos/project-y # pobierz rewizję 4

[ powrót ] [ Spis treści ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ dalej ]

Debian Reference

CVS, poniedziałek, 3 kwiecień 2005, 22:58:23 UTC

Osamu Aoki osamu@debian.org
Koordynator tłumaczenia: Bartosz Feński aka fEnIo fenio@o2.pl
Autorzy, Rozdział A.1