[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ próximo ]


Referência Debian
Capítulo 12 - Sistemas de Controle de Versão


12.1 Concurrent Versions System (CVS) (Sistema de Versões Concorrentes)

Confira /usr/share/doc/cvs/html-cvsclient, /usr/share/doc/cvs/html-info, /usr/share/doc/cvsbook com lynx ou rode info cvs e man cvs para informações detalhadas.


12.1.1 Instalando um servidor CVS

A configuração a seguir permitirá que apenas membros do grupo "src" submetam ao repositório CVS e apenas membros do grupo "staff" administrem o cvs, com isto reduzindo a probabilidade de que alguém atire no próprio pé.

     # cd /var/lib; umask 002 ; sudo mkdir cvs # [Woody] FSH
     # apt-get install cvs cvs-doc cvsbook
     # export CVSROOT=/var/lib/cvs
     # cd $CVSROOT
     # chown root:src .  # "staff" para maior restrição a projetos novos.
     # chmod 3775 .             # Se usou "staff" acima, use 2775 aqui.
     # cvs -d /var/lib/cvs init # é mais seguro especificar -d explicitamente aqui!
     # cd CVSROOT
     # chown -R root:staff .
     # chmod 2775 .
     # touch val-tags 
     # chmod 664 history val-tags
     # chown root:src history val-tags

12.1.2 Exemplos de sessão CVS

O que se segue configurará um ambiente shell para acesso ao repositório CVS.


12.1.2.1 CVS Anônimo (apenas para baixar)

Acesso remoto somente-leitura:

     $ export CVSROOT=:pserver:anonymous@cvs.sf.net:/cvsroot/qref
     $ cvs login
     $ cvs -z3 co qref

12.1.2.2 Uso de servidor CVS local

Acesso local a partir de uma shell na mesma máquina:

     $ export CVSROOT=/var/lib/cvs

12.1.2.3 Uso de servidor CVS remoto pserver

Acesso remoto sem SSH (uso da implementação do protocolo RSH no cvs):

     $ export CVSROOT=:pserver:account@cvs.foobar.com:/var/lib/cvs
     $ cvs login

Este uso é vulnerável a uma tocaia (eavesdropping attack).


12.1.2.4 Uso do CVS remoto via ssh

Acesso remoto com SSH:

     $ export CVSROOT=:ext:account@cvs.foobar.com:/var/lib/cvs

ou para o SourceForge:

     $ export CVSROOT=:ext:account@cvs.sf.net:/cvsroot/qref

Você pode usar autenticação RSA (Conectando com menos senhas – RSA, Seção 9.5.3) também. Isto elimina a espera pela senha (prompt password).


12.1.2.5 Criar um arquivo CVS novo

Para,

     ITEM              VALOR                    SIGNIFICADO
     source tree:      ~/project-x              Todos os códigos-fonte
     Project name:     project-x                Nome do projeto
     Vendor Tag:       Main-branch              marcador para toda a ramificação
     Release Tag:      Release-initial          marcador para um lançamento específico

Então,

     $ cd ~/projeto-x                 # acesse o diretório fonte
      ... crie a árvore dos fontes ...
     $ cvs import -m "Início projeto-x" projeto-x Main-branch Release-initial
     $ cd ..; rm -R ~/projeto-x

12.1.2.6 Trabalhar com CVS

