]> 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. cvs
Como o CVS Trabalha cvs como ele trabalha cvs visã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 CVS cvs preparando-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? cvs instalaçã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 SSH OpenSSH chaves 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.fedoraproject.org. OpenSSH ssh-keygen ssh-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 700 ~/.ssh $ chmod 644 ~/.ssh/authorized_keys Dica 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 CVS cvs configurando para acesso cvs CVSROOT cvs CVS_RSH CVSROOT CVS_RSH cvs .cvsrc .cvsrc
Evitando Digitações Repetitivas cvs evitando 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 -dP
Configurando para Acesso CVS Somente-Leitura cvs configurando acesso somente-leitura cvs acesso 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:anonymous@cvs.fedoraproject.org:/cvs/docs $ cvs login $ cvs checkout docs-common module-name $ cvs checkout module-name $ cd module-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/Escrita cvs configurando acesso leitura/escrita cvs configurando 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.fedoraproject.org:/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 CVS cvs comandos 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ódulos cvs extraindo 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ódulos cvs extrair módulos extraindo á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 Arquivos cvs atualizando 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 Arquivos cvs enviando 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 Arquivos cvs adicionando arquivos Para adicionar um arquivo a um módulo, crie o arquivo em sua cópia local e execute o seguinte comando: $ cvs add arquivo-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-adicionar
Lidando com Arquivos Binários cvs arquivos 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: $ cvs arquivo 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 Arquivos cvs removendo 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 -f arquivo-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@fedoraproject.org pedindo para o arquivo ser renomeado.
Estado dos Arquivos cvs estado 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 status arquivo 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 Conflitos cvs resolvendo 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ário cvs comandos sumário dos Todos os comandos assumem que você esteja no diretório apropriado do módulo CVS. Comandos Básicos de CVS Comando Descrição cvs 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ório cvs 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 up Atualiza seus arquivos com os últimos arquivos do servidor CVS. cvs add <arquivo> Adiciona o novo arquivo "arquivo" ao servidor CVS cvs commit -m "Minha mensagem" <arquivo> Atualiza o arquivo <arquivo> com a última cópia de seu computador cvs log <arquivo> Visualiza as mensagens de commit do arquivo <arquivo> cvs status <arquivo> Visualiza o estado do arquivo, como por exemplo Localmente Modificado cvs status -v <arquivo> Visualiza as tags e árvores existentes para o arquivo cvs diff <arquivo> Mostra a diferença entre sua cópia local do arquivo e a última versão do arquivo na árvore cvs 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.