[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ successivo ]


La guida Debian
Capitolo 12 - Sistemi per il controllo versione


12.1 Concurrent Version System (CVS)

Leggete /usr/share/doc/cvs/html-cvsclient, /usr/share/doc/cvs/html-info, /usr/share/doc/cvsbook con lynx, od eseguite un info cvs e man cvs per informazioni dettagliate.


12.1.1 Installare un server CVS

Le impostazioni seguenti permettono il commit solo da parte di un membro del gruppo "src", e l'amministrazione del cvs solo da parte di un membro del gruppo "staff", riducendo così le possibilità di mettersi nei guai.

     # 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 .         # mettete "staff" per aumentare le restrizioni.                           # in caso di progetti allo stato iniziale.
     # chmod 3775 .             # Se si usa "staff", utilizzate 2775
     # cvs -d /var/lib/cvs init # è più sicuro specificare l'opzione -d in maniera esplicita!
     # 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 Esempi di una sessione CVS

Quanto segue imposta l'ambiente di shell per l'accesso al deposito CVS.


12.1.2.1 CVS anonimo (solo download)

Accesso remoto in sola lettura

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

12.1.2.2 Uso del server CVS locale

Accesso locale da una shell sulla stessa macchina:

     $ export CVSROOT=/var/lib/cvs

12.1.2.3 Uso di un pserver CVS remoto

Accesso remoto senza SSH (usate le capacità del protocollo RSH in cvs)

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

E' vulnerabile ad attacchi tipo eavesdropping.


12.1.2.4 CVS remoto tramite ssh

Accesso remoto con SSH:

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

oppure, per SourceForge:

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

Potete anche utilizzare l'autenticazione RSA (Connettersi con meno passwords – RSA, Sezione 9.5.3), che elimina la necessità della richiesta di password.


12.1.2.5 Creare un nuovo archivio CVS

Per,

     OGGETTO          VALORE             SIGNIFICATO
     albero sorgente  ~/progetto-x       Tutti i codici sorgente
     Nome progetto    progetto-x         Nome per questo progetto
     Vendor Tag:      Main-branch        Tag per la branca intera
     Release Tag:     Versione-iniziale Tag per una versione specifica

Quindi,

     $ cd ~/progetto-x              # entra nella directory sorgente
      ... crea un albero sorgente ...
     $ cvs import -m "Start progetto-x" progetto-x Main-branch Versione-iniziale
     $ cd ..; rm -R ~/progetto-x

12.1.2.6 Lavorare con CVS

