<?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>Agile on Rails &#187; vcs</title>
	<atom:link href="http://blog.siverti.com.br/tag/vcs/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.siverti.com.br</link>
	<description>Liberte-se, Comunique-se, Desenvolva-se</description>
	<lastBuildDate>Tue, 11 May 2010 13:12:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Controle de versão (Bazaar) em 5 minutos</title>
		<link>http://blog.siverti.com.br/2008/11/28/controle-de-versao-bazaar-em-5-minutos/</link>
		<comments>http://blog.siverti.com.br/2008/11/28/controle-de-versao-bazaar-em-5-minutos/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 23:21:10 +0000</pubDate>
		<dc:creator>alexandre</dc:creator>
				<category><![CDATA[Bazaar]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[controle de versão]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[dvcs]]></category>
		<category><![CDATA[vcs]]></category>

		<guid isPermaLink="false">http://blog.siverti.com.br/?p=196</guid>
		<description><![CDATA[Este é um pequeno guia para iniciantes, que já tenham alguma noção do que é um controle de versão, caso você ainda não saiba veja a definição da Wikipédia sobre Sistema de Controle de versão e também a definição de Sistema de Controle de Versão Distribuído (Em Inglês) que é o caso do Bazaar. Quando [...]]]></description>
			<content:encoded><![CDATA[<p>Este é um pequeno guia para iniciantes, que já tenham alguma noção do que é um controle de versão, caso você ainda não saiba veja a <a href="http://pt.wikipedia.org/wiki/Sistema_de_controle_de_versão">definição da Wikipédia sobre Sistema de Controle de versão</a> e também a <a href="http://en.wikipedia.org/wiki/Distributed_Version_Control_System">definição de Sistema de Controle de Versão Distribuído</a> (Em Inglês) que é o caso do Bazaar.<br />
<strong><br />
Quando precisamos de um controle de versão?</strong></p>
<p>Sempre que queremos manter o histórico de alterações de arquivos, sejam eles código fonte de programas ou até mesmo documentos (aquelas várias versões do seu trabalho de conclusão de curso) entre outros arquivos, também é possível manter versões de arquivos binários, como fotos programas executáveis entre outros, porém para estes últimos alguns recursos não são possíveis, tais como ver as diferenças entre o arquivo na revisão 5 e 6.</p>
<p><strong>Mas qual ferramenta usar?</strong></p>
<p>Bem, existem várias e depende do molde que você quer trabalhar, mas eu posso recomendar hoje 3 ferramentas, e vou listar em ordem da mais fácil para a mais difícil de usar (na minha opinião), são elas: Bazaar, Git e Mercurial.<br />
Presando pela facilidade de instalação e uso mas com todos os recursos dos demais e até mais algumas opções, minha opção foi o Bazaar.</p>
<p>Vou partir do princípio que você sabe instalar um software em seu sistema operacional, bem como utilizar um shell (&#8220;Promt de comando&#8221; para usuários windows). Todos os meus exemplos são feitos no Linux utilizando o gnome-terminal, sendo que para Windows alguns comandos do sistema operacional podem ser diferentes, mas os comandos do Bazaar são iguais.</p>
<p><strong>Instalação</strong></p>
<p>O Bazaar está disponível oficialmente para uma série de sistemas operacionais e também em forma de código fonte que &#8220;teoricamente&#8221; pode ser compilado em qualquer plataforma que rode Python.</p>
<ul>
<li><strong>Linux:</strong> Se já não estiver instalado você pode facilmente encontrar em seu gerenciador de pacotes, geralmente o nome do pacote é &#8220;bzr&#8221; e não bazaar:</li>
<li><strong>Windows</strong> Siga as <a href="http://bazaar-vcs.org/WindowsDownloads">instruções de instalação</a> (Em inglês) aqui ou clique aqui para baixar o diretamente o instalador da versão 1.9.</li>
<li><strong>Mac OS X</strong>: Siga as <a href="http://bazaar-vcs.org/MacOSXBundle">instruções aqui</a> (Em inglês).</li>
<li>Para outras plataformas e instalação via código fonte, veja mais informações <a href="http://bazaar-vcs.org/Download">aqui</a> e <a href="http://bazaar-vcs.org/InstallationFaq">aqui</a> (Em inglês).</li>
</ul>
<p><strong>Se apresentando para o Bazaar</strong></p>
<p>Antes de começar a controlar versão de coisas é interessante colocar sua identificação no Bazaar, para que ele possa &#8220;assinar&#8221; suas alterações nos arquivos, normalmente é utilizado o nome e email como identificação, portanto em um promt utilizando seus próprios dados digite:</p>
<pre>  $ bzr whoami "Alexandre da Silva &lt;simpsomboy@gmail.com&gt;"</pre>
<p>o Bazaar vai criar um arquivo de configuração (ou atualizar se ele já existir) incluindo sua identificação. para verificar qual a identificação você está utilizando atualmente ignore o segundo parâmetro e ele exibirá as configurações atuais:</p>
<pre>  $ bzr whoami
  Alexandre da Silva &lt;simpsomboy@gmail.com&gt;</pre>
<p><strong>Controlando a versão de arquivos</strong></p>
<p>Agora vem a parte interessante, vamos controlar a versão de alguns arquivos, para isso vamos criar uma pasta/diretório onde ficarão estes arquivos:</p>
<pre>  $ mkdir arquivos
  $ cd arquivos
  $ mkdir adicionais
  $ touch teste1.txt teste2.txt teste3.txt adicionais/teste4.txt teste5.txt</pre>
<p>(Usuários do windows não possuem o comando touch, e devem usar o Windows Explorer ou outra ferramenta para criar alguns arquivos texto vazios)</p>
<p>Até agora temos apenas uma pasta e um punhado de arquivos, vamos colocá-los agora no controle de versão:</p>
<pre>  $ bzr init
  Standalone tree (format: pack-0.92)
  Location:
    branch root: .</pre>
<p>Aparentemente nada foi feito, porém o Bazaar inicializou o diretório atual como um &#8220;branch&#8221; que nada mais é do que um local onde ficarão registradas todas as alterações realizadas nos arquivo pertencentes a ele. No Bazaar um branch é um diretório.</p>
<p>o próximo passo é adicionar os arquivos ao branch:</p>
<pre>  $ bzr add
  added adicionais
  added teste1.txt
  added teste2.txt
  added teste3.txt
  added teste5.txt
  added adicionais/teste4.txt</pre>
<p>Agora o Bazaar conhece os arquivos que ele deve manter o histórico, então vamos criar nossa primeira &#8220;revisão&#8221; dos arquivos existentes. Pense em uma revisão como uma foto do estado atual dos arquivos.</p>
<pre>  $ bzr commit -m "Primeira versão"
  Committing to: arquivos/
  added adicionais
  added teste1.txt
  added teste2.txt
  added teste3.txt
  added teste5.txt
  added adicionais/teste4.txt
  Committed revision 1.</pre>
<p>Como o Bazaar é um controle de versão distribuído não é necessário conectar a um servidor para enviar as alterações, todo o histórico de todos os arquivos ficam guardados dentro de apenas um sub-diretório especial chamado &#8220;.bzr&#8221; que fica no diretório raíz do branch.</p>
<p><strong>Alterando seus arquivos</strong></p>
<p>Vamos fazer algumas alterações e armazenar (commit) o que foi feito para o nosso branch.<br />
Edite o arquivo teste1.txt em seu editor favorito, depois verifique o que foi feito:</p>
<pre>  $ bzr diff
  === modified file 'teste1.txt'
  --- teste1.txt    2008-11-28 22:39:16 +0000
  +++ teste1.txt    2008-11-28 22:43:09 +0000
  @@ -0,0 +1,1 @@
  +teste teste teste</pre>
<p>Armazene seu trabalho no branch:</p>
<pre>  $ bzr commit -m "Adicionada primeira linha no arquivo teste1.txt"
  Committing to: arquivos/
  modified teste1.txt
  Committed revision 2.</pre>
<p><strong>Verificando o Log de alterações</strong></p>
<p>Você pode ver todo o histórico do que foi modificado e quem modificou observando o log de alterações:</p>
<pre>  $ bzr log
  ------------------------------------------------------------
  revno: 2
  committer: Alexandre da Silva &lt;alexandre@exatisistemas.com.br&gt;
  branch nick: arquivos
  timestamp: Fri 2008-11-28 20:44:12 -0200
  message:
    Adicionada primeira linha no arquivo teste1.txt
  ------------------------------------------------------------
  revno: 1
  committer: Alexandre da Silva &lt;alexandre@exatisistemas.com.br&gt;
  branch nick: arquivos
  timestamp: Fri 2008-11-28 20:39:16 -0200
  message:
    Primeira versão</pre>
<p><strong>Publicando seu trabalho em um servidor sftp</strong></p>
<p>Existem várias maneiras de publicar um branch do Bazaar, mas uma das mais fáceis é utilizar um servidor sftp, se você tiver acesso a um você pode publicar seu branch da seguinte forma:</p>
<pre>  $ bzr push sftp://seu.usuario@seu.servidor/~/arquivos
  Created new branch.</pre>
<p><strong>Criando sua própria cópia de um branch existente</strong></p>
<p>Para trabalhar com os arquivos de outra pessoa você deve obter sua própria cópia (branch) para que possa trabalhar com os arquivos localmente em seu computador:</p>
<pre>  $ bzr branch sftp://seu.usuario@seu.servidor/~/arquivos arquivos-copia1
  Branched 2 revision(s).</pre>
<p>O Bazaar vai fazer o download de todas as revisões dos arquivos contidos no branch, além de uma cópia de trabalho contendo o estado atual dos arquivos.</p>
<p><strong>Atualizando seu branch a partir de um branch remoto já modificado</strong></p>
<p>Enquanto você modifica seus arquivos, os outros usuários também podem modificar os arquivos deles, podendo ser inclusive os mesmos arquivos, e neste último caso se for alterada a mesma parte do arquivo, há grande chace de você ter que resolver alguns conflitos, mas o processo é bem simples, mas em grande parte dos casos o Bazaar faz todo o trabalho para nós. Para atualizar nosso branch (cópia de trabalho) que já foi alterada, com um branch remoto que também já pode ter sido alterado, utilizamos o comando merge:</p>
<pre>  $ bzr merge
  Merging from remembered parent location sftp://seu.usuario@seu.servidor/~/arquivos/
   M  teste2.txt
  All changes applied successfully.</pre>
<p>Agora verificamos o que foi alterado:</p>
<pre>  $ bzr diff
  === modified file 'teste2.txt'
  --- teste2.txt    2008-11-28 22:39:16 +0000
  +++ teste2.txt    2008-11-28 22:59:10 +0000
  @@ -0,0 +1,1 @@
  +editado editado editado</pre>
<p>Estamos contentes com as alterações, vamos dar o nosso commit (armazenar nossas alterações) e em seguida publicar devolta para o branch remoto</p>
<pre>  $ bzr commit -m "Merge a partir do branch principal"
  Committing to: arquivos-copia1/
  modified teste2.txt
  Committed revision 4.

  $ bzr push sftp://seu.usuario@seu.servidor/~/arquivos
  Pushed up to revision 4.</pre>
<p><strong>Como aprender mais</strong></p>
<ol>
<li>Eventualmente estarei postando mais informações relacionadas aqui no blog.</li>
<li>O Site oficial oferece uma ótima documentação, porém encontra-se em sua maioria em Inglês. http://doc.bazaar-vcs.org/latest/en/user-guide/index.html</li>
<li>O próprio Bazaar pode lhe dizer o que fazer em alguns casos, para tanto consulte a ajuda de linha de comando:</li>
</ol>
<p>Informações sobre a linha de comando do Bazaar</p>
<pre>  $ bzr help</pre>
<p>Informações sobre vários comandos do Bazaar</p>
<pre>  $ bzr help commands</pre>
<p>Informações detalhadas sobre um comando específico</p>
<pre>  $ bzr help [comando]</pre>
<p>Este artigo foi fortemente inspirado e pode ser considerado uma tradução parcial de: <a href="http://doc.bazaar-vcs.org/latest/en/mini-tutorial/index.html">http://doc.bazaar-vcs.org/latest/en/mini-tutorial/index.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.siverti.com.br/2008/11/28/controle-de-versao-bazaar-em-5-minutos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Git Bazaar ou Mercurial?</title>
		<link>http://blog.siverti.com.br/2008/11/14/git-bazaar-ou-mercurial/</link>
		<comments>http://blog.siverti.com.br/2008/11/14/git-bazaar-ou-mercurial/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 00:28:29 +0000</pubDate>
		<dc:creator>alexandre</dc:creator>
				<category><![CDATA[Bazaar]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[controle de versão]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[dvcs]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[vcs]]></category>

		<guid isPermaLink="false">http://blog.siverti.com.br/?p=165</guid>
		<description><![CDATA[Este artigo já estava na minha todo-list já faz algum tempo, visto que os projetos em que trabalho já estão utilizando controle de versão descentralizado desde o início de 2008, mas agora depois de reler o artigo do Akita resolvi tirar esta pendência do meu to-do. Por quê mudar para um controle descentralizado? Bom já [...]]]></description>
			<content:encoded><![CDATA[<p>Este artigo já estava na minha todo-list já faz algum tempo, visto que os projetos em que trabalho já estão utilizando controle de versão descentralizado desde o início de 2008, mas agora depois de reler o <a href="http://www.akitaonrails.com">artigo do Akita</a> resolvi tirar esta pendência do meu to-do.</p>
<p><strong>Por quê mudar para um controle descentralizado?</strong></p>
<p>Bom já faz algum tempo que o <a href="http://www.infoq.com/articles/dvcs-guide">controle de versão descentralizado</a> está em alta em detrimento às opções que acredito serem mais utilizadas ainda hoje que são o SVN e o CVS. Quero dizer que o SVN e outras ferramentas centralizadas que utilizamos solucionaram o problema para nossa equipe durante muito tempo, No início quando programava em Delphi era utilizado um controle de de versão integrado a IDE chamado FreeVCS, que depois se tornou o JediVCS, resolvia o problema e o workflow utilizado era o de dar o CheckOut do arquivo a trabalhar (isso travava o arquivo no servidor e ninguém poderia alterá-lo) fazia-se as alterações necessárias em em seguida executava o CheckIn aplicando as alterações no repositório principal e liberando o arquivo para outros desenvolvedores, Um bom começo.</p>
<p>Um dia precisamos tratar branches e coisas do gênero, e surpresa o nosso amigo Jedi não suportava (acho que ainda não suporta), então a solução foi migrar. O escolhido para a migração foi o SVN, provavelmente os descentralizados já existiam, mas os na época qualquer pesquisa no Google sobre controle de versão devolvia toneladas de links para SVN. Tudo bem até ai, e como nenhum usuário de Windows gosta de usar o promt de comando acabei desenvolvendo um plugin para o Delphi que se comportava mais ou menos como o JediVCS mas com o SVN, daí em diante muitos projetos no SVN, em seguida migração de plataforma (Hoje utilizamos Linux embora os servidores já fossem Linux desde a migração para SVN). Mas às vezes era necessário levar parte da equipe para outro local (longe dos servidores internos), geralmente no cliente, onde eram feitas alterações no sistema. A solução não era muito prática, fazer o setup de um servidor SVN temporário para o desenvolvimento no local, depois pegar as revisões gerar um diff gigante das alterações e aplicar no repositório na empresa e resolver os conflitos com o que os desenvolvedores internos fizeram neste meio tempo. Quando um dia decidi que precisávamos de um controle de versão onde pudéssemos realizar algum trabalho desconectados do servidor interno e depois fosse menos trabalhoso juntar tudo novamente, além de, manter o histórico de cada um dos commits realizados.<br />
Foi então que comecei a minha jornada em busca de um<em> controle de versão distribuído</em><span style="color: #ff0000;">*</span> é claro que fosse OpenSource, a lista é grande, onde podemos citar alguns como <a href="http://codeville.org/">Codeville</a>, <a href="http://darcs.net/">Darcs</a>, <a href="http://monotone.ca/">Monotone</a>, <a href="http://selenic.com/mercurial/wiki/">Mercurial</a>, <a href="http://git.or.cz/">Git</a> e <a href="http://bazaar-vcs.org/">Bazaar</a> além de mais alguns que não cheguei nem a pesquisar. Desta lista poucos minutos de pesquisa me levaram a considerar apenas o <strong>Bazaar</strong> o <strong>Git</strong> e o <strong>Mercurial</strong>, e fazendo alguns testes percebi que todos poderiam satisfazer minhas necessidades usando Linux. Então vamos às necessidades:</p>
<ol>
<li> Ser multiplataforma, afinal ainda tenho ainda hoje código fonte para manter em Delphi <img src='http://blog.siverti.com.br/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> .</li>
<li> Possuir um modo de converter meus repositórios Subversion.</li>
<li> Ter uma curva de aprendizado pequena em relação ao SVN.</li>
<li> Tivesse como integrar com alguma ferramenta estilo Trac ou Redmine.</li>
</ol>
<h3>Primeira Tentativa:<strong> Mercurial</strong></h3>
<p>No primeiro quesito, à primeira vista ele se encaixa pois grande parte do seu código é escrito em Python, tem um instalador para Windows (que não me parece ser oficial). Mas esperem, eu sou fissurado por usar a Ultima versão da ferramenta que o Desenvolvedor disse que está estável, logo, não me interessa muito usar o instalador da versão Windows, que na época dos meus testes instalava algo em torno de 0.9 e a versão oficial já era a 1.0 (Março de 2008). Bom escrito em Python pensei eu, vamos ao easy_install&#8230;&#8230;</p>
<pre>c:\easy_install mercurial...... bam!</pre>
<p>Erro, claro, não havia um compilador C. vamos lá instalei toda a <a href="http://www.mingw.org/">MingW</a>, <a href="http://www.mingw.org/wiki/msys">MSyS</a> etc, easy_install denovo, compilou, instalou beleza!. <em>Não</em>, o comando hg não funciona, bom vamos la, eu crio um hg.bat que chama o script do mercurial, jogo na pasta Scripts e tudo certo&#8230;. Também <em>não</em>, mais algumas tentativas depois consegui rodar o hg e ter um resultado. Bom, pra mim morreu aqui, não quero uma coisa que cada vez que tenho que instalar tenha que&#8230; Instalar um compilador C que os meus desenvolvedores Windows nao vão ter na máquina e fazer mais um monte de gambiarras pra ter versão &#8220;<em>featured</em>&#8221; do sistema. Enfim o Mercurial possui uma ferramenta de conversão de repositórios SVN e outros e tem integração com algumas ferramentas, inclusive o Netbeans, que por sinal, Surpresa!, também <strong>não funciona no Windows</strong> mesmo tenho o Mercurial funcionando no promt instalado via easy_install, acho que só funciona se for via installer mesmo. A curva de aprendizado dele é bem grande se formos levar em conta que sempre temos usuários <em>bitolados</em>, ei, eu disse bitolados?, eu quis dizer &#8220;acostumados&#8221; com o SVN e seu set de comandos, mal e porcamente.</p>
<p>Já é um caos fazer as pessoas entenderem o conceito de controle distribuído.</p>
<h3><strong>Segunda Tentativa: Bazaar</strong></h3>
<p>Bom eu já estava desanimado mas tinha que continuar, Uma olhada no site, cheio de tutoriais e extensiva documentação, Boa! documentação parece pelo menos ser bem melhor que a do Mercurial, embora eu tenha encontrado muitos posts em blogs dizendo o contrário, então só posso supor que, se a documentação do Mercurial é boa, ela está bem escondida em algum lugar do Wiki deles, bom blames à parte, Já vi um instalador para Windows e&#8230; hum, vamos tentar do velho e bom modo&#8230;</p>
<pre>c:\easy_install bazaar ...</pre>
<p>E instalou sem nenhum erro&#8230; bom eu já tinha um compilador C instalado, seria por causa disso? Vamos desinstalar tudo e ver o que acontece. Após remover todas as parafernalhas do MingW e Cia Ltda e remover o egg<strong><span style="color: #ff0000;">**</span></strong> do Bazaar e tentar novamente&#8230; vamos lá&#8230;</p>
<pre>c:\easy_install bazaar</pre>
<p>E funcionou novamente!, bom o Bazar é completamente escrito em Python, o que explica a tamanha portabilidade. o comando bzr já saiu funcionando, e, por curiosidade vou até a pasta Scripts, e&#8230; lá está um arquivo bzr.bat mais ou menos como o meu workarround, porém, <em>out-of-the-box</em>. Tudo funcionando agora vamos ver uma ferramenta de conversão, na época utilizei o svn2bzr, que funcionou perfeitamente, mas não importou as tags e relações dos branches, mas a história Linear do Subversion veio funcionando 100%. Hoje tem o <a href="http://bazaar-vcs.org/BzrForeignBranches/Subversion">bzr-svn</a> que é um plugin para trabalhar diretamente com repositórios svn utilizando o bzr, e esta sim importa as tags referências de branches, merges etc. Ok curva de Aprendizado&#8230; uma estudada na documentação e, show de bola, não só tem praticamente todos os comanos similares aos do SVN, como também permite trabalhar com <a href="http://bazaar-vcs.org/Workflows">vários Workflows</a>, inclusive o modelo Centralizado igual ao SVN. Então uma pequena busca por integração com os issue trackers, e, existiam plugins para <a href="http://www.bugzilla.org/">bugzilla</a>, <a href="http://trac.edgewall.org/">Trac</a>, <a href="http://www.redmine.org">Redmine</a> e outros. eu na época estava utilizando o Trac e estava pensando em migrar para o Redmine, boa oportunidade para dar uma testada nele&#8230; Instalei testei e funcionou 100%, inclusive com aqueles comandos de commit, do tipo: bzr commit -m &#8220;This commit fixes #772&#8243; para fechar o ticket numero 772. Perfeito.</p>
<h3>Terceira Tentativa: Git</h3>
<p>Já mais contente mas minha jornada ainda não estava finalizada, uma pequena pesquisada e achei um instalador do Git para windows, que não era exatamente a última versão, mas vamos dar um desconto, o Git é escrito em uma carrada de linguagens, uma parte em C outra em Perl outra em Shell Script e por ai vai, fazer isso integrar, e pior, Funcionar no Windows não deve ser das mais fáceis tarefas. Bem, feita a instalação, ele instalou um shell bem similar ao do Cygwin que praticamente dá a leve sençassão de estar em um terminal Linux,  e mais algumas ferramentas, ele utiliza o <a href="http://www.mingw.org/">MingW</a>, <a href="http://www.mingw.org/wiki/msys">MSyS</a> e outras bibliotecas para fazer a mágica de funcionar no Windows, Instalado fazer alguns testes, e gostei, segundo o próprio instalador e documentação afirma, alguns comandos não estão disponíveis pois <em>falta ambiente<span style="color: #ff0000;">***</span></em>, mas para o uso diário geral show de bola. A curva de aprendizado&#8230;.. hummm um <em>pouco pior que a do Mercurial</em>, porque por exemplo o comando<em><strong> checkout </strong></em>parece não ter nada haver com o que o SVN faz, embora para mim faça sentido, em fim, quando eu falei que era possível trocar de <em>branch</em> dentro da mesma cópia de trabalho com apenas um comando, ninguém entendeu nada, afinal totalmente fora deste planeta SVN. Continuando a conversão dos repositórios SVN também funcionou lindamente (bastante similar ao que hoje é o <em>bzr-svn </em>do Bazaar), e Integrou bonitinho com o Redmine, com uns pequenos probleminhas que não me recordo, mas, bastante usável.</p>
<p><strong>Bom vejamos minha tabela de pontuação:</strong></p>
<pre>+----------+----------+-----------+----------+------------+
|          |Multiplat |SVN/Import | CurvaApr | Integracao |
+----------+----------+-----------+----------+------------+
|Mercurial |     5    |    ??     |     7    |    ??      |
+----------+----------+-----------+----------+------------+
|Bazaar    |    10    |     9     |    10    |     10     |
+----------+----------+-----------+----------+------------+
|Git       |     9    |    10     |    5     |     9      |
+----------+----------+-----------+----------+------------+</pre>
<p>Bom tinhamos um vencedor, agora vamos fazer algumas pesquisas e comparativos para ver o que o<em> Povo acha</em>&#8230; e, <em><strong>Blames</strong></em><span style="color: #ff0000;">****</span> está cheio!<br />
bom na opinião geral e também por mim constatada, o Git é o Mais Rápido para a Maioria das operações, Seguido do Mercurial e por Último o Bazaar, mas a maioria desses artigos falam em 100000 arquivos de 10000 linhas cada um, e fazem um monte de testes com 10000 revisões etc&#8230; claro algo escrito basicamente em C seria obviamente mais rápido que algo escrito parcialmente em C e Python do que algo Totalmente em Python, mas nos meus testes de uso geral, a diferença de performance é praticamente irrisória, mesmo trabalhando com árvores grandes.<br />
Agora vamos ver quem utiliza cada uma destas ferramentas. Bem o Git foi contruído pelo Linus para manter o Kernel do Linux, e fora o Kernel temos outros projetos grandes utilizando. Já o Mercurial tem o pessoal da OpenJDK do Netbeans entre outros projetos Java<span style="color: #ff0000;">*****</span> . O Bazaar quem principalmente usa é a Canonical para manter grande parte do Ubuntu, li em algum lugar (quando eu lembrar posto no final do artigo) que vai utilizar só o Bazaar para manter o Ubuntu, afinal de contas a Canonical é a mantenedora do próprio Bazaar, além dela alguns outros projetos grandes como o MySQL também utilizam.</p>
<p>Outras ferramentas que podem ser citada são os hostings Free que cada uma das ferramentas possui.</p>
<p>O Mercurial tem o <strong><a href="http://freehg.org/">FreeHg</a></strong>, que não cheguei a testar mas parece-me que é totalmente gratuíto e deve ser destinado a projetos OpenSource.</p>
<p>O Git tem o <a href="http://gitorious.org/">Gitorious</a> e o mais recente <a href="http://github.com/">Github</a>, este último bastante utilizado por toda a comunidade <a href="http://www.rubyonrails.org">Ruby On Rails</a>, desde que o Próprio Rails foi hospedado lá, além de o próprio Github ser desenvolvido em Rails. <span style="text-decoration: line-through;">é uma Pena que o Github não tenha um gerenciamento de bugs (Bug Tracker) integrado a ele</span>, e a opção que foi adotada inclusive pelo Rails o <a href="http://lighthouseapp.com/">Lighthous</a><a href="http://lighthouseapp.com/">e</a>, eu particularmente não me agradei, sinceramente eu preferia o Trac ou o Próprio Redmine que também é Feito em Rails.<br />
o Bazaar tem o <a href="https://launchpad.net/">Launchpad</a>, que é totalmente gratuíto, destinado a projetos Opensource, possui um ótimo Issue Tracker integrado e mais um monte de coisas legais como os Blueprints e sistema para auxílio a internacionalização, é uma Excelente ferramenta, que na minha opinião melhor de todas aqui citadas, porém eu mesmo acho ele um pouco lento <em>às vezes</em> se comparado com o Github. Mas se formos levar em conta que o Github tem (no momento da escrita deste artigo) um limite de 100Mb por conta de usuário para projetos Pessoais/Públicos (Provavelmente isso deve poder ser negociado com o Pessoal do Github) Launchpad continua melhor, pois não possui limite, entretanto eu realmente gostaria que o pessoal da Canonical criasse a possibilidade de ter <strong><em>Contas Premium</em></strong> para projetos privados no Launchpad (que eu nunca vi mas pode até ser que exista, pois o launchpad em si não é OpenSource, embora partes dele sejam).</p>
<p><strong>Final da história</strong></p>
<p><em><strong>Meu escolhido foi o Bazaar</strong></em>. Se eu já utilizasse apenas Linux e não tivesse mais desenvolvedores para ter que botar na cabeça todos os comandos, talvez eu tivesse optado pelo Git, embora hoje em dia depois de utilizar os dois no dia a dia acho o Bazaar realmente melhor que o Git, além do mais o Bazaar vem evoluindo rapidamente inclusive no quesito da performance que <em>seria</em> o seu ponto mais fraco. Em todo caso <em>se as coisas um dia ficarem realmente lentas</em> eu sempre terei a opção de <em>migrar para o Git</em>.</p>
<p>Hoje em dia eu particularmente utilizo o Git com bastante frequência assim como o <a href="http://carlosantoniodasilva.wordpress.com/">Carlos</a>, e assim provavelmente vamos continuar fazendo, quando se tratar de algo relacionado ao Ruby On Rails, em contrapartida nossos projetos da Empresa e pessoais, além de outros tipos de controle de versão de documentos e arquivos binários eu vou continuar utilizando o Bazaar.</p>
<p>Em breve estarei postando um how to, bastante <strong><em>sem criatividade</em></strong> pois pretendo refazer o <a href="http://www.akitaonrails.com/2008/4/3/micro-tutorial-de-git">artigo do Akita</a> utilizando o Bazaar para exemplificar o uso, semelhanças e diferenças, além de mostrar que é possível trabalhar com o Bazaar em um modelo bastante aproximado, senão idêntico ao Git.</p>
<p><strong><em>Todos os testes foram realizados em aproximadamente umas 3 semanas, não foram apenas testes de 5 minutos em cada opção de ferramenta.</em></strong></p>
<p><strong><em><span style="color: #0000ff;">Tudo que eu escrevi aqui está diretamente relacionado ao meu cenário de trabalho e experiências, provavelmente para outros cenários e pontos de vista uma das outras ferramentas citadas ou mesmo não citadas se encaixam melhor.</span><br />
</em></strong></p>
<p><span style="color: #ff0000;">*</span> Veja mais sobre controle de versão distribuído <a href="http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/">neste link</a> (Em Inglês) e não deixe de assistir o vídeo.<span style="color: #ff0000;"><br />
**</span> Os pacotes em Python são chamados de Eggs, seriam equivalentes aos Gems do Ruby ou mesmo aos pacotes Deb ou RPM do linux.<br />
<span style="color: #ff0000;">***</span> O Ambiente Windows não é preparado para desenvolvedores<br />
<span style="color: #ff0000;">****</span> Conversa sem sentido onde dois ou mais grupos que não tem o que fazer, discutem incansávelmente para provar que sua ferramenta é melhor que a do outro<br />
<span style="color: #ff0000;">*****</span> Grande Ironia, Um dos maiores causadores de Blames que eu já vi foram comparativos entre Java e Python, e os Javeiros Inteligentes passam a usar uma ferramenta em Python&#8230; já os outros&#8230;. devem estar chorando.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.siverti.com.br/2008/11/14/git-bazaar-ou-mercurial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
