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.
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
Quanto segue imposta l'ambiente di shell per l'accesso al deposito CVS.
Accesso remoto in sola lettura
$ export CVSROOT=:pserver:anonymous@cvs.sf.net:/cvsroot/qref $ cvs login $ cvs -z3 co qref
Accesso locale da una shell sulla stessa macchina:
$ export CVSROOT=/var/lib/cvs
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.
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.
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
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
Per ottenere l'ultimissima versione da CVS, usate "tomorrow":
$ cvs ex -D tomorrow nome_modulo
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 ...
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
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
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...
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.
Il metapacchetto subversion-server
dipende dai pacchetti necessari
per impiantare un server (libapache2-dav-svn
e
subversion-tools
).
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
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.
Le sezioni seguenti vi insegnano l'utilizzo dei diversi comandi in 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ì.
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
La guida Debian
1.08-3, dom mag 1 07:45:18 UTC 2005osamu@debian.org
dsewell@virginia.edu
mc0315@mclink.it