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.