CVS
O Concurrent Versions System (CVS)
fornece uma plataforma onde últiplos usuários podem editar os mesmos
arquivos. Imagine que se um grupo de usuários editam arquivos em um único
diretório, o caos pode reinar. Entretanto, usando o
CVS, um grupo de pessoas pode trabalhar de forma
segura no mesmo conjunto de arquivos. O CVS
mantém uma cópia mestre dos arquivos, e grava em um repositório central quem
modificou que arquivo e quando. Se conflitos surgem, o
CVS lhe diz. O CVS é
geralmente usado por programadores que compartilham códigos, mas também
funciona bem para documentação.
cvsComo o CVS Trabalhacvscomo ele trabalhacvsvisão geral
Em muitos casos, cada conjunto de arquivos que formam um pacote ou projeto
é armazenado como um módulo no servidor CVS.
Quando trabalhando com arquivos no CVS, você
pode extrair (checkout) uma cópia do módulo para o
seu sistema de arquivos local. Depois de modificar um ou mais arquivos,
você pode enviá-los (commit) de volta para o
repositório central do servidor CVS.
Com o CVS você pode editar um arquivo sem
primeiro pegar permissão ou bloqueando o arquivo. A parte concorrente
(concurrent) do arquivo no
CVS tem a habilidade de permitir muitas pessoas
diferentes a editar diferentes partes do arquivo. Contanto que nenhuma das
mudanças gerem conflito entre si, o CVS pode
corretamente gravar as mudanças. Em caso de mudanças duplicadas, elas são
marcadas nos arquivos e os autores podem resolver o problema entre eles.
Quando você aplica as mudanças, apenas mudanças em arquivos que o servidor
conhece são aplicadas. Em outras palavras, quando você cria um arquivo em
sua cópia local do módulo, o novo arquivo não é automaticamente atualizado
no servidor. Você precisa adicionar (add) o arquivo
ao repositório para depois aplicá-lo enviando (commit). Se você remover o
arquivo da sua cópia local do módulo, você precisa especificar que você
deseja removê-lo do diretório no servidor CVS e depois aplicar a remoção
do arquivo.
Os comandos especificos para executar estas ações são descritos em
.
Se alguém modificou o arquivo entre a última vez que você pegou o arquivo
do CVS e quando você tentou aplicar as mudanças, o
CVS tentará mesclar as mudanças na cópia mestre
do servidor CVS. Se o conteúdo que você
modificou está em uma localização diferente no arquivo do que as mudanças
que outra pessoa modificou, as chances são de que a ação de aplicar terá
sucesso sem nenhum conflict. Se alguém modificou o
mesmo conteúdo que você e tentar aplicar, você verá uma mensagem de que um
conflito no arquivo ocorreu. Por isso, você precisa atualizar
(update) seus arquivos freqüentemente. É uma boa
prática atualizá-los logo antes de começar a modificar um arquivo. Veja na
para instruções em
como resolver conflitos.
Preparando-se Para Usar o CVScvspreparando-se para usar
Antes de usar o CVS, você precisa estabelecer
uma conta no servidor CVS. Depois de conseguir
uma conta, você não precisa fazer estes passos novamente.
O CVS Está Instalado em Seu Sistema?cvsinstalação por RPM
Você deve ter o pacote RPM do
CVS instalado. Verifique a sua presença
digitando o comando:
$ rpm -q cvs
Se você ver uma saída parecida com
cvs-1.11.19-1, então o pacote está
instalado. Uma mensagem parecida com package cvs is not
installed quer dizer que você precisa instalar o pacote
cvs antes de continuar. Se você não sabe como
fazer isso, consulte o seu administrador de sistemas que possa
instalá-lo para você.
Gerando as Chaves SSHOpenSSHchaves de autorização
O servidor CVS usa chaves do Protocolo 2 do
SSH para autenticar usuários. Por isso você
precisará gerar um par de chaves antes de conseguir uma conta no
CVS. Se você já tem uma chave
DSA do SSH, pode pular este
passo.
Dica
Você já tem uma chave DSA caso você tenha o arquivo
~/.ssh/id_dsa.pub em seu sistema.
Se sua chave DSA existente não precisa de uma
frase-senha (passphrase), é altamente
recomendado que você gere outra que precisa de uma frase-senha.
Use os seguintes passos para gerar uma chave DSA usada
pelo Protocolo 2 do SSH. Ela é necessária
para uma conta CVS no servidor
cvs.fedora.redhat.com.
OpenSSHssh-keygenssh-keygen
Para gerar uma chave DSA que trabalhe com a
versão 2.0 do protoclo, digite na linha de comando:
$ ssh-keygen -t dsa
Aceite a localização de arquivo padrão no
~/.ssh/id_dsa. É altamente recomendado que você
defina e use uma frase-senha (passphrase)
para melhorar a segurança da sua chave. Entre com uma frase-senha
diferente da sua senha de conta e confirme digitando-a novamente.
Copie a sua nova chave para o arquivo correto digitando o seguinte
na linha de comando.
$ cat ~/.ssh/id_dsa.pub>>~/.ssh/authorized_keys
Verifique este comando com cuidado antes de pressionar a tecla
ENTER. Se o arquivo
~/.ssh/authorized_keys já existir, o conteúdo
do ~/.ssh/id_dsa.pub irá ser adicionado ao
fim do arquivo ~/.ssh/authorized_keys.
Mude as permissões do seu diretório ~/.ssh e de
suas chaves com os comandos:
$ chmod 755 ~/.ssh$ chmod 644 ~/.ssh/authorized_keysDica
Você pode fazer com que o seu sistema lembre-se de sua frase-senha
para que você não tenha que digitar toda vez que acessar o servidor
CVS. Veja a documentação do programa
ssh-add.
Configurando Para Um Acesso CVScvsconfigurando para acessocvsCVSROOTcvsCVS_RSHCVSROOTCVS_RSHcvs.cvsrc.cvsrcEvitando Digitações Repetitivascvsevitando digitações repetitivas
Muitos comandos CVS precisam de certos
parâmetros de linha de comando para operar consistentemente. Ao invés de
digitá-los toda vez que o comando é usado, você pode salvar estes
parâmetros em um arquivo que o CVS irá ler
antes de executar a sua linha de comando.
Crie um arquivo chamado ~/.cvsrc no seu diretório
home. Ele deve conter os seguintes comandos, um por linha:
cvs -z3
diff -uNp
rdiff -uNp
update -dPConfigurando para Acesso CVS Somente-Leituracvsconfigurando acesso somente-leituracvsacesso anônimo
Se o seu objetivo é efetuar download das várias documentações do &FC; e
renderizar em seu sistema, você precisará apenas de acesso
somente-leitura no repositório CVS. Siga as
instruções desta seção e então pule diretamente para a .
Mude o diretório para onde você quer que seus arquivos do
CVS estejam localizados, e então execute os
seguintes comandos:
$ export CVSROOT=:pserver:cvs.fedora.redhat.com:/cvs/docs$ cvs login$ cvs checkout docs-commonmodule-name$ cvs checkoutmodule-name$ cdmodule-name
Uma vez que você tenha obtido o módulo, não importa o que estiver em sua
variável CVSROOT porque o dado é armazenado no arquivo
CVS/Root em cada diretório do seu repositório
local. Enquanto o seu diretório de trabalho atual tiver um diretório
CVS/, o programa CVS irá
localizar automaticamente o repositório &FC;.
Configurando Acesso CVS Leitura/Escritacvsconfigurando acesso leitura/escritacvsconfigurando acesso para autores
Para criar um novo documento ou modificar um já existente, você precisa
obter acesso leitura/escrita completo ao repositório CVS de
Documentação &FC;. Para detalhes completos sobre este processo, veja no
site http://fedoraproject.org/wiki/DocsProject/NewWriters.
Abaixo está um pequeno resumo:
Inscreva-se na fedora-docs-list, que é a lista principal do projeto.
Gere uma chave GNU Privacy Guard (GPG) para você se
identificar no projeto.
Registre uma conta no Bugzilla, se você já não tem uma. O Bugzilla é
o método que usamos para acompanhar bugs, mudanças e projetos.
Envie uma apresentação
de si na lista.
Depois que sua apresentação
de si for aprovada, seu acesso CVS
será garantido.
Todo autor, e isso inclui você depois da sua apresentação, recebe uma
variável $CVSROOT única para acessar o repositório
CVS:
$ export CVSROOT=:ext:seunome@cvs.fedora.redhat.com:/cvs/docs$ export CVS_RSH=/usr/bin/ssh
Com as variáveis de ambiente
$CVSROOT
e
$CVS_RSH
funcionando, você pode acessar o repositório:
$ cvs co -c
Você terá que digitar sua frase-senha para a sua chave
SSH. Pressione
ENTER
e você deverá receber uma lista de módulos que já estão no repositório.
Comandos Básicos de CVScvscomandos
Depois de configurar seu sistema para trabalhar com CVS, extraia os
módulos que você irá trabalhar.
Dica
Para ver se você precisa de uma variável
$CVSROOT
configurada corretamente, ou um parâmetro
repositório, veja se você tem um subdiretório
chamado CVS/ no diretório atual.
Se você tem um diretório CVS/, o
CVS ignora totalmente a variável
$CVSROOT ou o parâmetro .
Extraindo Móduloscvsextraindo módulos
Você só precisar extrair um módulo uma vez. Depois que uma cópia local
do módulo estiver em seu sistema, ela estará em seu sistema.
Para extrair um módulo, use o seguinte comando:
$ cvs co<nome-do-modulo>
Por exemplo, para extrair o módulo
example-tutorial, mude o seu atual
diretório, e execute o seguinte comando:
$ cvs co example-tutorial
Um diretório chamado example-tutorial/ é criado
dentro do diretório atual.
Se um nome de árvore não é especificado ao extrair um módulo, ele é
referenciado com a árvore HEAD do módulo
CVS.
Extraindo Árvores de Móduloscvsextrair módulosextraindo árvores
Pense na árvore CVS como uma versão dos
arquivos para uma versão particular de um manual ou pacote.
Para extrair uma árvore de um módulo, use o seguinte comando:
$ cvs co<diretório><nome-da-árvore><nome-do-módulo>
Um diretório chamado <diretório> é
criado, e os arquivos da árvore
<nome-da-árvore> do módulo
<nome-do-módulo> são copiados para
este diretório.
Por exemplo, para extrair uma árvore chamada BRANCH-VERSION-1.2
do módulo mymodule, use o comando:
$ cvs co -d mymodule-1.2 -r BRANCH-VERSION-1.2 mymodule
A árvore BRANCH-VERSION-1.2 do módulo é extraída para o diretório
mymodule-1.2 em seu sistema.
Para determinar que árvores e tags existem para um arquivo, use o
comando:
$ cvs status<nomedoarquivo>
Por exemplo, o status do arquivo foo.sgml é o
seguinte:
===================================================================
File: foo.sgml Status: Up-to-date
Working revision: 1.47
Repository revision: 1.47 /cvs/docs/custom-guide/rhl-cg-en_US.sgml,v
Sticky Tag: (none)
Sticky Date: (none)
Sticky Options: (none)
Existing Tags:
BRANCH-VERSION-1.2 (branch: 1.25.2)
Apenas as tags marcadas como árvores na segunda coluna da seção
Existing Tags (Tags Existentes) podem
ser extraídas como uma árvore.
Atualizando Arquivoscvsatualizando arquivos
Para obter as últimas versões dos arquivos de um módulo, mude para o
diretório que contém os arquivos para o módulo e execute o comando:
cvs update
Será efetuado o download das últimas versões de todos os arquivos no
módulo e colocado em sua cópia local. Se você notar algum conflito de
arquivo, veja a .
Enviando Arquivoscvsenviando arquivos
Depois de modificar os arquivos em sua versão local do módulo, envie-os
(commit) para salvar as mudanças no servidor
CVS:
$ cvs commit "mensagem de log" nomedoarquivo
Se você prefere escrever as mensagens de log com seu editor de textos
preferidos, como definido nas variáveis de mabiente $VISUAL ou
$EDITOR, apenas omita o parâmetro -m "mensagem
de log". O documento já terá comentários descrevendo
a mudança; você não precisa removê-los quando for escrever seu
próprio texto.
A mensagem de log deve ser o quanto mais descritiva possível para que
você e qualquer outra pessoa trabalhando no módulo entenda o que foi
mudado. Usar uma mensagem de log como por exemplo atualizado
alguns arquivos não descreve necessariamente o que foi
mudado e não irá ajudá-lo no futuro. Se você está corrigindo um bug, use
a referência do Bugzilla.
O <nomedoarquivo> pode ser um arquivo,
uma série de arquivos separados por espaço, ou um grupo de arquivos
especificados com wildcards (coringas) como por exemplo
*.png ou foo-*.sgml.
Se nehum arquivo ou grupo de arquivos é especificado no comando
commit, todas as mudanças de todos os tipos serão
enviadas ao servidor. O comando é recursivo e incluirá também mudanças
em subdiretórios do módulo. Tenha cuidado quando usar o comando
commit sem especificar arquivos porque você pode não
lembrar exatamente que arquivos foram modificados.
Se você notar algum conflito de arquivo, veja a .
Adicionando Arquivoscvsadicionando arquivos
Para adicionar um arquivo a um módulo, crie o arquivo em sua cópia local
e execute o seguinte comando:
$ cvs addarquivo-a-adicionar
Depois de adicionar o arquivo, você precisará aplicar
(commit) o comando add para copiar
o arquivo para o servidor:
$ cvs commit "mensagem de log" arquivo-a-adicionarLidando com Arquivos Binárioscvsarquivos binários
A maioria dos arquivos mais comuns são arquivos de texto simples, mas
algumas vezes arquivos binários também são arquivados. O programa
cvs reconhece as extensões de arquivos mais
comuns como por exemplo .png ou
.jpg, então o cvs
geralmente "faz a coisa certa".
Quando uma cópia de arquivo é extraída do repositório, o
cvsprocura palavras-chave especiais nele como
por exemplo "$id:$" e
substitui a linha por um valor gerado, como o número de versão do
arquivo.
Esta substituição de palavras-chave geralmente corrompe arquivos
binários, então ela deve ser desligada se o
cvs não reconhece seu arquivo como binário.
Para marcar seu arquivo como binário, deixando a substituição de
palavras-chave desligada, use o comando:
$ cvsarquivo
Note que o arquivo deve estar contido no repositório
CVS antes do comando ser usado.
Isto é certo porque a substituição de palavra-chave é feia quando o
arquivo é extraído para o repositório local, e não quando o arquivo é
aplicado ao repositório.
Recuperando um arquivo binário
Se você colocar um arquivo binário no repositório e perceber que ele
está corrompido quando extraído, não entre em pânico. Simplesmente use
o comando como descrito acima, remova sua cópia
local de arquivo, e extraia-o de novo.
Removendo Arquivoscvsremovendo arquivos
Se um arquivo não é mais preciso em um módulo, use o comando
remove para removê-lo de sua cópia local e então
aplique commit a remoção no servidor. Meso que o
arquivo seja removido da versão atual do módulo, uma cópia arquivada
ainda é guardada no servidor para que possa ser recolocada a qualquer
momento com o comando add.
$ cvs rm -farquivo-a-remover
Depois de remover o arquivo, você precisa aplicar
(commit) a remoção:
$ cvs commit "mensagem de log" arquivo-a-remover
Você pode usar wildcards (coringas) no comando commit
para identificar os arquivos removidos. Eles devem ser especificados
com um nome de arquivo exato.
Se você precisa renomear um arquivo, é melhor você renomear o arquivo no
servidor CVS para que o histórico de versões
do arquivo seja preservado. Quando precisar renomear um arquivo, envie
um e-mail para
cvsdocs-administrator@fedora.redhat.com pedindo para o arquivo ser renomeado.
Estado dos Arquivoscvsestado dos arquivos
As vezes é necessário visualizar o estado de um
arquivo em um módulo CVS. Para ver o estado
de um arquivo, use o comando:
$ cvs statusarquivo
O estado de um arquivo de repositório pode ser:
Up-to-date (Atualizado)
Sua revisão do arquivo é idêntica a última versão do servidor
CVS.
Locally Modified (Localmente Modificada)
Você atualizou a última revisão do servidor, mas você modificou o
arquivo em seu sistema.
Locally Added (Adicionado Localmente)
Você adicionou o arquivo com o comando cvs add
mas não aplicou (commit) a adição do arquivo.
Locally Removed (Removido Localmente)
Você removeu o arquivo com o comando cvs remove
mas ainda não aplicou (commit) a remoção.
Needs Checkout (Precisa de Extração)
Uma novaversão do arquivo está no servidor e precisa ser obtida.
Apesar do estado incluir a palavra extrair, ele na verdade
significa que você precisa atualizar seus arquivos com o comando
cvs update.
Needs Patch (Precisa de Patch)
A revisão do seu repositório local precisa de um patch para a
última revisão do servidor. Use o comando cvs
update para resolver.
Needs Merge (Precisa de Mesclagem)
Uma nova revisão existe no servidor e sua versão local contém
modificações que ainda não foram aplicadas. Este estado geralmente
aparece quando você não tem a última revisão do arquivo e mesmo
assim o edita.
File had conflicts on merge (Há conflitos no Arquivo durante a Mesclagem)
Parecido com o Needs Merge,
exceto pelo fato de que você tentou usar o comando cvs
update. A diferença não pôde ter sido resolvida
automaticamente. Veja a para mais
informações em como resolver conflitos.
Unknown (Desconhecido)
O servidor CVS não sabe de nada sobre
este arquivo. Ele pode não ter sido adicionado ou removido
localmente e nunca pôde ter sido aplicado ao servidor. Este estado
geralmente ocorre para arquivos que você não deve aplicar (commit)
ao CVS como por exemplo um
generated-index.sgml ou arquivos que você
pode querer adicionar ao repositório mas não usou o comando
cvs add.
Resolvendo Conflitoscvsresolvendo conflitos
Se você modifica um arquivo em uma mesma região que foi modificada e
aplicada por outra pessoa primeiro, você provavelmente irá ver uma
mensagem parecido com a abaixo quando aplicar o arquivo ou atualizar a
sua cópia local do módulo:
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
Para resolver o conflito, abra o arquivo, procure por
<<<<<<<
e determine que versão do conteúdo é correta. Por exemplo:
<para>
Uma sentença.
<<<<<<< filename.sgml
A sentença que foi mudada na cópia em trabalho.
=======
A mesma sentença que foi mudada diferentemente e aplicada.
>>>>>>> 1.13
</para>
O conteúdo entre
<<<<<<<,
e ======= é o conteúdo da sua cópia
local. O conteúdo entre o ======= e
>>>>>>> é o
conteúdo do servidor.
Resolva o conflito editando a sua cópia, e aplicando (commit) o arquivo.
Sumáriocvscomandossumário dos
Todos os comandos assumem que você esteja no diretório apropriado do
módulo CVS.
Comandos Básicos de CVSComandoDescriçãocvs checkout
<nome-do-módulo>
ou cvs co <nome-do-módulo>Cria um diretório chamado
<nome-do-módulo> com o conteúdo do módulo no
diretóriocvs co -d
<diretório> -r <nome-da-árvore><nome-do-módulo>Cria o diretório <diretório>
com o conteúdo da árvore <nome-da-árvore>
do módulo <nome-do-módulo> módulo.cvs update ou cvs upAtualiza seus arquivos com os últimos arquivos do servidor
CVS.cvs add <arquivo>Adiciona o novo arquivo "arquivo" ao servidor CVScvs commit -m "Minha mensagem"
<arquivo>Atualiza o arquivo
<arquivo> com a última cópia de
seu computadorcvs log <arquivo>Visualiza as mensagens de commit do arquivo <arquivo>cvs status <arquivo>Visualiza o estado do arquivo, como por exemplo
Localmente Modificadocvs status -v <arquivo>Visualiza as tags e árvores existentes para o arquivocvs diff <arquivo>Mostra a diferença entre sua cópia local do arquivo e a
última versão do arquivo na árvorecvs diff -r1.1 -r1.2 <arquivo>Mostra a diferença do arquivo da versão 1.1 para a 1.2
Para mais informações, leia o manual CVS disponível em seu sistema em
/usr/share/doc/cvs-<número-de-versão>/cvs.ps
(a versão do CVS pode variar) e visite a página do CVS disponível em
http://www.cvshome.org/.
Dica
Como o CVS está usando o
ssh para conectar-se ao servidor
CVS, você será perguntando por uma senha
antes de executar a instrução CVS. Se você
quiser configurar o seu sistema para que você não tenha que digitar a
senha, veja a página
&RH;
Linux 9 Customization Guide para detalhes em como
usar o ssh-agent.