Per richiamare e lavorare con le versioni locali del progetto-x con l'archivio CVS:

     $ cd                # muove all'area di lavoro.
     $ cvs co progetto-x # copia i sorgenti CVS all'archivio locale
     $ cd progetto-x
      ... esegui cambiamenti al contenuto ...
     $ cvs diff -u       # simile a diff -u repository/ local/
     $ cvs up -C file_modificato       # elimina le modifiche ad un file
     $ cvs ci -m Descrivi i cambiamenti   # salva i sorgenti locali nel CVS
     $ vi nuovofile_aggiunto
     $ cvs add nuovofile_aggiunto
     $ cvs ci -m Aggiunto nuovofile_aggiunto
     $ cvs up                        # fonde l'ultima versione da CVS
      ... per creare tutte le sottodirectory appena create da CVS, usate
      .... "cvs up -d -P", invece
      ... cercate le righe che iniziano per "C nomefile"
      ... il codice immodificato viene spostato a `.#nomefile.version'.
      ... Cerca "<<<<<<<" e ">>>>>>>" in nomefile.
     $ cvs tag Release-1             # aggiunge la tag di versione
     ... esegui ulteriori modifiche ...
     $ cvs tag -d Release-1          # rimuove la tag di versione
     $ cvs ci -m altri commenti
     $ cvs tag Release-1             # ri-aggiunge la tag di versione
     $ cd                            # ritorna all'area di lavoro.
     $ cvs co -r Release-initial -d old progetto-x 
      ... riporta la versione originale alla directory old
     $ cd old
     $ cvs tag -b Release-initial-bugfixes # crea la tag di branca (-b)
      ... Ora si può lavorare sulla vecchia versione (Tag=sticky)
     $ cvs update -d -P             # non crea directory vuote
      ... L'albero sorgente ha ora una tag fissa "Release-initial-bugfixes"
      ... Lavorate su questa branca
     $ cvs up -d -P # si sincronizza con i file modificati da altri su questa branca
     $ cvs ci -m "controllate questa branca"
     $ cvs update -kk -A -d -P
      ... Rimuovete la tag fissa e dimenticate il contenuto
      ... Aggiornate la linea principale senza espansione per parola chiave
     $ cvs update -kk -d -P -j Release-initial-bugfixes
      ... Fonde la branca Release-initial-bugfixes nella linea 
      ... principale senza espansione per parola chiave.  Risolvete i conflitti con l'editor.
     $ cvs ci -m fusa Release-initial-bugfixes
     $ cd
     $ tar -cvzf old-progetto-x.tar.gz old # produce un archivio, -j per bz2
     $ cvs release -d old     # rimuove i sorgenti locali (opzionale)

Alcune opzioni utili da ricordare (da usare come primi argomenti per cvs):

     -n      esecuzione secca, nessun effetto
     -t      mostra messaggi sui passi dell'attività di cvs

12.1.2.7 Esportare i file da CVS

Per ottenere l'ultimissima versione da CVS, usate "tomorrow":

     $ cvs ex -D tomorrow nome_modulo

12.1.2.8 Amministrare CVS

Aggiungere un alias ad un progetto(server locale):

     $ su - admin           # un membro del team
     $ export CVSROOT=/var/lib/cvs
     $ cvs co CVSROOT/modules
     $ cd CVSROOT
     $ echo "px -a progetto-x" >>modules
     $ cvs ci -m Ora px è un alias per progetto-x
     $ cvs release -d .
     $ exit                 # o Ctrl-D per uscire da su
     $ cvs co -d progetto px 
      ... check out progetto-x (alias:px) da CVS alla directory del progetto
     $ cd project
      ... modifica il contenuto ...

12.1.3 Risoluzione dei problemi


12.1.3.1 Permessi dei file nel deposito

CVS non sovrascriverà il file corrente, ma lo rimpiazzerà con un altro. Quindi, il permesso di scrittura nella directory deposito è critico. Ogni volta che si crea un nuovo deposito, è bene lanciare i seguenti comandi per assicurarsi che detta condizione venga soddisfatta se necessario.

     # cd /var/lib/cvs
     # chown -R root:src deposito
     # chmod -R ug+rwX   deposito
     # chmod    2775     deposito 
                          # se necessario, anche per le sottodirectory

12.1.3.2 Il bit d'esecuzione

Il bit d'esecuzione di un file viene mantenuto alla chiusura della sessione (check-out). Tutte le volte che appaiono problemi di permessi di esecuzione dei file, cambiate i permessi nel deposito CVS con il comando seguente.

     # chmod ugo-x filename

12.1.4 Comandi CVS

Ecco i comandi CVS con le abbreviazioni corrispondenti.

     {add|ad|new} [-k kflag] [-m 'message'] files...
     {admin|adm|rcs} [rcs-options] files...
     {annotate|ann} [options] [files...]
     {checkout|co|get} [options] modules...
     {commit|ci|com}   [-lnR]  [-m  'log_message'  |  -f  file] \
             [-r revision] [files...]
     {diff|di|dif} [-kl] [rcsdiff_options] [[-r rev1 | -D date1] \
             [-r rev2 |  -D date2]] [files...]
     {export|ex|exp} [-flNn] -r rev|-D date [-d dir] [-k kflag] module...
     {history|hi|his} [-report] [-flags] [-options args] [files...]
     {import|im|imp} [-options] repository vendortag releasetag...
     {login|logon|lgn}
     {log|lo|rlog} [-l] rlog-options [files...]
     {rdiff|patch|pa} [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules...
     {release|re|rel} [-d] directories...
     {remove|rm|delete} [-lR] [files...]
     {rtag|rt|rfreeze} [-falnR]  [-b]  [-d]  [-r  tag  |  -D  date] \
              sym_bolic_tag modules...
     {status|st|stat} [-lR] [-v] [files...]
     {tag|ta|freeze} [-lR] [-F] [-b] [-d] [-r tag | -D date]  [-f] \
              sym_bolic_tag [files...]
     {update|up|upd} [-AdflPpR] [-d] [-r tag|-D date] files...

12.2 Subversion

Subversion è un sistema di controllo versione di prossima generazione, che è inteso come rimpiazzo di CVS. Gli sviluppatori lo considerano al momento in stadio "alfa", ma è probabilmente sufficientemente stabile per gran parte degli usi. Al momento della scrittura di questa guida, Subversion è disponibile solo in Debian unstable.


12.2.1 Installazione di un server Subversion

Il metapacchetto subversion dipende dai pacchetti necessari per impiantare un server (libapache2-svn e subversion-tools).


12.2.1.1 Impostare un deposito

Attualmente il pacchetto subversion non imposta un deposito, per cui bisogna farlo manualmente. Una locazione possibile per un deposito è in /var/local/repos.

Create la directory:

     # mkdir -p /var/local/repos

Create il database del deposito:

     # svnadmin create /var/local/repos

Rendete il deposito scrivibile dal server WWW:

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

12.2.1.2 Configurare Apache2

Per permettere l'accesso al deposito tramite autenticazione degli utenti, aggiungete quanto segue a /etc/apache2/mods-available/dav_svn.conf:

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

Poi create un file per l'autenticazione degli utenti con il comando:

     htpasswd2 -c /etc/subversion/passwd username-di-qualcuno

Riavviate Apache2 ed il vostro nuovo deposito Subversion sarà accessibile all'URL http://hostname/repos.


12.2.2 Muovere un deposito CVS a Subversion


12.2.3 Subversion usage examples

Le sezioni seguenti vi insegnano l'utilizzo dei diversi comandi in subversion.


12.2.3.1 Creare un nuovo archivio Subversion

Per creare un nuovo archivio Subversion, digitate quanto segue:

     $ cd ~/il-tuo-progetto         # vai alla directory sorgente
     $ svn import http://localhost/repos il-tuo-progetto \
       nome-progetto -m "importazione iniziale progetto"

Ciò crea una directory denominata nome-progetto nel vostro deposito Subversion che contiene i file del progetto. Guardate in http://localhost/repos/ per vedere se è lì.


12.2.3.2 Lavorare con Subversion

Lavorare con il progetto-y usando Subversion:

     $ cd                            # muove all'area di lavoro
     $ svn co http://localhost/repos/progetto-y  # Copia (checkout) i sorgenti
     $ cd progetto-y
      ... lavorateci ...
     $ svn diff                      # simile a diff -u repository/ local/  
     $ svn revert file_modificato      # cancella le modifiche di un file
     $ svn ci -m "Descrivi le modifiche"  # copia le vostre modifiche nel deposito
     $ vi nuovofile_aggiunto
     $ svn add nuovofile_aggiunto
     $ svn add nuova_dir          # aggiunge tutti i file ricorsivamente in nuova_dir
     $ svn add -N nuova_dir2      # aggiunge la directory non ricorsivamente
     $ svn ci -m "Aggiunto nuovofile_aggiunto, nuova_dir,nuova_dir2"
     $ svn up                        # aggiorna l'ultima versione dal deposito
     $ svn log                       # mostra tutte le modifiche effettuate
     $ svn copy http://localhost/repos/progetto-y \
           http://localhost/repos/progetto-y-branca \
           -m "sto creando la mia branca del progetto-y"  
               # creazione di una branca del progetto-y
     $ svn copy http://localhost/repos/progetto-y \
           http://localhost/repos/prog-y_rilascio1.0 \
           -m "progetto-y rilascio 1.0"    # aggiunta tag di release
      ... notate che il processo di branching e di tagging sono la stessa cosa. L'unica differenza
      ... è che le branche subiscono il commit mentre le tag no.
     
      ... modificate la branca ...
     
     $ # fa confluire la branca copiata nel tronco principale
     $ svn merge http://localhost/repos/progetto-y \
        http://localhost/repos/progetto-y-branca
     $ svn co -r 4 http://localhost/repos/progetto-y # prende la revisione 4

[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ successivo ]


La guida Debian

CVS, gio gen 18 11:52:32 UTC 2007

Osamu Aoki osamu#at#debian.org
Traduzione italiana: Davide Di Lazzaro mc0315#at#mclink.it
Autori, Sezione A.1