CVS
Il Concurrent Versions System (CVS)
fornisce un framework dove molteplici utenti possono editare gli stessi files.
Come puoi immaginare, se un gruppo di utenti edita i files in una singola
directory, il caos regnerà. Usando CVS,
comunque, un gruppo di persone può lavorare con sicurezza sullo stesso gruppo di files.
CVS mantiene la copia master dei files,
e registra chi ha cambiato cosa e quando in un depositorio centrale. Se
insorgessero dei conflitti, CVS te lo farà sapere.
CVS è spesso usato affinchè i programmatori possano
condividere codice, ma funziona bene anche per la documentazione.
cvsCome funziona CVScvscome funzionacvsdescrizione
In molti casi, ogni gruppo di files che costituisce un pacchetto o un progetto
è immagazzinato come modulo sul CVS server.
Quando lavori con i files dal CVS, dovrai eseguire il
checkout di una copia del modulo sul
file system locale. Dopo aver modificato uno o più files, dovrai inviarli con un
commit al repositorio centrale
CVS server.
Con CVS puoi editare un file senza
prima ottenere il permesso o il locking del file. La parte
concurrent del nome
CVS viene dalla sua capacità di
permettere diverse differenti persone di editare differenti parti dello stesso
file. Siccome nessuno dei cambiamenti si sovrappone,
CVS può registrare correttamente i loro cambiamenti.
In caso di cambiamenti duplicati, questi sono marcati chiaramente nei files
e gli autori devono risolvere il problema da soli.
Quando commetti i cambiamenti, solo i cambiamenti ai files che il server sa
sono commessi. In altre parole, se crei un file nel checkout locale
di un modulo, il nuovo file non è automaticamente
inviato al server. Devi prima fare un add del
file al repositorio quindi eseguire il commit. Se rimuovi un file
dal tuo checkout locale di un modulo, dovrai specificare che vuoi
rimuoverlo dal repositorio sul CVS server e quindi
eseguire il commit della rimozione del file.
I comandi specifici per eseguire queste operazioni sono discussi in
.
Se qualcuno ha modificato il file nel tempo fra intercorso fra l'ultima volta
che l'hai catturato dal CVS e quando hai provato ad eseguire il commit di un cambiamento,
CVS proverà ad incollare i cambiamenti alla
copia master sul CVS server. Se
il contenuto che hai cambiato è in una locazione differente nel file
rispetto la contenuto cambiato da qualcun'altro, l'azione del commit
andrà avanti senza alcun conflitto.
Se qualcuno modifica lo stesso contenuto che hai già cambiato tu
e provi a fare un commit, vedrai un messaggio che è avvenuto
il conflitto su un file. Così, dovrai fare l'
update dei tuoi files di frequente. E' una buona pratica
aggiornarli prima di iniziare a modificarli.
Fa riferimento a per
le istruzioni su come risolvere i conflitti.
Preparazione all'uso di CVScvspreparazione all'uso
Prima di usare CVS, hai bisogno di stabilire
un account con il CVS server. Dopo
aver ottenuto un account, non dovrai più fare nuovamente queste
cose.
E' CVS installato sul tuo sitemacvsinstallazione RPM
Devi aver installato il pacchetto CVSRPM. Verifica la sua presenza
digitando il comando:
$ rpm -q cvs
e vedi un output simile a
cvs-1.11.19-1, allora il pacchetto
è installato. Un messaggio simile a package cvs
is not installed vuol dire che devi installare il
pacchetto cvs prima di continuare. Se
non sai come fare, consulta il tuo amministratore di sistema
che potrà installarlo per te.
Generazione dell chiavi SSHOpenSSHchiavi di autorizzazione
Il CVS server usa chiavi
SSH Protocol 2 per autenticare
gli utenti. Così, devi generare un paio di chiavi prima di richiedere
un account CVS. Se hai già
una chiave SSHDSA,
puoi saltare questo passaggio.
Tip
Hai già una chiave DSA se hai il
file ~/.ssh/id_dsa.pub sul sistema.
Se la tua chiave DSA esistente non richiede una
passphrase, sei fortemente incoraggiato a
generarne una che richieda una passphrase.
Usa i seguenti passi per generare una chiave DSA
usata da SSH Protocol 2. E'
necessaria per un account CVS su
cvs.fedora.redhat.com.
OpenSSHssh-keygenssh-keygen
Per generare una chiave
DSA
per funzionare con il protocollo versione 2.0, allo shell prompt,
digita il comando:
$ ssh-keygen -t dsa
Accetta la posizione predefinita per la locazione del file
~/.ssh/id_dsa. Sei fortemente incoraggiato all'urgenza
di definire ed usare una passphrase per
aumentare la sicurezza della tua chiave. Immetti una passphrase
differente dalla password del tuo password e confermala
reinserendola nuovamente.
Copia la nuova chiave nel file corretto digitando i
seguenti comandi allo shell prompt.
$ cat ~/.ssh/id_dsa.pub>>~/.ssh/authorized_keys
Controlla con attenzione questo comando prima di premere il tasto
ENTER.
Se ~/.ssh/authorized_keys
esiste già, i contenuti di
~/.ssh/id_dsa.pub verranno appesi alla
fine del file ~/.ssh/authorized_keys.
Cambia i permessi della tua directory ~/.ssh
e delle tue chiavi con i comandi:
$ chmod 755 ~/.ssh$ chmod 644 ~/.ssh/authorized_keysTip
Puoi far si che il sistema ricordi la passphrase così da
non doverla digitare ogni volta che accedi al
CVS server. Fa riferimento alla
documentazione del programma ssh-add.
Configurazione per l'accesso CVScvsconfigurazione per l'accessocvsCVSROOTcvsCVS_RSHCVSROOTCVS_RSHcvs.cvsrc.cvsrcEvitare digitazioni ripetitivecvsevitare digitazioni ripetitive
Molti comandi CVS hanno bisogno di
certe opzioni per operare in modo consistente. Invece di
digitarle ogni volta che il comando è usato, puoi salvare gli
switches in un file che CVS leggerà
prima di eseguire la linea di comando.
Crea un file chiamato ~/.cvsrc nella tua home
directory. Dovrà contenere i seguenti comandi, uno per
riga:
cvs -z3
diff -uNp
rdiff -uNp
update -dPConfigurare un accesso CVS Read-Onlycvsconfigurare un accesso Read-Onlycvsaccesso anonimo
Se il tuo obbiettivo è scaricare i vari documenti &FC; e
renderizzarli sul tuo sistema, hai bisogno solo di un accesso read-only
al depositorio CVS. Segui le
istruzioni in questa sezione quindi salta direttamente a
.
Cambia directories dove vuoi che vengano collocati i files dal
CVS, ed esegui i
seguenti comandi:
$ export CVSROOT=:pserver:cvs.fedora.redhat.com:/cvs/docs$ cvs login$ cvs checkout docs-commonmodule-name$ cvs checkoutmodule-name$ cdmodule-name
Una volta eseguito il check-out del modulo, non importa quale
CVSROOT
è impostata perchè è registrata nel file
CVS/Root per ogni directory nel tuo depositorio
locale. Finchè la tua directory di lavoro ha una directory
CVS/, il programma
CVS localizzerà automaticamente
il repositorio &FC;.
Configurazione accesso CVS Read/Writecvsconfigurazione accesso read/writecvsconfigurare gli accessi per gli autori
Per scrivere un nuovo documento o modificarne uno esistente, devi
ottenere pieno accesso read/write al repositorio
CVS della Documentazione di &FC;.
Per i dettagli completi su questo procedimento, fa riferimento al
sito web
http://fedoraproject.org/wiki/DocsProject/NewWriters. Segue un sommario:
Sottoscriviti alla
fedora-docs-list, che è il forum principale del progetto.
Genera una chiave GNU Privacy Guard (GPG) per
identificarti nel progetto.
Registrati per un account in
Bugzilla, se non ne hai già uno.
Bugzilla è il modo con cui teniamo traccia degli errori,
cambiamenti e progetti.
Posta un
auto
introduzione alla lista.
Dopo che la tua
auto
introduzione è stata approvata il tuo accesso
CVS verrà garantito.
Ogni autore, e questo ti include una volta che la tua auto introduzione
è stat ricevuta, ha un unico
$CVSROOT
per accedere al repositorio CVS:
$ export CVSROOT=:ext:yourname@cvs.fedora.redhat.com:/cvs/docs$ export CVS_RSH=/usr/bin/ssh
Con le variabili ambiente
$CVSROOT
e
$CVS_RSH
impostate, puoi accedere al repositorio:
$ cvs co -c
Ti verrà richiesta la passphrase per la tua chiave
SSH. Premi
ENTER
e riceverai la lista dei moduli presenti nel
repositorio.
Comandi CVS di basecvscomandi
Dopo aver configurato il sistema per funzionare con CVS, esegui il checkout
dei moduli su cui lavorerai.
Tip
Per vedere se hai impostato correttamente la variabile
$CVSROOT,
o lo switch della linea di comando
repository, vedi
se hai una subdirectory CVS/ nella tua
directory di lavoro.
Se hai una directory CVS/,
CVS ignorerà qualsiasi
$CVSROOT
o switch della linea di comando .
Fare il checkout dei modulicvseseguire il checkout dei moduli
Devi fare il checkout di un modulo una volta. Dopo che la copia del
modulo è sul tuo sistema, è sul tuo sistema.
Per fare il checkout di un modulo, usa il seguente comando:
$ cvs co<module-name>
Per esempio, per fare il checkout del modulo
example-tutorial, cambia
la tua directory di lavoro, ed esegui il seguente comando:
$ cvs co example-tutorial
Verrà creata una directory chiamata example-tutorial/
nella directory corrente.
Se non viene specificato un nome del ramo durante il checking del modulo,
verrà riferito al HEAD del modulo
CVS.
Fare il checkout dei rami dei modulicvseseguire il checkout dei modulieseguire il checkout dei rami
Pensa ad un ramo CVS come una versione
dei files per una particolare versione del pacchetto o manuale.
Per fare il checkout di un ramo di un modulo, usa il seguente comando:
$ cvs co<directory><branchname><module-name>
Una directory chiamata <directory>
viene creata, ed i files per il ramo
<branchname> del modulo
<module-name> sono
copiati nella directory.
Per esempio, per fare il checkout di un ramo denominato BRANCH-VERSION-1.2
dal modulo mymodule, usa
il comando:
$ cvs co -d mymodule-1.2 -r BRANCH-VERSION-1.2 mymodule
Verrà eseguito il checkout del ramo BRANCH-VERSION-1.2 del modulo nella
directory mymodule-1.2 sul tuo
sistema.
Per determinare quale ramo e tags esiste per un file, usa il
comando:
$ cvs status<filename>
Per esempio, lo status del file
foo.sgml è il seguente:
===================================================================
File: foo.sgml Status: Up-to-date
Working revision: 1.47
Repository revision: 1.47 /cvs/docs/custom-guide/rhl-cg-en.sgml,v
Sticky Tag: (none)
Sticky Date: (none)
Sticky Options: (none)
Existing Tags:
BRANCH-VERSION-1.2 (branch: 1.25.2)
Solo dei tags marcati come rami nella seconda colonna sotto la
sezione Existing Tags si può eseguire
il checkout come ramo.
Aggiornare i filescvsaggiornare i files
Per ricevere l'ultima versione di un file in un modulo, cambia
nella directory che contiene i files per il modulo ed
esegui il comando:
cvs update
Le ultime versioni di tutti i files ne modulo sono
scaricate nella tua copia locale. Se noti un conflitto di file,
fa riferimento a .
Eseguire il commit dei filescvseseguire il commit dei files
Dopo aver modificato i files nella tua versione locale di un modulo, esegui il commit
per salvare i cambiamenti sul CVS
server:
$ cvs commit "alcuni messaggi di log" filename
Se preferisci scrivere il tuo messaggio di log con il tuo editor
di testo preferito, come definito dalla variabile ambiente $VISUAL o
$EDITOR, ometti semplicemente la -m "alcuni
messaggi di log". Il buffer conterrà già
alcuni commenti che descrivono i cambiamenti; non è necessario cancellarli
quando inserirai il tuo testo.
I messaggi di log dovranno essere più descrittivi possibile affinchè
chiunque altro lavori al modulo capisca cos'è stato cambiato.
Usare un messaggio di log tipo aggiornati alcuni
files non descrive accuratamente cosa è stato cambiato
e non ti aiuterà in futuro. Se hai corretto un
errore, fa riferimento a Bugzilla.
Il <filename> può essere un
filename, una serie di filenames separati da spazi, o un gruppo
di filenames specificati usando una wildcards tipo
*.png o foo-*.sgml.
Se nessun filename o gruppo di filenames è specificato nel
comando commit, tutti i cambiamenti eccezionali
di qualsiasi tipo sono commessi al server. Il comando è recursivo
ed includerà i cambiamenti in ogni subdirectories del modulo.
Usa cautela quando esegui il comando commit
senza nessun filenames poichè potresti non ricordare esattamente
quali files sono cambiano.
Se noti un conflitto di file, fa riferimento a
.
Aggiungere filescvsaggiungere files
Per aggiungere un file ad un modulo, crea il file sulla tua copia locale
quindi esegui il seguente comando:
$ cvs addfile-to-add
Dopo aver aggiunto il file, devi eseguire un commit
dell'add per copiarlo sul server:
$ cvs commit "qualche messaggio di log" file-da-aggiungereAmministrare i files binaricvsfiles binari
I files comunemente più archiviati sono di semplice testo ma
qualche volta sono archiviati anche files binari. Il programma
cvs determina le estensioni dei
files più comuni tipo .png o
.jpg, così di solito cvs
"fa la cosa giusta".
Quando si esegue il checkout della copia di un file del repositorio,
il cvs lo scansisce per parole chiavi speciali,
tipo "$id:$" e
sostituisce le stringhe con un valore generato, tipo il numero di versione
del file.
Questa sostituzione di keyword di solito corrompe i files binari, così
deve essere disattivata se cvs non
riconosce i tuoi files come binari. Per marcare il tuo file come
binario, e quindi disattivare l'espansione delle keyword, usa
il comando:
$ cvsfilename
Nota che il file deve già essere nel repositorio
CVS prima di poter usare il comando
. Questo è OK, fino a che
l'espansione delle keyword è fatta appena il file viene sottoposto a checkout e
copiato nella directory locale, non quando il file viene commesso al
repositorio.
Ripristinare un file binario
Se esegui il check di un file binario nel repositorio e trovi
che sia corrotto durante il checkout, non aver paura. Usa semplicemente
il comando come descritto sopra, cancella
la tua copia locale del file, ed esegui nuovamente il checkout.
Rimuovere i filescvsrimuovere i files
Se un file non è più necessario nel modulo, usa il
comando remove per rimuoverlo dalla tua copia
locale poi esegui il commit per rimuoverlo dal
server. Anche se il file è rimosso dalla versione corrente del
modulo, una copia archiviata è ancora lasciata sul server e può
essere recuperato in qualsiasi momento con il comando add.
$ cvs rm -ffile-to-remove
Dopo la rimozione del file, devi eseguire il commit della
rimozione:
$ cvs commit "qualche messaggio di log" file-da-rimuovere
Non puoi usare wildcards nel eseguire il commit
per identificare files rimossi. Essi devono essere specificati con il nome
di file esatto.
Se necessiti di rinominare un file, è meglio rinominarlo sul
CVS server affinchè la storia del
file possa essere preservata. Se hai bisogno di rinominare un file, manda un
email a
cvsdocs-administrator@fedora.redhat.com chiedendo di voler rinominare un file.
Status dei filescvsstatus dei files
Qualche volta è necessario vedere lo
status di un file in un
modulo CVS. Per vedere lo status di un
file, usa il comando:
$ cvs statusfilename
Il rapporto dello status di un file nel repositorio è come segue:
Up-to-date
La tua revisione del file è identica all'ultima
revisione sul CVS server.
Locally Modified
Hai aggiornato il file all'ultima versione dal server,
ma poi hai modificato il file sul tuo sistema.
Locally Added
Hai aggiunto il file con il comando cvs add
ma non hai ancora eseguito il commit per l'aggiunta del
file.
Locally Removed
Hai rimosso il file con il comando cvs
remove ma non hai ancora eseguito il commit per la
rimozione.
Needs Checkout
Sul server c'è una nuova versione del file ed necessita di
essere recuperata. Anche se lo status include la parola
checkout, vuol dire che hai bisogno di aggiornare
i files con il comando cvs update.
Needs Patch
La revisione del tuo checkout locale necessita di una patch per
essere l'ultima versione dal server. Esegui il
comando cvs update per risolvere.
Needs Merge
Esiste una nuova revisione sul server e la tua versione di copia
locale contiene modifiche di cui non hai fatto ancora il commit. Questo
status di solito avviene se non hai l'ultima revisione
del file ed lo editi lo stesso.
File had conflicts on merge
Simile a Needs Merge,
eccetto che quando hai provato ad eseguire il comando cvs
update, le differenze non potevano essere
risolte automaticamente. Fa riferimento a
per
maggiori informazioni sulla risoluzione dei conflitti.
Unknown
Il CVS server non sa nulla
su questo file. Il file non è stato aggiunto ne
rimosso localmente e non è mai stato commesso al
server. Questo status di solito sussiste per i files che di cui non
vorresti fare il commit al CVS tipo
i generated-index.sgml o per quei files
che vorresti aggiungere al repositorio ma dei quali non hai
ancora impartito il comando cvs add.
Risoluzione dei conflitticvsrisoluzione dei conflitti
Se modifichi un file e la stessa regione è modificata da qualcun'altro
che esegue il commit prima di te, probabilmente vedrai un messaggio
simile al seguente quando eseguirai il commit o l'aggiornamento
della tua copia locale del modulo:
RCS file: /cvs/docs/module-name/filename.sgml,v
retrieving revision 1.12
retrieving revision 1.13
Merging differences between 1.12 and 1.13 into filename.sgml
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in filename.sgml
C filename.sgml
Per risolvere il conflitto, apri il file, cerca
<<<<<<<
e determina quale versione del contenuto è corretta. Per
esempio:
<para>
Some sentence.
<<<<<<< filename.sgml
A sentence that was changed in the working copy.
=======
A same sentence that was changed differently and committed.
>>>>>>> 1.13
</para>
Il contenuto fra le
<<<<<<<,
e le ======= è il contenuto
della tua copia di lavoro. Il contenuto fra le
======= e le
>>>>>>> è
il contenuto dal server.
Risolvi il conflitto editando la tua copia, ed esegui il commit del file.
Sommariocvscomandisommario di
Tutti i comandi assumono che tu sia nella directory appropriata per
il modulo CVS.
Comandi CVS di baseCommandoDescrizionecvs checkout
<module-name>
or cvs co <module-name>Crea una directory chiamata
<module-name> con il contenuto del
modulo nella directorycvs co -d <directory> -r <branchname><module-name>Crea la directory <directory>
con i contenuti del ramo <branchname>
del modulo <module-name>cvs update or cvs upAggiorna i tuoi files con gli ultimi files dal CVS servercvs add <filename>Aggiunge un nuovo file "filename" al CVS servercvs commit -m "My message"
<filename>Aggiorna il file <filename> con
l'ultima copia proveniente dal tuo computercvs log <filename>Mostra i messaggi di commit per il file <filename>cvs status <filename>Mostra lo status del file, tipo Locally
Modifiedcvs status -v <filename>Mostra i tags esistenti ed i rami per il filecvs diff <filename>Mostra la differenza della copia di lavoro del file e l'ultima
versione del file per il ramocvs diff -r1.1 -r1.2 <filename>Mostra la differenza fra le versioni 1.1 e 1.2 per il file
Per maggiori informazioni, leggi il manuale CVS disponibile sul tuo
sistema in
/usr/share/doc/cvs-<version-number>/cvs.ps
(la versione CVS può cambiare) e visita la pagina web di CVS disponibile
su
http://www.cvshome.org/.
Tip
Poichè CVS usa
ssh per connettersi al
CVS server, ti verrà richiesta
la password prima di eseguire una richiesta
CVS. Se vuoi configurare
la tua macchina affinchè tu non abbia più bisogno di
inserire la password, fa riferimento a
&RH;
Linux 9 Customization Guide per i dettagli
sull'uso di ssh-agent.