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.
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
O que se segue configurará um ambiente shell para acesso ao repositório CVS.
Acesso remoto somente-leitura:
$ export CVSROOT=:pserver:anonymous@cvs.sf.net:/cvsroot/qref $ cvs login $ cvs -z3 co qref
Acesso local a partir de uma shell na mesma máquina:
$ export CVSROOT=/var/lib/cvs
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).
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).
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
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
Para obter a última versão do CVS, use "tomorrow":
$ cvs ex -D tomorrow nome_módulo
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 ...
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
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
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...
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.
O meta-pacote subversion-server
depende dos pacotes
libapache2-dav-svn
e subversion-tools
) para
configurar um servidor.
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
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.
As seções seguintes ensinam como usar diferentes comandos em 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á.
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
Referência Debian
CVS, Seg Abr 3 22:58:08 UTC 2005osamu@debian.org
pormenese@uol.com.br