Resolvi escrever esse post depois de começar a contribuir para o projeto do vimbook, que está no Google Code.

Como o Google Code só usa Subversion (infelizmente) e eu sou do mundo Git, resolvi usar a ferramenta Git para lidar com SVN, o git-svn! Com ele você pode clonar um repositório SVN e utilizar como Git, e na hora de “commitar” ele retransforma em SVN.

Já havia tentado usar Git-svn no meu projeto de plugin para wordpress, mas nesse caso eu já tinha um repositório Git e fui tentar mandar para um repositório SVN vazio, o que só me deu dor de cabeça, e no fim das contas acabei jogando para um repositório SVN qualquer só para mandar para o Wordpress. No fim das contas, depois desse problema com o Wordpress eu só tinha abominado o git-svn, mas agora eu estou começando a descobrir o seu valor.

Meus agradecimentos ao Carlan Calazans que me deu umas dicas de Git-svn quando eu comecei a tentar usar no projeto do plugin, que naquele momento não me fora de grande serventia, mas depois ajudaram bastante! ;)

Bem, agora chega de papo-furado e vamos a parte que interessa…Códigos e How To! :)

Primeiramente vamos baixar o código ( estou usando como exemplo o vimbook ):

git-svn clone https://vimbook.googlecode.com/svn/trunk/ vimbook --username seu.usuario.do.google

Ao digitar isso ele vai pedir uma senha que ele gera para a sua conta, e seus commits ficarão ligados a sua conta do Google. Para obter a sua senha é só acessar a página de settings do google code com a sua conta.

Após digitar a sua senha ele vai começar a receber todos os commits do SVN e converter para Git! O processo pode ser um pouco demorado, dependendo do tamanho do repositório SVN que você está importando.

Quando terminar você terá um repositório Git normal funcionando, e você pode trabalhar normalmente com ele, fazendo seus branchs e tudo mais! :D

Vamos ver como seria um fluxo simples para você fazer uma alteração usando branch e mandar de volta para o repositório:

git checkout -b new_changes

Branch criado! Faça as suas alterações…

Após as alteraçoes feitas faça os commits normalmente como se faz no Git e volte ao master para ver o que há de novo no repositório central:

git checkout master
git-svn rebase

Com isso ele vai receber as novas alterações do repositório!

Agora é a hora de fazer um merge do seu branch com a ultima versão do master:

git merge new_changes

Se tiver algum conflito resolva-os normalmente e agora é hora de enviar as suas alterações novamente ao Google Code:

git-svn dcommit

Pronto! Você está contribuindo para um projeto do Google Code utilizando Git. :D