<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>bleno@blog ~$ &#187; cvs</title>
	<atom:link href="http://www.bleno.org/blog/tag/cvs/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bleno.org/blog</link>
	<description></description>
	<lastBuildDate>Wed, 21 Jul 2010 18:21:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CVS no Debian</title>
		<link>http://www.bleno.org/blog/2009/08/cvs-no-debian/</link>
		<comments>http://www.bleno.org/blog/2009/08/cvs-no-debian/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 01:37:43 +0000</pubDate>
		<dc:creator>Bleno Vinicius</dc:creator>
				<category><![CDATA[mundo nerd]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.bleno.org/blog/?p=621</guid>
		<description><![CDATA[Hi,
Depois que começamos a programar &#8220;de verdade&#8221; (corporativamente ou não&#8230; rsrs!), percebemos a necessidade de controlar &#8220;as versões&#8221; do software em questão. Não simplesmente editando e salvando seus ultimos &#8220;codes&#8221;. É ai que entra o CVS (Concurrent Versions System).
Imagine você terminar aquele projeto/software e no momento da entrega precisar modificar o código, implementar mais alguma [...]]]></description>
			<content:encoded><![CDATA[<p>Hi,</p>
<p style="text-align: justify;">Depois que começamos a programar &#8220;de verdade&#8221; (corporativamente ou não&#8230; rsrs!), percebemos a necessidade de controlar &#8220;as versões&#8221; do software em questão. Não simplesmente editando e salvando seus ultimos &#8220;codes&#8221;. É ai que entra o <a title="CVS no wikipedia..." href="http://pt.wikipedia.org/wiki/CVS" target="_blank">CVS</a> (Concurrent Versions System).</p>
<p style="text-align: justify;">Imagine você terminar aquele projeto/software e no momento da entrega precisar modificar o código, implementar mais alguma função. Tranquilo! Mas depois, percebe que não era bem aquilo que você queria, era melhor deixar do jeito que estava&#8230; iii&#8230; Neste caso o CVS controla as versões editadas do seu projeto/software permitindo que você possa acessar os antigos códigos. Ótimo!</p>
<p style="text-align: justify;">Outra situação é você desenvolver um software em conjunto com amigos da faculdade e seu &#8220;brother&#8221; adicionar alguns trechos de códigos &#8220;bugados&#8221; e ir passear&#8230; o que fazer? Ir no CVS e buscar as versões do código antes de seu &#8220;brother&#8221; ter feito a m*rda! ;)</p>
<p><strong>O que veremos neste post?</strong></p>
<blockquote><p>- Instalar e configurar o CVS servidor.<br />
- Alguns comando básicos do CVS cliente no próprio linux.</p></blockquote>
<p><strong>*** Instalando e configurando o CVS</strong></p>
<p>Para este post usei o Debian Lenny. Let´s go&#8230;</p>
<blockquote><p>~$<br />
~$ sudo apt-get install cvs</p></blockquote>
<p style="text-align: justify;">Depois de instalado o CVS (neste caso ele instala o servidor e cliente), na versão em questão é a 1.12.13 ele cria um repositório padrão em /srv/cvs.</p>
<p style="text-align: justify;">No nosso exemplo vamos apagar o repositório padrão e criar um novo em /home/cvs.</p>
<blockquote><p>~$<br />
~$ sudo rm -rf /srv</p></blockquote>
<p style="text-align: justify;">Agora vamos editar o arquivo de configuração principal do cvs: /etc/cvs-pserver.conf</p>
<blockquote><p>~$<br />
~$ sudo vi /etc/cvs-pserver.conf</p>
<p><strong>CVS_PSERV_REPOS=&#8221;/home/cvs&#8221;</strong><br />
CVS_PSERV_LIMIT_MEM=hard<br />
CVS_PSERV_LIMIT_DATA=hard<br />
CVS_PSERV_LIMIT_CORE=0<br />
CVS_PSERV_LIMIT_CPU=hard</p></blockquote>
<p style="text-align: justify;">Neste arquivo modifique a linha CVS_PSERV_REPOS com o diretório do seu repositório de projetos.</p>
<blockquote><p>Você pode criar mais de um repositório, usando , (vírgula) entre os diretórios:<br />
CVS_PSERV_REPOS=&#8221;/home/cvs<strong>,</strong>/home/meusprojetos&#8221;<br />
Neste caso temos 2 repositórios! ;)</p></blockquote>
<p style="text-align: justify;">Depois de criado o repositório, vamos criar o diretório e efetuar as devidas permissões.</p>
<blockquote><p>~$<br />
~$ sudo mkdir /home/cvs<br />
~$ sudo chmod -R 775 /home/cvs<br />
~$ sudo chown root:src -R /home/cvs<br />
~$ sudo chmod g+s /home/cvs</p></blockquote>
<p>1. Criamos o diretório /home/cvs</p>
<p>2. Damos permissão 775 ao diretório do nosso repositório.</p>
<p>3. Setamos o dono <strong>root</strong> e grupo <strong>src</strong> para o diretório.</p>
<p style="text-align: justify;">4. Usando o <strong>gid bit</strong> para o grupo <strong>src</strong>, assim, todo o usuário do sistema (/etc/passwd) que estiver no grupo src poderão escrever no diretório.</p>
<p style="text-align: justify;">Pronto! Com estas configurações básicas já podemos executar nosso servidor CVS. Mas&#8230; o CVS é um serviço que não roda em <a title="Mais sobre standalone no wikipedia..." href="http://pt.wikipedia.org/wiki/Standalone" target="_blank">standalone</a>, assim, ele usa o <strong>inetd</strong> para executar o serviço. Vamos, então, adicionar as configs do CVS no inetd:</p>
<blockquote><p>~$<br />
~$ sudo vi /etc/inetd.conf</p>
<p>Adicione a linha abaixo:<br />
cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/sbin/cvs-pserver</p>
<p>~$ sudo /etc/init.d/openbsd-inetd start</p></blockquote>
<p style="text-align: justify;">Ok! O CVS já está executando via inetd. O CVS usa as portas <strong>2401/tcp</strong> e <strong>2401/udp</strong>, então &#8211; caso necessário -, libere estas portas no seu firewall.</p>
<p style="text-align: justify;">Com o CVS funcionando, vamos criar o base de diretórios e arquivos do nosso repositório em /home/cvs.</p>
<blockquote><p>~$<br />
~$ cvs -d /home/cvs init</p></blockquote>
<p style="text-align: justify;">Assim, ele cria o diretório CVSROOT no nosso repositório, contendo as conf necessárias para o mesmo. Vamos ver alguns comandos básicos e como proceder em situações do dia a dia.</p>
<p><strong>Adicionar permissão a um usuário para escrever no repositório:</strong></p>
<blockquote><p>~$<br />
~$ sudo addgroup usuario src</p></blockquote>
<p><strong>Conectando remotamente via cvs (no linux/debian):</strong></p>
<blockquote><p>~$<br />
~$ export CVSROOT=:pserver:usuario@ipdoservidorCVS:/home/cvs<br />
~$ cvs login</p></blockquote>
<p style="text-align: justify;">Sim, parece estranho. Mas o cliente cvs no linux necessida de uma variável CVSROOT para conectar a um determinado host/servidor. Para simplificar o processo você pode criar a variável CVSROOT no .profile do seu usuário.</p>
<p><strong>Importando um projeto e versionando:</strong></p>
<blockquote><p>~$<br />
~$ cd /home/bleno/projetos/ListaEncadeada<br />
~$ cvs import ListaEncadeada ProjetoListaEncadeada v1 start</p></blockquote>
<p style="text-align: justify;">Neste caso, importei o diretório ListaEncadeada usando o nome ProjetoListaEncadeada chamando de versão &#8220;v1&#8243;. Assim, o diretório local ListaEncadeada foi importado em /home/cvs/ProjetoListaEncadeada no servidor CVS.</p>
<p style="text-align: justify;">O CVS cliente pedirá uma mansagem descritiva sobre seu &#8220;import&#8221;, você informa a descrição e sai com o um simples :x (by vi editor!).</p>
<p style="text-align: justify;">Vamos supor que depois de 2 dias de trabalho árduo saio a versão &#8220;v2&#8243; deste projeto. Para importar a nova versão, conectamos ao servidor CVS como descrito acima e importando a nova versão:</p>
<blockquote><p>~$<br />
~$ cvs import ListaEncadeada ProjetoListaEncadeada v2</p></blockquote>
<p><strong>Trabalhando com arquivos no CVS cliente no Linux!</strong></p>
<p style="text-align: justify;">Vamos supor que você está em uma outra máquina e queira um cópia do ProjetoListaEncadeada, simples: conecte-se ao servidor CVS como descrito acima e:</p>
<blockquote><p>~$<br />
~$ cd /home/outramaquina/projetos<br />
~$ cvs checkout ProjetoListaEncadeada</p></blockquote>
<p style="text-align: justify;">Assim você tem uma cópia da ultima versão do ProjetoListaEncadeada. Depois de editar o projeto você deseja fazer o upload dos arquivos novos, então:</p>
<blockquote><p>~$<br />
~$ cvs update</p></blockquote>
<p style="text-align: justify;">O update faz com que o cvs marque os arquivos locais modificados para depois enviar para o servidor. Depois de marcados com o update:</p>
<blockquote><p>~$<br />
~$ cvs commit</p></blockquote>
<p style="text-align: justify;">Pronto, os novos arquivos modificados são enviados para o servidor! Lembre-se que todo o processo usando o CVS cliente deve-se está conectado o CVS servidor.</p>
<p style="text-align: justify;">Suponto que há um novo arquivo &#8220;classeNos.java&#8221; criado no ProjetoListaEncadeada que você quer adicionar, fazemos:</p>
<blockquote>
<p style="text-align: justify;">~$<br />
~$ cvs add classeNos.java</p></blockquote>
<p style="text-align: justify;">Ah, você lembrou que este novo arquivo não é mais necessário no ProjetoListaEncadeada, fazemos:</p>
<blockquote>
<p style="text-align: justify;">~$<br />
~$ rm classeNos.java<br />
~$ cvs remove classeNos.java<br />
~$ cvs commit</p></blockquote>
<p style="text-align: justify;">Pronto! Desta forma quando alguem que faz parte do ProjetoListaEncadeada der um &#8220;checkout&#8221; as novas modificações serão replicadas para ele! Rulez!!!</p>
<p style="text-align: justify;"><strong>Verificando logs</strong></p>
<p style="text-align: justify;">Conectado ao CVS server via CVS cliente no linux, você pode verificar os logs as versões de um determinado projeto:</p>
<blockquote>
<p style="text-align: justify;">~$<br />
~$ cvs log | less</p></blockquote>
<p style="text-align: justify;">Ele vai mostar o log das ultimas modificações do projeto em questão. O less é para a amostragem ficar mais amigável =)</p>
<blockquote>
<p style="text-align: justify;">~$<br />
~$ cvs annotate | less</p></blockquote>
<p style="text-align: justify;">Mostra as anotações, linha a linha, com detalhes sobre o usuário e data das modificações. Por exemplo, você quer saber quem modificou codificou em 26 de agosto na versão v2 do ProjetoListaEncadeada:</p>
<blockquote>
<p style="text-align: justify;">~$<br />
~$ cvs annotade | grep v1 | grep &#8220;26-Aug-09&#8243;</p></blockquote>
<p style="text-align: justify;">Ai vai a sua criatividade para filtrar a pesquisa do log.</p>
<p style="text-align: justify;">Para mais comandos do CVS cliente no linux:</p>
<blockquote>
<p style="text-align: justify;">~$<br />
~$ cvs &#8211;help-commands</p></blockquote>
<p style="text-align: justify;">Realmente o CVS é show de bola. Atualmente existe o SVN que o Dr. Google utiliza no code.google.com, mas sinceramente, não me adaptei bem (rsrs!). Em breve um post sobre SVN! ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bleno.org/blog/2009/08/cvs-no-debian/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