Trabalhar com projeto-x usando o repositório CVS local:

     $ cd                            # acesse a área de trabalho
     $ cvs co projeto-x              # pegue os fontes do CVS para local
     $ cd projeto-x
      ... faça mudanças no conteúdo ...
     $ cvs diff -u                   # similar ao diff -u repository/ local/
     $ cvs up -C arquivo_modificado       # desfaz mudanças em um arquivo
     $ cvs ci -m "Descreva modificação"   # salve os fontes locais para o CVS
     $ vi arquivonovo_adicionado
     $ cvs add arquivonovo_adicionado
     $ cvs ci -m "Adicionado arquivonovo_adicionado"
     $ cvs up                        # mescle a última versão a partir do CVS
      ... para criar todos os subdiretórios recém criados do CVS, use 
      ... ao invés "cvs up -d -P"
      ... atente para linhas que iniciam com "C nomearquivo"
      ... código não alterado é movido para `.#nomearquivo.versão'
      ... procure "<<<<<<<" e ">>>>>>>" em nomearquivo
     $ cvs tag Release-1             # adicione marcador de lançamento
      ... edite mais ...
     $ cvs tag -d Release-1          # remova marcador de lançamento
     $ cvs ci -m "mais comentários"
     $ cvs tag Release-1             # readicione marcador de lançamento
     $ cd                            # volte à área de trabalho
     $ cvs co -r Release-inicial -d antigo projeto-x
      ... mova a versão original para diretório antigo
     $ cd antigo
     $ cvs tag -b Release-initial-bugfixes # crie marcador de ramificação (-b)
      ... agora você pode trabalhar na versão antiga (Tag=sticky)
     $ cvs update -d -P                         # não cria diretórios vazios
      ... a árvore dos fontes agora tem o marcador de fixação (sticky tag) "Release-initial-bugfixes"
      ... trabalhe nesta ramificação
     $ cvs up -d -P # sincronize com arquivos modificados por outros nesta ramificação
     $ cvs ci -m "check nesta ramificação"
     $ cvs update -kk -A -d -P
      ... remova o marcador de fixação e esqueça do conteúdo
      ... atualize a partir do tronco principal sem expansão de palavra-chave
     $ cvs update -kk -d -P -j Release-initial-bugfixes
      ... Mescle a ramificação Release-initial-bugfixes com o tronco
      ... principal sem expansão de palavra-chave. Corrija conflitos com o editor
     $ cvs ci -m "mesclando Release-initial-bugfixes"
     $ cd
     $ tar -cvzf antigo-projeto-x.tar.gz antigo  # arquive, -j para bz2
     $ cvs release -d antigo           # remova fonte local (opcional)

Opções legais que convém lembrar (use-a(s) como primeiro(s) argumento(s) para cvs):

     -n      simula as ações, sem executá-las realmente
     -t      exibe mensagens que mostram os passos da atividade do CVS

12.1.2.7 Exportar arquivos a partir do CVS

Para obter a última versão do CVS, use "tomorrow":

     $ cvs ex -D tomorrow nome_módulo

12.1.2.8 Administrar o CVS

Adicione apelidos a um projeto (servidor local):

     $ su - admin           # um membro do staff
     $ export CVSROOT=/var/lib/cvs
     $ cvs co CVSROOT/modules
     $ cd CVSROOT
     $ echo "px -a projeto-x" >>modules
     $ cvs ci -m "Agora px é um apelido para projeto-x"
     $ cvs release -d .
     $ exit                 # ou Ctrl-D para voltar a partir de su
     $ cvs co -d projeto px 
      ... baixa projeto-x (alias:px) a partir do CVS 
      ... para o diretório do projeto
     $ cd projeto
      ... faça mudanças no conteúdo ...

12.1.3 Resolvendo problemas do CVS


12.1.3.1 Permissões de arquivo no repositório

CVS não sobrescreverá o atual arquivo do repositório, antes o substituirá por outro. Assim, permissão de escrita no diretório do repositório é algo crítico. Para cada novo repositório criado, se necessário rode os seguintes comandos para ter certeza desta condição.

     # cd /var/lib/cvs
     # chown -R root:src repository
     # chmod -R ug+rwX   repository
     # chmod    2775     repository  # se necessário, também o subdiretório

12.1.3.2 Bit de execução

O bit de execução de um arquivo é mantido quando baixado. Sempre que encontrar problemas com permissão de execução em arquivos baixados, mude as permissões do arquivo no repositório CVS com o seguinte comando.

     # chmod ugo-x nomedoarquivo

12.1.4 Comandos CVS

Aqui estão os comandos CVS com suas abreviações

     {add|ad|new} [-k kflag] [-m 'mensagem'] arquivos...
     {admin|adm|rcs} [opções-rcs] arquivos...
     {annotate|ann} [opções] [arquivos...]
     {checkout|co|get} [opções] módulos...
     {commit|ci|com}   [-lnR]  [-m  'mensagem_log'  |  -f  arquivo] \
             [-r revisão] [arquivos...]
     {diff|di|dif} [-kl] [opções_rcsdiff] [[-r rev1 | -D data1] \
             [-r rev2 |  -D data2]] [arquivos...]
     {export|ex|exp} [-flNn] -r rev|-D data [-d dir] [-k kflag] módulo...
     {history|hi|his} [-report] [-flags] [-options args] [arquivos...]
     {import|im|imp} [-options] repositório vendortag releasetag...
     {login|logon|lgn}
     {log|lo|rlog} [-l] opções-rlog [arquivos...]
     {rdiff|patch|pa} [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] módulos...
     {release|re|rel} [-d] diretórios...
     {remove|rm|delete} [-lR] [arquivos...]
     {rtag|rt|rfreeze} [-falnR]  [-b]  [-d]  [-r  marcador  |  -D  data] \
              marcador_simbólico módulos...
     {status|st|stat} [-lR] [-v] [arquivos...]
     {tag|ta|freeze} [-lR] [-F] [-b] [-d] [-r marcador | -D data]  [-f] \
              marcador_simbólico [arquivos...]
     {update|up|upd} [-AdflPpR] [-d] [-r marcador|-D data] arquivos...

12.2 Subversion

Subversion é a próxima geração em sistemas de controle de versão. E pretende-se que substitua o CVS. Os desenvolvedores o consideram atualmente em estágio "alpha", embora provavelmente seja estável para muitos usos. Quando este texto foi escrito, Subversion estava disponível na Debian unstable apenas.


12.2.1 Instalando um servidor Subversion

O meta-pacote subversion-server depende dos pacotes libapache2-dav-svn e subversion-tools) para configurar um servidor.


12.2.1.1 Configurando um repositório

Atualmente, o pacote subversion não configura automaticamente um repositório. Isto deve ser feito manualmente. Uma localização possível para o repositório é em /var/local/repos.

Crie o diretório:

     # mkdir -p /var/local/repos

Crie o banco de dados do repositório:

     # svnadmin create /var/local/repos

Torne o repositório passível de escrita pelo servidor WWW:

     # chown -R www-data:www-data /var/local/repos

12.2.1.2 Configurando Apache2

Para permitir acesso ao repositório via autenticação de usuário, adicione (ou descomente) o seguinte a /etc/apache2/mods-available/dav_svn.conf:

     <Location /repos>
       DAV svn
       SVNPath /var/local/repos
       AuthType Basic
       AuthName "Subversion repository"
       AuthUserFile /etc/subversion/passwd
       <LimitExcept GET PROPFIND OPTIONS REPORT>
         Require valid-user
       </LimitExcept>
     </Location>

Então, crie o arquivo de autenticação do usuário com o comando:

     htpasswd2 -c /etc/subversion/passwd algum-nome-de-usuario

Reinicie Apache2, e seu novo repositório Subversion será acessível através da URL http://hostname/repos.


12.2.2 Movendo um repositório CVS para Subversion


12.2.3 Exemplos de uso do Subversion

As seções seguintes ensinam como usar diferentes comandos em Subversion.


12.2.3.1 Criar um novo repositório Subversion

Para criar um novo repositório Subversion, digite o seguinte:

     $ cd ~/seu-projeto          # vá para seu diretório fonte
     $ svn import http://localhost/repos seu-projeto \
       nome-do-projeto -m "importação inicial do projeto"

Isso cria um diretório chamado nome-do-projeto em seu repositório Subversion que contém os arquivos de seu projeto. Olhe em http://localhost/repos e veja se estão lá.


12.2.3.2 Trabalhando com Subversion

Trabalhando com projeto-y usando Subversion:

     $ cd                              # vá para a área de trabalho
     $ svn co http://localhost/repos/projeto-y  # Importe os fontes
     $ cd projeto-y
      ... faça alguma coisa ...
     $ svn diff                        # similar a diff -u repositório/ local/
     $ svn revert arquivo_modificado   # desfaz mudanças em um arquivo   
     $ svn ci -m "Descreva alterações" # exporte suas alterações ao repositório
     $ vi arquivonovo_adicionado
     $ svn add arquivonovo_adicionado
     $ svn add novo_dir                # adiciona recursivamente todos arquivos em novo_dir
     $ svn add -N novo_dir2            # adiciona o diretório não recursivamente
     $ svn ci -m "Adicionado arquivonovo_adicionado, novo_dir, novo_dir2
     $ svn up                          # mescla com última versão do repositório
     $ svn log                         # exibe todas as mudanças enviadas
     $ svn copy http://localhost/repos/projeto-y \
           http://localhost/repos/projeto-y-ramo \
           -m "criando nova ramificação do projeto-y" # ramificando projeto-y
     $ svn copy http://localhost/repos/projeto-y \
           http://localhost/repos/proj-y_versão1.0 \
           -m "projeto-y versão 1.0"   # adicionado marcador de lançamento
      ... note que a ramificação e marcação são os mesmos. A única diferença
      ... é que ramos (branches) são enviados (committed) enquanto
      ... marcadores (tags) não são.
     
      ... faça modificações no ramo ...
     
     $ # mesclar cópia ramificada de volta na cópia principal
     $ svn merge http://localhost/repos/projeto-y \
        http://localhost/repos/projeto-y-ramo
     $ svn co -r 4 http://localhost/repos/projeto-y # importa revisão 4

[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ próximo ]


Referência Debian

CVS, Qui Jan 18 11:53:12 UTC 2007

Osamu Aoki osamu#at#debian.org
Paulo Rogério Ormenese (líder: pt-br) pormenese#at#uol.com.br
Autores, Seção A.1