]> CVS O 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. cvs
Como Funciona o CVS cvs como funciona cvs introduçã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 CVS cvs preparar a utilização Antes 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 Sistema cvs Instalação do RPM Deverá ter o pacote RPM do CVS instalado. Verifique a sua presença com o comando: $ rpm -q cvs Se 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 SSH OpenSSH chaves de autorização O 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ão Já 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.fedoraproject.org. OpenSSH ssh-keygen ssh-keygen Para gerar uma chave DSA que funcione com a versão do protocolo 2.0, numa consola, escreva o comando: $ ssh-keygen -t dsa Aceite 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_keys Verifique 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 700 ~/.ssh $ chmod 644 ~/.ssh/authorized_keys Sugestão Poderá 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 CVS cvs configurar o acesso cvs CVSROOT cvs CVS_RSH CVSROOT CVS_RSH cvs .cvsrc .cvsrc
Evitar a Escrita Repetitiva cvs evitar a escrita repetitiva Muitos 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 -dP
Configurar o Acesso Apenas para Leitura ao CVS cvs configurar o acesso apenas para leitura cvs acesso anónimo Se 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:anonymous@cvs.fedoraproject.org:/cvs/docs $ cvs login $ cvs checkout docs-common nome-módulo $ cvs checkout nome-módulo $ cd nome-módulo Logo 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 CVS cvs configurar o acesso de leitura/escrita cvs configurar o acesso para os autores Para 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.fedoraproject.org:/cvs/docs$ export CVS_RSH=/usr/bin/ssh Com as variáveis de ambiente $CVSROOT e $CVS_RSH correctas, poderá aceder ao repositório: $ cvs co -c Será 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 CVS cvs comandos Depois de configurar o seu sistema para funcionar com o CVS, faça uma extracção dos módulos com que irá trabalhar. Sugestão Para 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ódulos cvs obter os módulos Só 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-tutorial Será 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ódulos cvs extrair os módulos extrair as ramificações Pense 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_modulo A 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 Ficheiros cvs actualizar os ficheiros Para 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 update As ú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 Ficheiros cvs enviar os ficheiros Depois 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" ficheiro Se 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 Ficheiros cvs adicionar ficheiros Para adicionar um ficheiro a um módulo, crie o ficheiro na sua cópia local e execute então o seguinte comando: $ cvs add ficheiro-a-adicionar Depois 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-adicionar
Gerir os Ficheiros Binários cvs ficheiros binários Os 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: $ cvs ficheiro Lembre-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ário Se 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 Ficheiros cvs remover os ficheiros Se 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 -f ficheiro-a-remover Depois de remover, terá de confirmar a remoção: $ cvs commit "uma mensagem de registo " ficheiro-a-remover Nã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@fedoraproject.org a pedir a mudança do nome do ficheiro.
Estado dos Ficheiros cvs estado dos ficheiros Algumas 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 status ficheiro O 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 Conflitos cvs resolver os conflitos Se 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.
Resumo cvs comandos resumo de Todos os comandos assumem que você está na pasta correcta do módulo do CVS. Comandos Básicos do CVS Comando Descrição cvs 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 pasta cvs 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 up Actualiza os seus ficheiros com as últimas versões do servidor de CVS cvs add <ficheiro> Adiciona um ficheiro "ficheiro" novo ao servidor do CVS cvs commit -m "A minha mensagem" <ficheiro> Actualiza o ficheiro <ficheiro> com a última cópia do seu computador cvs 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 ficheiro cvs diff <ficheiro> Mostra as diferenças entre a cópia local do ficheiro e a última versão do ficheiro na ramificação cvs 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ão Dado 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.