CVSO Concurrent Versions System (CVS) oferece
uma plataforma onde vários utilizadores poderão editar os mesmos ficheiros.
Como poderá imaginar se um grupo de utilizadores editar os ficheiros numa
única pasta, o caos iria reinar. Se usar o CVS,
todavia, um grupo de utilizadores poderá estar a trabalhar em segurança no
mesmo conjunto de ficheiros. O CVS mantém a
cópia-mestra dos ficheiros e regista quem alterou o quê e quando, num
repositório central. Se ocorrerem conflitos, o CVS
informá-lo-á. O CVS é normalmente usado para que
os programadores possam partilhar código, mas também funciona bem para a
documentação.
cvsComo Funciona o CVScvscomo funcionacvsintrodução
Na maioria dos casos, cada conjunto de ficheiros que compõe um pacote ou
projecto é gravado como um módulo no servidor de
CVS.Ao lidar com ficheiros no CVS, você
extrai uma cópia do módulo para o seu sistema
de ficheiros local. Depois de modificar um ou mais ficheiros, o
utilizador envia os mesmos ficheiros de volta
para o servidor do repositório central do CVS.
Com o CVS poderá editar um ficheiro sem
pedir primeiro permissão ou bloquear o ficheiro. A parte
concurrent (concorrente) do nome do
CVS vem da sua capacidade de permitir a várias
pessoas diferentes editarem partes diferentes do mesmo ficheiro. Desde
que nenhuma das alterações se sobreponha, o CVS
consegue gravar correctamente as suas alterações. No cas de alterações
duplicadas, elas são marcadas de forma clara nos ficheiros e os autores
deverão resolver o problema entre eles. Quando você envia as alterações, só as alterações aos ficheiros
que o servidor reconhece é que são enviadas. Por outras palavras, se
criou um ficheiro na sua cópia local do módulo, o ficheiro novo não
é enviado automaticamente para o servidor. Precisa primeiro de
adicionar o dito ficheiro ao repositório e depois,
sim, enviá-lo. Se remover um ficheiro da sua cópia local do módulo,
também terá de indicar que o deseja remover do repositório no servidor
de CVS e, posteriormente, confirmar a remoção do ficheiro. Os comandos específicos para efectuar estas acções são discutidos em . Se alguém modificou o ficheiro desde a última altura em que obteve
o ficheiro do CVS e quando você tentar enviar uma alteração sua, o
CVS irá tentar juntar as alterações na
cópia-mestra no servidor do CVS. Se o conteúdo
que alterou estiver num local diferente no ficheiro do conteúdo alterado
pela outra pessoa, então é possível que a acção de envio seja bem-sucedida
sem haver conflitos. Se alguém modificou o mesmo
conteúdo que você alterou e então enviar, irá então ver uma mensagem
a avisar da ocorrência de um conflito. Como tal, terá de
actualizar os seus ficheiros com frequência. É uma
boa prática actualizá-los antes de começar a modificá-los. Veja em
algumas instruções de
resolução de conflitos.Preparar para Usar o CVScvspreparar a utilizaçãoAntes de usar o CVS, precisa de
estabelecer uma conta com o servidor do CVS.
Depois de obter uma conta, já não terá de efectuar estas acções de novo.
O CVS Está Instalado no Seu SistemacvsInstalação do RPMDeverá ter o pacote RPM do
CVS instalado. Verifique
a sua presença com o comando: $ rpm -q cvsSe observar um resultado semelhante a
cvs-1.11.19-1, então o pacote
está instalado. Se aparecer uma mensagem do tipo o
pacote cvs não está instalado, significa então que
é necessário instalar o pacote cvs antes
de prosseguir. Se não souber como fazê-lo, consulte o seu administrador
de sistema, que podê-lo-á instalar por si. Gerar as Chaves de SSHOpenSSHchaves de autorizaçãoO servidor de CVS usa chaves de
SSH Protocolo 2 para autenticar os
utilizadores. Como tal, terá de gerar um par de chaves, antes
de pedir uma conta de CVS. Se já
tiver uma chave DSA do SSH,
poderá saltar este passo. SugestãoJá terá uma chave de DSA se tiver o ficheiro
~/.ssh/id_dsa.pub no sistema. Se a sua chave DSA existente não precisar de
uma frase-senha, é-lhe altamente recomendado
que gere uma que peça de facto a senha. Use os seguintes passos para gerar uma chave DSA
usada pelo SSH Protocolo 2. É necessário para
uma conta do CVS em
cvs.fedora.redhat.com. OpenSSHssh-keygenssh-keygenPara gerar uma chave DSA que funcione com a versão do protocolo 2.0, numa consola, escreva o comando: $ ssh-keygen -t dsaAceite a localização por omissão do ficheiro em
~/.ssh/id_dsa. É-lhe pedido para definir
e usar uma frase-senha para melhorar a
segurança da sua chave. Indique uma frase-senha diferente da senha
da sua conta e confirme-a, introduzindo-a de novo. Copie a sua chave nova para o ficheiro correcto, escrevendo
o seguinte numa linha de comandos. $ cat ~/.ssh/id_dsa.pub>>~/.ssh/authorized_keysVerifique este comando com cuidado, antes de carregar na
tecla ENTER. Se o
~/.ssh/authorized_keys já existir,
o conteúdo do ~/.ssh/id_dsa.pub será
adicionado ao fim do ficheiro
~/.ssh/authorized_keys. Mude as permissões da sua pasta ~/.ssh
e das suas chaves com os comandos: $ chmod 755 ~/.ssh$ chmod 644 ~/.ssh/authorized_keysSugestãoPoderá fazer com que o seu sistema recorde a sua frase-senha,
para que não tenha de a escrever, sempre que acede ao servidor do
CVS. Veja a documentação do programa
ssh-add. Configurar o Acesso ao CVScvsconfigurar o acessocvsCVSROOTcvsCVS_RSHCVSROOTCVS_RSHcvs.cvsrc.cvsrcEvitar a Escrita Repetitivacvsevitar a escrita repetitivaMuitos dos comandos do CVS precisam
de certas opções da linha de comandos para funcionarem de forma
consistente. Em vez de os escrever, sempre que esse comando é usado,
poderá gravar as opções num ficheiro que o CVS
irá ler antes de executar a sua linha de comandos. Crie um ficheiro chamado ~/.cvsrc na sua
pasta pessoal. Deverá conter os seguintes comandos, estando um por
cada linha:
cvs -z3
diff -uNp
rdiff -uNp
update -dPConfigurar o Acesso Apenas para Leitura ao CVScvsconfigurar o acesso apenas para leituracvsacesso anónimoSe o seu objectivo é transferir os vários documentos do &FC;
e gerá-los para o seu sistema, só precisa de acesso apenas para
leitura ao repositório do CVS. Siga
as instruções desta secção e salte directamente para o
. Mude as pastas para onde deseja colocar os ficheiros do
CVS, e execute os seguintes comandos:
$ export CVSROOT=:pserver:cvs.fedora.redhat.com:/cvs/docs$ cvs login$ cvs checkout docs-commonnome-módulo$ cvs checkoutnome-módulo$ cdnome-móduloLogo que tenha obtido o módulo, não interessa com que valor está
definido o seu CVSROOT, dado que é guardado no ficheiro
CVS/Root de cada pasta do seu repositório local.
Desde que a sua pasta actual tenha uma pasta CVS/,
o programa CVS irá localizar automaticamente
o repositório do &FC;. Configurar o Acesso de Leitura/Escrita ao CVScvsconfigurar o acesso de leitura/escritacvsconfigurar o acesso para os autoresPara criar um documento novo ou para mudar um existente, terá
de obter o acesso completo de leitura/escrita ao repositório de
CVS da Documentação do &FC;. Para saber
os detalhes completos deste processo, veja na página Web
http://fedoraproject.org/wiki/DocsProject/NewWriters. Em baixo, encontra-se um resumo: Subscreva-se na lista de correio
fedora-docs-list,
que é o fórum principal do projecto. Crie uma chave de GNU Privacy Guard (GPG) para o identificar no projecto. Registe uma conta do Bugzilla, se não tiver já criado
alguma. O Bugzilla é o método de registar
os erros, alterações e projectos. Publique uma
auto-apresentação na lista. Depois da sua
auto-apresentação ter sido aprovada, o acesso de
CVS será cedido.
Todos os autores, e isso inclui-o a si após a recepção da
sua auto-apresentação, terão um $CVSROOT único
para aceder ao repositório do CVS: $ export CVSROOT=:ext:o-seu-utilizador@cvs.fedora.redhat.com:/cvs/docs$ export CVS_RSH=/usr/bin/sshCom as variáveis de ambiente $CVSROOT e
$CVS_RSH correctas, poderá aceder ao repositório: $ cvs co -cSerá então pedida a frase-senha da sua chave
SSH. Carregue em ENTER
para receber uma lista dos módulos já existentes no repositório. Comandos Básicos do CVScvscomandosDepois de configurar o seu sistema para funcionar com o CVS, faça
uma extracção dos módulos com que irá trabalhar. SugestãoPara ver se precisa de uma variável $CVSROOT
definida de forma correcta ou da opção da linha de comandos
repositório, veja
se tem uma sub-pasta CVS/ na sua pasta local
de trabalho. Se tiver uma pasta CVS/, o
CVS irá ignorar o $CVSROOT
ou a opção da linha de comandos. Obter os Móduloscvsobter os módulosSó precisa de extrair por completo o módulo uma vez. Depois de
ter uma cópia local do módulo no seu sistema, fica de facto por
completo no seu sistema. Para extrair um módulo, use o seguinte comando: $ cvs co<nome-módulo>Por exemplo, para extrair o módulo
example-tutorial, vá para a sua pasta
de trabalho e execute o seguinte comando: $ cvs co example-tutorialSerá criada uma pasta example-tutorial/ na
sua pasta actual. Se não for indicado um nome de ramificação ('branch') ao extrair
um módulo, assume-se como sendo o HEAD do módulo
do CVS. Extrair Ramificações dos Móduloscvsextrair os módulosextrair as ramificaçõesPense numa ramificação do CVS como
sendo uma versão dos ficheiros para uma dada versão em particular de
um manual ou pacote. Para extrair uma ramificação de um módulo, use o seguinte
comando: $ cvs co<pasta><nome-ramificação><nome-módulo>Será criada uma pasta <pasta>
e os ficheiros da ramificação
<nome-ramificação> do módulo
<nome-módulo> são copiados
para a pasta. Por exemplo, para extrair uma ramificação chamada
RAMIFICACAO-VERSAO-1.2 do módulo
meu_modulo, use o comando: $ cvs co -d meu_modulo-1.2 -r RAMIFICACAO-VERSAO-1.2 meu_moduloA ramificação RAMIFICACAO-VERSAO-1.2 do módulo é extraída
para a pasta meu_modulo-1.2 no seu sistema.
Para determinar que ramificações e marcas existem para um
dado ficheiro, use o comando: $ cvs status<ficheiro>Por exemplo, o estado do ficheiro xpto.sgml
é o seguinte:
===================================================================
File: xpto.sgml Status: Up-to-date
Working revision: 1.47
Repository revision: 1.47 /cvs/docs/custom-guide/rhl-cg-pt.sgml,v
Sticky Tag: (none)
Sticky Date: (none)
Sticky Options: (none)
Existing Tags:
RAMIFICACAO-VERSAO-1.2 (branch: 1.25.2)
Só as marcas que estejam registadas como ramificações na
segunda coluna, sob a secção
Existing Tags (Marcas Existentes)
é que poderão ser extraídas como ramificações. Actualizar os Ficheiroscvsactualizar os ficheirosPara obter as últimas versões dos ficheiros de um módulo,
mude para a pasta que contém os ficheiros do módulo e execute
o comando: cvs updateAs últimas versões de todos os ficheiros do módulo serão
transferidas para a sua cópia local. Se reparar em algum conflito
de ficheiros, consulte depois o
. Enviar os Ficheiroscvsenviar os ficheirosDepois de modificar os ficheiros na sua versão local de
um módulo, envie-os para gravar as alterações no servidor de
CVS: $ cvs commit
"uma mensagem de registo"
ficheiroSe preferir escrever a sua mensagem de registo com o seu editor
de texto favorito, como está definido pelas variáveis de ambiente
$VISUAL ou $EDITOR, basta omitir o
-m "uma mensagem de registo".
O documento já irá conter comentários a descrever a alteração;
não precisa de os remover, à medida que introduz o seu próprio
texto. A mensagem de registo deverá ser tão descritiva quanto possível,
para que você e outra pessoa qualquer que esteja a trabalhar no projecto
saiba o que mudou. Se usar uma mensagem de registo do tipo
alterei alguns ficheiros, não está a descrever
correctamente o que foi alterado e podê-lo-á não ajudar no futuro.
Se estiver a corrigir um erro, use a referência do
Bugzilla. O <ficheiro> poderá ser um nome
de ficheiro, um conjunto de nomes de ficheiros separados por espaços ou
um grupo de nomes de ficheiros indicados com caracteres especiais
(*, ?), como por exemplo *.png ou
xpto-*.sgml. Se não for indicado nenhum nome ou grupo de ficheiros no comando
commit, todas as alterações pendentes de qualquer
tipo serão enviadas para o servidor. O comando é recursivo e irá incluir
as alterações de quaisquer sub-pastas do módulo. Tenha cuidado ao usar
o comando commit sem quaisquer nomes de ficheiros,
porque poderá não recordar exactamente os ficheiros que mudaram. Se reparar num conflito de ficheiros, consulte por favor a
secção . Adicionar Ficheiroscvsadicionar ficheirosPara adicionar um ficheiro a um módulo, crie o ficheiro na sua
cópia local e execute então o seguinte comando: $ cvs addficheiro-a-adicionarDepois de adicionar o ficheiro, deverá confirmar (fazer
commit) da operação add para
o copiar para o servidor: $ cvs commit
"uma mensagem de registo
" ficheiro-a-adicionarGerir os Ficheiros Binárioscvsficheiros bináriosOs ficheiros que são armazenados com maior frequência são os
ficheiros de texto, mas às vezes também poderão ser armazenados
ficheiros binários. O programa cvs
reconhece a maioria das extensões de ficheiros, como a
.png ou a .jpg,
por isso o cvs normalmente
"faz a coisa correcta". Quando for extraída uma cópia do repositório, o
cvs verifica algumas palavras-chave
especiais, do tipo "$id:$"
e faz a substituição do texto por um valor gerado, como o número de
versão do ficheiro. A substituição desta palavra-chave normalmente corrompe os
ficheiros binários, por isso tem de ser desligada se o
cvs não reconhecer o seu ficheiro
como binário. Para marcar o seu ficheiro como binário e, deste
modo, desligar a expansão de palavras-chave, use o comando: $ cvsficheiroLembre-se que o ficheiro já deverá estar extraído do
repositório de CVS, antes de o comando
poder ser usado. Isto está OK,
dado que a expansão é feita quando o ficheiro é obtido
e copiado para a pasta local, não quando é enviado para
o repositório. Recuperar um ficheiro binárioSe extrair um ficheiro binário para o repositório e descobrir
então que este está corrompido, não entre em pânico. Basta usar o
comando descrito acima, remover a sua cópia
local e transferi-la de novo. Remover os Ficheiroscvsremover os ficheirosSe um dado ficheiro não for mais necessário no módulo, use
o comando remove para o remover da sua cópia
local e então confirme (faça um commit) da
remoção no servidor. Ainda que o ficheiro seja removido da versão
actual do módulo, é mantida uma cópia em arquivo no servidor, que
poderá ser obtida em qualquer altura com o comando
add. $ cvs rm -fficheiro-a-removerDepois de remover, terá de confirmar a remoção: $ cvs commit
"uma mensagem de registo
" ficheiro-a-removerNão poderá usar caracteres especiais (*, ?) no comando
commit, para identificar os ficheiros
removidos. Estes deverão ser indicados com um nome de ficheiro
exacto. Se precisar de mudar o nome de um ficheiro, é melhor mudar
o nome do ficheiro no servidor de CVS,
para que o histórico do ficheiro se mantenha. Se precisar de mudar
o nome de um ficheiro, envie um e-mail para o
cvsdocs-administrator@fedora.redhat.com a pedir a mudança do nome do ficheiro. Estado dos Ficheiroscvsestado dos ficheirosAlgumas vezes é necessário ver o estado
de um ficheiro num módulo do CVS. Para ver
o estado de um ficheiro, use o comando: $ cvs statusficheiroO relatório do estado de um ficheiro do repositório é o
seguinte: Actualizado ('Up-to-date')A sua versão do ficheiro é idêntica à última versão no
servidor do CVS. Modificado Localmente ('Locally Modified')Você actualizou-se para a última versão do servidor,
mas depois modificou o ficheiro no seu sistema. Adicionado Localmente ('Locally Added')Você adicionou o ficheiro com o comando
cvs add, mas ainda não confirmou
a adição do ficheiro. Removido Localmente ('Locally Removed')Você removeu o ficheiro com o comando
cvs remove mas ainda não
confirmou a remoção. Necessita de Extracção
('Needs Checkout')Existe uma versão mais recente do ficheiro no servidor
e é necessário obtê-la de novo. Ainda que o estado inclua
a palavra 'checkout', significa de facto que é necessário
actualizar os seus ficheiros com o comando
cvs update. Necessita de Actualização
('Needs Patch')A versão na sua extracção local necessita de uma
actualização com a última versão do servidor. Execute
o comando cvs update para a resolver. Necessita de Junção ('Needs Merge')Existe uma versão mais recente no servidor e a sua versão
local contém modificações ainda não enviadas. Este estado ocorre
normalmente se não tiver a última versão do ficheiro e a quiser
editar à mesma. O ficheiro tinha conflitos na junçãoÉ semelhante ao Needs Merge,
excepto quando tentou enviar o comando cvs
update, as diferenças não conseguiram ser resolvidas
automaticamente. Veja em
para mais
informações sobre a resolução de conflitos. Desconhecido ('Unknown')O servidor do CVS não sabe nada
acerca deste ficheiro. Nunca foi adicionado nem removido localmente
e nunca foi enviado para o servidor. Este estado ocorre normalmente
nos ficheiros que não deverá mandar para o
CVS, como o
indice-gerado.sgml ou nos ficheiros que
deseja adicionar ao repositório, mas que ainda não foram
adicionados com o comando cvs add. Resolver os Conflitoscvsresolver os conflitosSe modificar um ficheiro e a mesma região for modificada por
alguém e foi enviada em primeiro lugar, poderá ver uma mensagem
semelhante à seguinte ao enviar o ficheiro ou ao actualizar a sua cópia
local do módulo:
RCS file: /cvs/docs/nome-modulo/ficheiro.sgml,v
retrieving revision 1.12
retrieving revision 1.13
Merging differences between 1.12 and 1.13 into ficheiro.sgml
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in ficheiro.sgml
C ficheiro.sgml
Para resolver o conflito, abra o ficheiro, procure pelas
sequências <<<<<<<
e determine qual a versão do conteúdo que está correcta. Por exemplo:
<para>
Uma frase
<<<<<<< ficheiro.sgml
Uma frase que foi modificada na cópia local.
=======
Uma frase parecida que foi mudada de forma diferente e enviada.
>>>>>>> 1.13
</para>
O conteúdo entre o <<<<<<<e o ======= é o conteúdo da
sua cópia local. O conteúdo entre o
======= e o
>>>>>>>
é o conteúdo proveniente do servidor. Resolva o conflito, editando a sua cópia, e envie
o ficheiro.Resumocvscomandosresumo deTodos os comandos assumem que você está na pasta correcta
do módulo do CVS.
Comandos Básicos do CVSComandoDescriçãocvs checkout <nome-módulo> ou cvs co <nome-módulo>Cria uma pasta chamada
<nome-módulo> com o conteúdo do
módulo na pastacvs co -d <pasta>
-r <ramificação><nome-módulo>Cria a pasta <pasta> com
o conteúdo da ramificação
<ramificação> do módulo
<nome-módulo>cvs update ou cvs upActualiza os seus ficheiros com as últimas versões do
servidor de CVScvs add <ficheiro>
Adiciona um ficheiro "ficheiro" novo ao servidor
do CVScvs commit -m "A minha mensagem"
<ficheiro>Actualiza o ficheiro
<ficheiro> com a última
cópia do seu computadorcvs log
<ficheiro>Vê as mensagens de registo do envio do ficheiro
<ficheiro>cvs status
<ficheiro>Vê o estado do ficheiro, como algo do tipo
Locally Modified
(Modificado Localmente) cvs status -v
<ficheiro>Vê as marcas e ramificações existentes do ficheirocvs diff
<ficheiro>Mostra as diferenças entre a cópia local do ficheiro
e a última versão do ficheiro na ramificaçãocvs diff -r1.1 -r1.2
<ficheiro>Mostra as diferenças entre a versão 1.1 e a 1.2
do ficheiro
Para mais informações, veja o manual do CVS disponível no seu
sistema em /usr/share/doc/cvs-<número-versão>/cvs.ps (a versão do CVS poderá variar) e vá à página
Web do CVS, que está disponível em
http://www.cvshome.org/. SugestãoDado que o CVS está a usar o
ssh para se ligar ao servidor do
CVS, ser-lhe-á pedida a sua senha
antes de efectuar o seu pedido de CVS.
Se quiser configurar a sua máquina para que não tenha de introduzir
uma senha, veja no
Guia de Personalização do &RH; Linux 9
para mais detalhes sobre a utilização do ssh-agent.