Controle de versão com CVS + CentOS 5.x

Acabei de precisar reinstalar um servidor de controle de versão para o novo projeto aqui na empresa, e pra minha surpresa, só consegui informações picadas na fonte do saber (Google). Depois de juntar todas as informações num único lugar, consegui criar o novo servidor. Por isso, resolvi postar aqui um tutorial do que foi feito.

Instalação e Configuração

Bom, partindo do princípio que você já esteja com o CentOS 5.x instalado, vamos a instalação do servidor CVS:

yum -y install cvs

Com o CVS instalado, vamos há algumas alterações: (Como tenho mais familiaridade com o VI, vou utilizá-lo nos exemplos, mas você pode utilizar o editor de sua preferência)

cat /etc/xinetd.d/cvs

O arquivo padrão da instalação deve aparecer como abaixo:

# default: off
# description: The CVS service can record the history of your source \
# files. CVS stores all the versions of a file in a single \
# file in a clever way that only stores the differences \
# between versions.
service cvspserver {
disable = yes
port = 2401
socket_type = stream
protocol = tcp
wait = no
user = root
passenv = PATH
server = /usr/bin/cvs
env = HOME=/var/cvs
server_args = -f --allow-root=/var/cvs
pserver
# bind = 127.0.0.1
}

Vamos alterá-lo para as configurações no sistema. No exemplo, vamos supor que o a variável path do nosso repositório seja “/var/repositorio”.

service cvspserver {
disable = no
socket_type = stream
wait = no
user = root
group = users
log_type = FILE /var/log/cvspserver
protocol = tcp
env = '$HOME=/usr/local/cvspserver'
log_on_failure += USERID
port = 2401
server = /usr/bin/cvs
server_args = -f --allow-root=/var/repositorio pserver
}

Após a alteração, precisamos reiniciar o serviço xinetd:

/etc/init.d/xinetd restart

Verificando se iniciou corretamente:

netstat -tap | grep cvs

Deve retornar algo como abaixo:

tcp 0 0 *:cvspserver *:* OUÇA 10426/xinetd

Agora, precisamos exportar a variável de path para que todos os usuários ao logarem no servidor, já tenham a variável inicializada:

echo "export CVSROOT=/var/repositorio" >> /root/.bashrc
echo "export CVSROOT=/var/repositorio" >> /home/usuario/.bashrc

Bom, com tudo feito, precisamos criar o diretório principal do projeto:

#Cria o diretório
mkdir /var/repositorio
#Cria os arquivos de controle do CVS
cvs -d /var/repositorio init
#Torna o grupo USERS (ou o grupo que você escolher) proprietário da pasta
chgrp users /var/repositorio
#Muda as permissões de acesso aos arquivos do diretório
chmod g+srwx /var/repositorio

Por questões de segurança, você pode optar por liberar acesso aos usuários somente para utilização do cvs no servidor, para isso, basta adicionar os usuários no arquivo “/var/repositorio/CVSROOT/passwd”. Para isso, utilizamos o comando:

htpasswd passwd usuario #Onde usuário é o nome do usuário que você deseja adicionar.

Caso, contrário, basta adicionar os usuários normalmente ao sistema Linux, lembrando de exportar a variável $CVSROOT para o .bashrc do diretório home do usuário que você criar:

echo "export CVSROOT=/var/repositorio" >> /home/usuario/.bashrc

Com tudo isso, já temos o servidor CVS com o diretório base do repositório funcionando.

Testes

Agora vamos testar o funcionamento do repositório. Para os testes, vamos supor que estamos lidando com usuários do sistema e que o desktop de trabalho seja Linux.

Primeiro vamos criar um usuário de sistema no servidor cvs e exportar a variável $CVSROOT para o usuário:

adduser fulano
passwd fulano
echo "export CVSROOT=/var/repositorio" >> /home/fulano/.bashrc

Agora, vamos criar uma nova pasta de projeto. No nosso caso, a pasta “teste”.

mkdir /var/repositorio/teste
cvs -d /var/repositorio/teste init
chgrp -R users /var/repositorio/teste
chmod -R g+srwx /var/repositorio/teste

Na estação de trabalho, no console, efetuamos login no cvs para verificar se está funcionando, para isso, precisamos exportar para o bashrc do usuário. Supondo que estamos logados com o usuário(do desktop) fulano, e que o ip do servidor cvs seja 192.168.0.254, temos:

echo "export CVSROOT=:pserver:fulano@172.16.10.154:/var/repositorio" >> /home/fulano/.bashrc
cvs login
cd /opt
cvs checkout teste #Aqui, baixamos a pasta do projeto para dentro da pasta /opt da estação de trabalho, para trabalharmos localmente.

Com a pasta do projeto localmente, vamos criar um arquivo e efetuar o commit no cvs:

cd /opt/teste
#Coloque algum conteúdo no arquivo.
vim teste.txt
#Com esse comando criamos o arquivo no servidor.
cvs add teste.txt
#Altere o conteúdo do arquivo
echo "teste de commit" >> teste.txt
#Atualizando versão do arquivo no servidor
cvs commit teste.txt

Comando úteis do cvs

Principais comandos do CVS:

Comando Descrição Opções mais usadas Exemplo
checkout Baixa do servidor para o diretório local um módulo. cvs checkout meuprojeto
update Atualiza a cópia local com a última versão do servidor. -d (baixa diretórios novos) cvs update -d
commit Envia para o servidor as alterações feitas. -m msg (Utiliza msg como a mensagem que descreve o que foi alterado) cvs commit -m “Implementada funcionalidade X-Y-Z.”
add Adiciona um diretório ao servidor ou programa um arquivo para inclusão no próximo commit. cvs add novodiretorio
remove Marca um arquivo para remoção no próximo commit. Diretórios não podem ser removidos. cvs remove novodiretorio
diff Compara a cópia local com a do servidor (ou duas cópias de releases diferentes no servidor) e exibe as diferenças. -r (Especifica a release que se quer usar na comparação), -u (Altera a forma de exibição.) cvs diff meuarquivo, cvs diff -r 1.1 -r 1.2 meuarquivo
edit Marca o arquivo para edição. cvs edit meuarquivo
unedit Desmarca o arquivo que havia sido marcado para edição, eliminando as alterações feitas. cvs unedit meuarquivo
tag Coloca uma “etiqueta” em uma determinada versão de um módulo. -b (Abre um “branch” a partir desta tag.) cvs tag -b v1_0
log Exibe o histórico de versões de um arquivo, com as mensagens dadas nos commits. cvs log meuarquivo
status Mostra o estado atual. cvs status meuarquivo
import Cria um novo módulo no CVS, importando o diretório local. cvs import meumodulo -m ‘Colocando meumodulo no CVS’ minhaempresa start
export Extrai os arquivos do CVS, sem trazer os arquivos de controle do CVS (ao contrário do checkout). cvs export meuprojeto

Bibliografia

As informações aqui contidas, foram retiradas de fontes na internet e manual do cvs e reorganizadas por mim.

cvs

idevelopment.info

petersonpinheiro.blogspot.con

blogtheunical.com

okitiva.net

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s