Guida del CommitterThe FreeBSD Italian Documentation Project199920002001200220032004The FreeBSD Italian Documentation Project
&tm-attrib.freebsd;
&tm-attrib.cvsup;
&tm-attrib.ibm;
&tm-attrib.intel;
&tm-attrib.sparc;
&tm-attrib.general;
$FreeBSD$$FreeBSD$Questo documento fornisce informazioni per la comunità dei
committer di FreeBSD. Tutti i nuovi committer dovrebbero leggere
questo documento prima di iniziare, e i committer già esistenti
sono fortemente incoraggiati a riguardarselo di tanto in tanto.
&trans.it.alex;
Dettagli AmministrativiHost con il Repository
Principalencvs.FreeBSD.orgMetodi di Accesso&man.ssh.1;, solo protocollo 2CVSROOT Principalencvs.FreeBSD.org:/home/ncvs
(guarda anche la ).&a.cvsadm; Principali&a.peter; e &a.markm;, così come &a.joe; e &a.marcus;
per i ports/Mailing List&a.doc-developers;, &a.doc-committers;;
&a.ports-developers;, &a.ports-committers;;
&a.src-developers;, &a.src-committers;. (Ogni repository di
progetto ha le sue mailing list -developers e -committers. Gli
archivi per queste liste possono essere trovati nei file
/home/mail/repository-name-developers-archive
e
/home/mail/repository-name-committers-archive
sul cluster di FreeBSD.org.)Report mensili del Core Team/home/core/public/monthly-report
sul cluster di FreeBSD.org.Tag CVS Degni di NotaRELENG_4 (4.X-STABLE),
RELENG_5 (5.X-STABLE),
HEAD (-CURRENT)È richiesto l'uso di &man.ssh.1; o &man.telnet.1; con
Kerberos 5 per connettersi agli host del progetto. Per &man.ssh.1;
è permesso solo il protocollo 2.
Questi sono generalmente più sicuri che un semplice &man.telnet.1;
o &man.rlogin.1; visto che la negoziazione delle credenziali
avverrà sempre in modo cifrato.
Tutto il traffico è cifrato di default
con &man.ssh.1;. Insieme a programmi di utilità come
&man.ssh-agent.1; e &man.scp.1;, anch'essi disponibili, &man.ssh.1;
è di gran lunga più conveniente. Se non sai nulla di
&man.ssh.1;, guarda la .Tipi di Bit di CommitIl repository CVS di FreeBSD ha un numero di componenti che, se
combinati, supportano i sorgenti di base del sistema operativo, la
documentazione, l'infrastruttura dei port delle applicazioni di terze
parti, e vari programmi di utilità. Quando vengono assegnati i bit
di commit di FreeBSD, vengono specificate le aree dell'albero dove il bit
può essere usato. Solitamente, le aree associate a un bit
corrispondono a quelle di chi ha autorizzato l'assegnamento del bit di
commit. Ulteriori aree di autorità possono essere aggiunte in
seguito: se occorrerà, il committer dovrà seguire le
normali procedure di allocazione del bit di commit per quell'area
dell'albero, chiedendo l'approvazione all'entità appropriata e
possibilmente prendendo un mentore per quell'area per un po' di
tempo.Tipo di CommitterResponsabileComponenti dell'Alberosrccore@src/, doc/ soggetta ad appropriata revisionedocdoceng@doc/, www/, documentazione src/portsportmgr@ports/I bit di commit assegnati prima dello sviluppo della nozione di aree
di autorità possono essere usati in molte parti dell'albero.
Tuttavia, il buon senso dice che un committer che non ha mai lavorato
precedentemente in un'area dell'albero chieda una revisione del proprio
lavoro prima di effettuare il commit, chieda l'approvazione del
responsabile appropriato, e/o lavori d'accordo con un mentore. Dato che
le regole sulla manutenzione del codice differiscono a seconda dell'area
dell'albero, questo è per il bene del committer che lavora in
un'area poco familiare tanto quanto per gli altri che lavorano
sull'albero.I committer sono incoraggiati a chiedere la revisione del proprio
lavoro come parte del normale processo di sviluppo, indifferentemente
dall'area dell'albero in cui stanno lavorando.Regolamento dell'attività del doc/
committer in src/I doc committer possono effettuare commit riguardanti modifiche
alla documentazione sui file src, come pagine man, README,
database dei fortune, file dei calendari, e correzioni sui commenti
senza l'approvazione di un src committer, prestando la solita
attenzione e cura ai commit.I doc committer possono effettuare commit riguardanti piccole
modifiche e correzioni ai sorgenti, come correzioni per la
compilazione, piccole funzionalità, ecc., con un
Approved by di un src committer.I doc committer possono cercare di ottenere il commit bit sui
src acquisendo un mentore, che proporrà il doc committer al
core. Una volta approvato, verrà aggiunto al file
access ed inizierà il normale periodo
sotto la guida del mentore, che implica l'aggiunta di
Approved by per un certo periodo.Approved by può essere usato solamente
se l'approvazione è di un src committer senza mentore —
i committer ancora sotto la guida di un mentore possono fornire al
più un Reviewed by ma non un
Approved by.Operazioni sul CVSSi assume che tu abbia già familiarità con le operazioni
di base di CVS.I &a.cvsadm; sono i proprietari del repository CVS e
sono responsabili delle sue modifiche dirette allo scopo di ripulire o
sistemare dei gravi abusi di CVS da parte di un committer.
Nel caso dovessi causare qualche problema al repository,
diciamo una errata operazione di cvs import o
cvs tag, invia un messaggio al membro responsabile
fra i &a.cvsadm;, come stabilito nella tabella qui sotto, (o chiama uno
di loro) ed esponi il problema. Per questioni molto importanti che
interessano l'intero albero CVS—non solo un'area
specifica—puoi contattare i &a.cvsadm;. Non
contattare i &a.cvsadm; per copie di repository o altre cose che possono
gestire i team più specifici.Gli unici che hanno il
permesso di manipolare direttamente i bit del repository sono i
repomeister. Per questo non ci sono shell di login
disponibili sulle macchine del repository, tranne che per i
repomeister.A seconda dell'area interessata del repository CVS, dovresti
mandare la tua richiesta a uno dei seguenti indirizzi email:ncvs@ - a proposito di /home/ncvs, il repository dei
srcpcvs@ - a proposito di /home/pcvs, il repository dei
portdcvs@ - a proposito di /home/dcvs, il repository dei
docprojcvs@ - a proposito di /home/projcvs, il repository dei
progetti di terze partiL'albero CVS è attualmente diviso in quattro repository
differenti, ovvero doc, ports,
projects e src. Questi vengono
ricomposti sotto un unico CVSROOT quando vengono
distribuiti tramite CVSup per la convenienza
dei nostri utenti.Nota che il modulo www che contiene i sorgenti
del sito web di FreeBSD
è contenuto all'interno del repository
doc.I repository CVS sono ospitati sulle macchine repository.
Attualmente, ognuno dei repository elencati qui sopra risiede sulla stessa
macchina fisica, ncvs.FreeBSD.org, ma
per permettere la possibilità di averne ognuno su una macchina
diversa in futuro, ci sono diversi nomi di host che i committer
dovrebbero utilizzare. Inoltre, ogni repository risiede in una
directory differente. La seguente tabella racchiude la situazione.
Repository CVS, Host e Directory di &os;RepositoryHostDirectorydocdcvs.FreeBSD.org/home/dcvsportspcvs.FreeBSD.org/home/pcvsprojectsprojcvs.FreeBSD.org/home/projcvssrcncvs.FreeBSD.org/home/ncvs
Le operazioni sul CVS sono fatte da remoto impostando la variabile di
ambiente CVSROOT a ncvs.FreeBSD.org:/home/ncvs
e la variabile CVS_RSH a ssh, e
quindi effettuando le appropriate operazioni di check-out/check-in.
Molti committer definiscono degli alias che si espandono nella corretta
invocazione di cvs per il repository
appropriato. Per esempio, un utente di &man.tcsh.1; può aggiungere
le seguenti righe al suo .cshrc per questo
scopo:alias dcvs env CVS_RSH=ssh cvs -d user@dcvs.FreeBSD.org:/home/dcvs
alias pcvs env CVS_RSH=ssh cvs -d user@pcvs.FreeBSD.org:/home/pcvs
alias projcvs env CVS_RSH=ssh cvs -d user@projcvs.FreeBSD.org:/home/projcvs
alias scvs env CVS_RSH=ssh cvs -d user@ncvs.FreeBSD.org:/home/ncvsIn questo modo è possibile fare tutte le operazioni di
CVS localmente ed usare Xcvs
commit per effettuare il commit sull'albero CVS ufficiale.
Se desideri aggiungere qualcosa di totalmente nuovo (ad esempio dei
sorgenti in contrib, ecc.), deve essere usato cvs
import. Guarda come riferimento la pagina man di &man.cvs.1;
per l'utilizzo.Per favore non usare cvs
checkout o update con la macchina con il
repository ufficiale impostata come CVS Root per tenere aggiornato il
tuo albero dei sorgenti. CVS da remoto non è ottimizzato per la
distribuzione via rete e richiede un grande sovraccarico di lavoro e di
amministrazione sul lato server. Utilizza il nostro metodo di
distribuzione avanzato cvsup per ottenere i bit del
repository, ed esegui solamente l'operazione di
commit sull'host con il repository.
Forniamo un'estesa rete di mirror cvsup per questo scopo, così
come diamo accesso al cvsup-master se hai veramente
bisogno di essere aggiornato alle ultime modifiche.
Il cvsup-master ha la potenza necessaria a gestire
questa cosa, il repository principale no. &a.kuriyama; è a capo
del cvsup-master.Se devi usare le operazioni add e
delete di CVS come se fosse un'operazione &man.mv.1;,
allora va effettuata una copia nel repository piuttosto che usare
add e delete di CVS. In una
copia nel repository, un CVS Meister
copierà il/i file nei loro nuovi nomi e/o locazioni e ti
avviserà ad operazione avvenuta. Lo scopo di una copia del
repository è di preservare la cronologia dei cambiamenti del file,
o i log. Noi del FreeBSD Project diamo molta importanza alla cronologia
dei cambiamenti che CVS fornisce al progetto.Informazioni di riferimento, tutorial, e FAQ su CVS possono
essere trovate su: .
Anche le informazioni contenute nei capitoli di Karl Fogel
da Open Source Development with CVS sono molto
utili.&a.des; ha fornito inoltre il seguente mini manuale su
CVS.Effettua il check out di un modulo con il comando
co o checkout.&prompt.user; cvs checkout shazamQuesto estrae una copia del modulo shazam. Se
non c'è alcun modulo shazam nel file dei
moduli, cercherà allora una directory di primo livello chiamata
shazam.
Opzioni utili con cvs checkoutNon crea le directory vuoteEstrae solo un livello, non le sottodirectoryEstrai la versione, il ramo, o il tag
verEstrai i sorgenti com'erano in data
data
Esempi pratici su FreeBSD:Estrai il modulo miscfs, che
corrisponde a src/sys/miscfs:&prompt.user; cvs co miscfsOra hai una directory chiamata miscfs
con le sottodirectory CVS,
deadfs, devfs, e
così via. Una di queste (linprocfs)
è vuota.Estrai gli stessi file, ma con il percorso completo:&prompt.user; cvs co src/sys/miscfsOra hai una directory chiamata src,
con le sottodirectory CVS e
sys. La directory
src/sys ha le
sottodirectory CVS e
miscfs, ecc.Estrai gli stessi file, ma elimina le directory vuote:&prompt.user; cvs co -P miscfsOra hai una directory chiamata miscfs
con le sottodirectory CVS,
deadfs, devfs... ma nota
che non c'è nessuna sottodirectory
linprocfs, perché non contiene alcun
file.Estrai la directory miscfs, ma nessuna
delle sue sottodirectory:&prompt.user; cvs co -l miscfsOra hai una a directory chiamata miscfs
con solo una sottodirectory chiamata
CVS.Estrai il modulo miscfs com'è nel
ramo 4.X:&prompt.user; cvs co -rRELENG_4 miscfsPuoi modificare i sorgenti ed effettuare il commit su questo
ramo.Estrai il modulo miscfs com'era nella
3.4-RELEASE.&prompt.user; cvs co -rRELENG_3_4_0_RELEASE miscfsNon potrai effettuare il commit delle modifiche, visto che
RELENG_3_4_0_RELEASE corrisponde ad un
preciso istante di tempo, non a un ramo.Estrai il modulo miscfs com'era il 15
gennaio 2000.&prompt.user; cvs co -D'01/15/2000' miscfsNon potrai effettuare modifiche.Estrai il modulo miscfs com'era una
settimana fa.&prompt.user; cvs co -D'last week' miscfsNon potrai effettuare modifiche.Tieni presente che cvs salva i metadati in sottodirectory chiamate
CVS.Gli argomenti di e
sono fissi, che vuol dire che cvs se li ricorderà in seguito,
ad esempio quando farai un cvs update.Controlla lo stato dei file estratti con il comando
status.&prompt.user; cvs status shazamQuesto visualizza lo stato del file shazam o
di ogni file nella directory shazam. Per ogni
file, lo stato è uno fra:Up-to-dateIl file à aggiornato e non è stato
modificato.Needs PatchIl file non è stato modificato, ma c'è una
nuova versione nel repository.Locally ModifiedIl file è aggiornato, ma è stato
modificato.Needs MergeIl file è stato modificato, e c'è una nuova
versione nel repository.File had conflicts on mergeCi sono stati conflitti l'ultima volta che il file
è stato aggiornato, e non sono ancora stati
risolti.Vedrai anche la versione e la data locale, il numero dell'ultima
versione appropriata (ultima appropriata perché
se hai una data, un tag o un ramo fissati, può non essere
l'ultima versione), e i tag, le date o le opzioni applicate.Dopo avere estratto qualcosa, puoi aggiornarlo con il comando
update.&prompt.user; cvs update shazamQuesto aggiorna il file shazam o il contenuto
della directory shazam all'ultima versione sul
ramo che hai estratto. Se hai estratto un preciso instante di
tempo, non fa nulla a meno che i tag non siano stati
spostati nel repository o qualche altra strana cosa sia in
corso.Opzioni utili, in aggiunta a quelle elencate sopra, con
checkout:Estrae ogni directory aggiuntiva mancante.Scarica l'ultima versione del ramo principale.Altre magie (guarda sotto).Se hai estratto un modulo con o
, l'esecuzione di cvs update
con un argomento differente di o
o con selezionerà un
nuovo ramo, una nuova versione o una nuova data.
L'opzione elimina tutti i tag, le date o le
versioni fissate mentre e ne
impostano di nuove.Teoricamente, specificando HEAD come argomento
di avrai lo stesso risultato di
, ma è solo in teoria.L'opzione è utile se:qualcuno ha aggiunto delle sottodirectory al modulo che hai
estratto dopo averlo estratto.hai estratto con , e dopo cambi idea e
vuoi estrarre anche le sottodirectory.hai cancellato delle sottodirectory e vuoi estrarle
nuovamente.Osserva l'output di cvs update con
cura. La lettera all'inizio di ogni file indica cosa
è stato fatto su di esso:UIl file è stato aggiornato senza problemi.PIl file è stato aggiornato senza problemi (vedrai
questo solo quando lavorerai su un repository remoto).MIl file è stato modificato, ed è stato
fuso senza conflitti.CIl file è stato modificato, ed è stato
fuso con dei conflitti.La fusione è ciò che avviene quando estrai una copia
di qualche codice sorgente, lo modifichi, quindi qualcun altro
effettua il commit di un'altra modifica, e tu esegui cvs
update. CVS nota che tu hai fatto dei cambiamenti locali, e
cerca di fondere le tue modifiche con quelle fatte tra la versione che
hai originariamente estratto e quella che stai aggiornando. Se i
cambiamenti sono a due parti separate del file, solitamente non ci
saranno problemi (sebbene il risultato possa non essere
sintatticamente o semanticamente corretto).CVS stamperà una M davanti ad ogni file
modificato localmente anche se non c'è una nuova versione nel
repository, quindi cvs update è adatto
per avere un resoconto di quello che hai cambiato in locale.Se appare una C, allora le tue modifiche sono
in conflitto con i cambiamenti presenti nel repository (le modifiche
sono sulle stesse righe, o righe vicine, o hai cambiato così
tanto il file locale che cvs non è in grado
di applicare le modifiche al repository). Dovrai allora andare a
modificare il file a mano e risolvere i conflitti; questi saranno
evidenziati da righe di simboli <,
= e >. Per ogni conflitto,
ci sarà una linea di demarcazione formata da sette
< e il nome del file, seguita da una porzione di
quello che il tuo file locale conteneva, seguita da una riga di
separazione con sette =, seguita dalla porzione
corrispondente presente nella versione del repository, seguita da una
riga di separazione con sette > e il numero di
versione che stai aggiornando.L'opzione è un po' voodoo. Aggiorna
il file locale alla versione specificata come se avessi usato
, ma non cambia il numero di versione o il ramo
registrato del file locale. Non è realmente utile tranne
quando usata due volte, nel qual caso fonderà le modifiche
tra le due versioni specificate nella copia su cui stai
lavorando.Per esempio, supponiamo che ti abbia effettuato il commit di una
modifica a shazam/shazam.c in &os.current; e che
più tardi tu voglia effettuare l'MFC. Le modifiche che vuoi
fondere sono nella versione 1.15:Estrai la versione &os.stable; del modulo
shazam:&prompt.user; cvs co -rRELENG_5 shazamApplica le modifiche tra la ver 1.14 e la 1.15:&prompt.user; cvs update -j1.14 -j1.15 shazam/shazam.cQuasi certamente avrai un conflitto a causa delle righe
$Id$ (o nel caso di FreeBSD, $FreeBSD$),
quindi dovrai modificare a mano il file per risolvere il conflitto
(rimuovi le righe di separazione e la seconda linea
$Id$, lasciando la linea $Id$
originale intatta).Guarda le differenze tra la versione locale e quella sul
repository con il comando diff.&prompt.user; cvs diff shazammostra ogni modifica che hai fatto al file o al modulo
shazam.
Opzioni utili con cvs diffUtilizza il formato diff unificato.Utilizza il formato diff contestuale.Visualizza i file mancanti o aggiunti.
Vorrai sempre utilizzare , visto che le diff
unificate sono molto più semplici da leggere rispetto a quasi
tutti gli altri formati (in alcune circostanze, le diff contestuali
generate con l'opzione possono essere meglio, ma
sono molto più voluminose). Una diff unificata consiste di una
serie di parti. Ogni parte inizia con una riga con due caratteri
@ e specifica dove si trovano le differenze nel
file e su quante linee si estendono. Questa è seguita da un
certo numero di righe; alcune (precedute da uno spazio) fanno parte
del contesto; altre (precedute da un -) sono quelle
eliminate e altre ancora (precedute da un +) sono
quelle aggiunte.Puoi anche effettuare una diff con una versione differente
rispetto a quella che hai estratto specificando la versione con
o come per il
checkout o l'update,
o anche visualizzare le differenze tra due versioni arbitrarie
(indipendentemente da quella che hai localmente) specificando
due versioni con o
.Guarda le righe di log con il comando
log.&prompt.user; cvs log shazamSe shazam è un file, questo
stamperà un'intestazione con le
informazioni sul file, come la locazione nel repository dove il file
è salvato, a quale versione è l'HEAD
per questo file, in quali rami si trova il file, e qualsiasi tag
valido per questo file. Quindi, per ogni versione del file, viene
stampato un messaggio di log. Questo include la data e l'ora del
commit, chi ha fatto il commit, quante righe sono state aggiunte e/o
tolte, e alla fine il messaggio di log che il committer ha scritto
quando ha inviato la modifica.Se shazam è una directory, allora le
informazioni di log descritte sopra vengono stampate a turno per ogni
file presente nella directory. A meno che tu abbia dato l'opzione
a log, vengono stampati anche
i log per tutte le sottodirectory di shazam, in
maniera ricorsiva.Usa il comando log per vedere la storia di uno
o più file, come è salvata nel repository CVS. Puoi
anche usarlo per vedere il messaggio di log di una versione specifica,
se aggiungi al
comando log:&prompt.user; cvs log -r1.2 shazamQuesto stamperà solamente il messaggio di log per la
versione 1.2 del file shazam
se è un file, oppure i messaggi di log per le versioni 1.2 di
ogni file sotto shazam se è una
directory.Guarda chi ha fatto cosa con il comando
annotate. Questo comando visualizza ogni riga del
file o dei file specificati, insieme all'utente che ha modificato
più recentemente quella riga.&prompt.user; cvs annotate shazamAggiungi nuovi file con il comando add.Crea il file, usa cvs add su di esso, quindi
cvs commit.In modo analogo, puoi aggiungere nuove directory creandole e poi
utilizzando cvs add su di esse. Nota che non
c'è bisogno di usare il commit sulle directory.Rimuovi i file obsoleti con il comando
remove.Rimuovi il file, quindi usa cvs rm su di esso,
ed infine cvs commit.Effettua il commit con il comando commit o
checkin.
Opzioni utili con cvs commitForza il commit di un file non modificato.Specifica un messaggio di commit sulla riga di comando
anziché invocare un editor.