## page was renamed from Cvs
#LANGUAGE it

<<BR>>
<<Indice(depth=1)>>

= Introduzione =

'''Cvs''', ovvero '''Concurrent''' (o '''Current''') '''Version System''', è un ''sistema di controllo di revisione'' (o di ''versione'') il cui scopo è quello di gestire più versioni (o appunto revisioni) del medesimo codice sorgente agendo direttamente sul tree remoto. I cambiamenti effettuati sul codice sorgente vengono automaticamente registrati con un ''autoincremento'' di un dato valore numerico o alfanumerico che indica univocamente la revisione.

= Caratteristiche =

Il punto di forza di questa tecnologia è il poter tenere sotto controllo qualsiasi cambiamento effettuato dagli sviluppatori, avendo la possibilità di tornare a revisioni precedenti nel caso di errori o manomissioni volontarie al codice sorgente.<<BR>>Indubbia è anche la possibilità di collaborazione estesa che grazie a questo sistema diviene semplice: un gruppo di persone può infatti lavorare liberamente allo stesso codice sorgente modificando il tree remoto ed aggiornando la propria copia locale in relazione a modifiche di altri sviluppatori.

= Installazione del client =

Per utilizzare cvs su piattaforma Linux si utilizza '''cvs''', il client ''opensource''. In '''Ubuntu''' esso si trova nei [[Repository|repository]] ed è installabile con il seguente comando:{{{
sudo apt-get install cvs
}}}

<<Anchor(var)>>
= Cvsroot =

'''Cvsroot''' è una variabile molto importante per il lavoro mediante ''cvs''. La corretta impostazione permette di operare sul repository scelto senza dover ripetere ogni volta la sua locazione e la procedura del login. Ovviamente questo si adatta a chi ha a che fare specialmente con un solo repository ''cvs''.

Il modo più semplice per impostare questa variabile è:{{{
CVSROOT=:pserver:nomeutente@dominio.it:/percorso/al/cvs
}}}

 * '''pserver''' è il metodo di connessione/autenticazione e sta per ''password authenticated server''
 * '''nomeutente''' è il nome utente per un dato dominio. Nel caso di un semplice ''checkout'', può anche essere anonimo: fornire ''anonymous'' come stringa.
 * '''dominio.it''' è il dominio, completo di eventuale sottodominio, cui collegarsi (molto spesso è del tipo cvs.dominio.it)
 * '''/percorso/al/cvs''' è il path assoluto alla directory contenente il tree cvs da modificare/prelevare.

Una volta impostata è necessario esportarla:{{{
export CVSROOT
}}}

Così che possa essere usata dal programma. Per controllare che tutto sia andato a buon fine, eseguire:{{{
echo $CVSROOT
}}}

Controllare che l'output sia quello inserito in precedenza.

= Checkout =

L'operazione più semplice e comune per la maggioranza degli utenti è quella di '''checkout''', ovvero di copia del tree remoto di un programma in una directory locale. Il comando da passare al programma è '''co''' e la sintassi è la seguente:{{{
cvs -d :pserver:nomeutente@dominio.it:/percorso/al/cvs co cartella
}}}

 * '''-d''' indica la necessità di specificare un dominio di lavoro;
 * ''':pserver: nomeutente_dominio.it :/percorso/al/cvs''' indica il dominio, il metodo di autenticazione e la directory di lavoro;
 * '''co''' è il comando da eseguire, ovvero il checkout;
 * '''directory''' è il nome della directory locale in cui sarà salvato il tree.

oppure avendo già impostato correttamente la variabile [[#var|Cvsroot]]:{{{
cvs co directory
}}}

= Creare un repository =

Per creare un nuovo tree sia remoto che locale il comando utilizzato è sempre '''import'''. La sintassi generale di utilizzo è:{{{
cvs -d :pserver:nomeutente@dominio.it:/percorso/al/cvs import -m "primo import in CVS" nomeprogetto vendortag releasetag
}}}

 * '''-d''' indica la specificazione di un dominio di lavoro
 * ''':pserver: nomeutente_dominio.it :/percorso/al/cvs''' indica il dominio, il metodo di autenticazione e la directory di lavoro;
 * '''import''' è il comando utilizzato;
 * '''-m "primo import in CVS"''' specifica un piccolo commento da associare alla creazione;
 * '''nomeprogetto''' è il nome del tree. Non necessariamente deve corrispondere alla directory di lavoro (anche se in molti casi si preferisce così);
 * '''vendortag releasetag''' sono due parametri avanzati la cui configurazione va oltre gli scopi di questa guida.  I parametri predefiniti sono: '''jrandom start'''.

{{{#!wiki important
Per maggiori informazioni sull'amministrazione avanzata di CVS consultare [[http://cvsbook.red-bean.com/cvsbook.html#Advanced%20CVS|questa]] pagina.}}}

Il comando è complesso e di utilizzo frequente su tree remoti: è pertanto conveniente usare la variabile [[#var|Cvsroot]] per semplificare la sintassi. Nel caso di utilizzo di ''cvsroot'' il comando diviene:{{{
cvs import -m "initial import into CVS" myproj vendortag releasetag
}}}

Perché questo comando dia i risultati aspettati è necessario eseguirlo dopo aver navigato mediante terminale '''all'interno''' della cartella contenente i file del progetto. Ad esempio volendo importare dei file presenti nella directory ''cvs'' del proprio ''Desktop'' il comando da eseguire ''prima'' di '''cvs import''' è:{{{
cd Desktop/cvs
}}}

= Altre Operazioni =

Per l'esplicazione dei seguenti comandi si fa riferimento ad un sistema in cui sia già stata configurata la variabile [[#var|Cvsroot]]. In caso contrario, in ogni comando aggiungere: {{{
-d :pserver:nomeutente@dominio.it:/percorso/al/cvs
}}}

== Aggiungere file o directory ==

Per aggiungere un file o una cartella (automaticamente ''in modo ricorsivo'', indi comprendente tutti i file e le sottodirectory al suo interno) al tree si utilizza il comando '''add''' con la sintassi:{{{
cvs add file
cvs add cartella
}}}

== Rimuovere file o directory ==

Per rimuovere un file o una directory (anche in questo caso ricorsivamente) si usa il comando '''rm''':{{{
cvs rm file
cvs rm cartella
}}}


= Alcune limitazioni di cvs =

Purtroppo il metodo cvs ha alcune limitazioni in operazioni di utilizzo comune ed è per questo che spesso, al suo posto, si preferisce usare [[Programmazione/Subversion|SVN]].

 * Non è possibile __copiare__ file o directory oppure __muovere__ file o directory direttamente da ''cvs'';
 * Non è ancora supportato il mero ''listing'' dei file senza checkout;
 * Queste operazioni devono essere fatte con altri strumenti ad esempio '''ssh''', pregiudicando così la loro registrazione nelle modifiche effettuate al tree e conseguente aggiornamento di versione;
 * Il login deve essere sempre effettuato mediante il parametro '''user[at]dominio''' e non può essere lasciato al server il compito di richiedere username e password come accade in [[Programmazione/Subversion|SVN]].

= Ulteriori risorse =

 * http://en.wikipedia.org/wiki/Version_control_system
 * http://cvsbook.red-bean.com/cvsbook.html

## da questo punto in poi non modificare!
----
CategoryProgrammazione CategoryDaRevisionare