sauloarruda.eti.br

…revirando até chegar do outro lado…

April 1st, 2010

Começamos um novo projeto na Agence esta semana e decidimos usar o Git na máquina de desenvolvedor e SVN como repositório central. A idéia é facilitar o desenvolvimento local usando branches para cada funcionalidade desenvolvida e enviar para o repositório central (SVN) ao término do seu trabalho. Temos também a vantagem de poder compartilhar repositórios locais como já comentado aqui.

Para que isso seja possível, você usará o comando git-svn, que já vem na instalação do git para MacOSX mas, não está no PATH do seu sistema. Para usá-lo você deve incluir o diretório /usr/local/git/libexec/git-core/ no PATH. Para fazer isso, coloque a linha abaixo no final do seu arquivo ~/.bash_profile:

export PATH=$PATH:/usr/local/git/libexec/git-core/

Se você usa linux, o apt-get (debians like) ou yum (red hat like) tem os pacotes para instalação.

Para começar, faça o clone do seu repositório do SVN usando o comando:

$ git-svn clone {endereço do repositório SVN}

Se seu repositório for autenticado ele vai pedir usuário e senha sem grandes complicações. Após isso, basta seguir a sequência básica de uso:

1. Crie um branch para trabalhar em sua funcionalidade:

$ git checkout -b {nome da sua funcionalidade/estória/caso de uso/ticket/etc...}

2. Escreva seu código e faça commit no seu repositório local (você pode fazer o commit várias vezes antes de terminar o trabalho, inclusive, recomendo que você faça isso):

$ git commit -am "sua mensagem do commit"

3. Quanto terminar o desenvolvimento (não esqueça de comitar), faça checkout no branch master:

$ git checkout master

4. Faça o merge do seu branch com o master (o parâmetro –squash transforma todos os commits do seu branch em apenas um commit, bem legal):

$ git merge --squash {nome da sua funcionalidade/estória/caso de uso/ticket/etc...}

5. Comite no branch master:

$ git commit -am "sua mensagem do commit"

6. Envie para o SVN:

$ git-svn dcommit

Para manter sua cópia de trabalho atualizada use o comando:

$ git-svn rebase

Não tive problemas até o momento com essa abordagem. Algumas pessoas questionaram o motivo de criar um branch para cada funcionalidade. Eu considero isso muito importante quando você volta e meia tem que fazer algum ajuste em outra coisa no sistema bem no meio do desenvolvimento. Com isso, basta você criar outro branch, fazer suas alterações e comitar no SVN, não influenciando no trabalho que você ainda está fazendo. Pra mim, no dia-a-dia essa é a maior vantagem do uso do git.

Este artigo foi inspirado/baseado nas referências abaixo:

March 2nd, 2010

Estou começando a usar Git de verdade em um projeto da Agence e já de início me deparei com uma situação que o SVN não atenderia. Estamos desenvolvendo uma prova de conceito e ainda não está pronto para enviar ao servidor central, porém, gostaria de compartilhar minha versão com outro desenvolvedor que seguirá uma linha diferente da minha.

Com o SVN, enviaria pra ele um .zip do meu projeto, mas como estamos usando um DCVS podemos fazer isso com os recursos do Git. Primeiramente, devo rodar um processo na minha máquina que permitirá outra pessoa dentro da mesma rede acessar meu repositório usando o protocolo git. Existem outras opções para compartilhar repositórios, veja aqui mais detalhes. Para iniciar o git-daemon usei o comando abaixo:

git daemon --verbose --export-all --enable=upload-pack --enable=receive-pack --base-path=/Users/sauloarruda/Projetos/Users/sauloarruda/Projetos/sauloarruda.eti.br/libres/libres-php/.git

E o outro desenvolvedor simplesmente usou o comando abaixo para clonar meu repositório. O legal nesse caso é que ele consegue pegar minhas atualizações com git pull, mas quando ele faz um commit as mudanças não são feitas no meu repositório.

git clone git://172.20.12.180/sauloarruda.eti.br/libres/libres-php/.git

Referências: