O Git ganhou a guerra do controle de versão distribuído, como bem foi dito no ALM Summit. Eu bem que gosto do Mercurial (hg), foi meu primeiro DVCS, mas não há o que fazer, o Git ganhou mesmo. E eu gosto de Git, até mais do que gosto do Mercurial, hoje em dia. Há uma pequena mudança de mindset, mas nada de mais.

Então é hora de migrar meus repos de hg, que estão no Bitbucket, que coitado, perdeu junto a guerra, para o Git, e consequentemente Github. Mas não queria remontar todos os projetos, queria só migrar. O Github não importa projetos de outros lugares. Como fazer?

Há uma extensão do hg chamada hg-git. Eu já tinha usado ela antes, e sabia que ela funcionava. Na prática, ela permite usar o hg com um repo git. Ou seja, eu poderia ter um repo local em hg, e um remoto em git. Perfeito!

Basta clonar um repo hg do Bitbucket e empurrar pro Github via hg-git, certo? Certo! Mas não tão simples. Esse guiazinho é pra te ajudar, caso você queira fazer o mesmo. Tem umas pegadinhas.

Primeiro porque pra instalar a extensão você tem que instalar o easy install que vem com o setup tools do Python, o que quer dizer que eu tinha que instalar o Python. Qual versão? Há duas, mas pelo visto com a última o setup tools não funciona (ou não menciona). Fui com a 2.7. 32 ou 64 bits? Já tive problemas com o Python 64, então fui com o 32. Instalado no Windows, local padrão, C:\Python27. O Easy Install instala fácil, next next finish.

Agora é só instalar o hg-git. Como diz na home page dele, basta rodar “easy_install hg-git”. Só que não. Onde está esse cara? Eles não te falam, mas ele estará em C:\Python27\Scripts. Rode a partir de lá, tem um .exe nesse diretório. Aí a instalação vai falhar, se você não tiver o Visual Studio 2008 instalado. Não serve o 2010 ou o 2012. Como assim? Em 2013? Ele reclama que não acha o vcvarsall.bat. Mas ele existe, está lá em C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC. Mas não serve, tem que ser o do 2008. Bora instalar o Visual Studio 2008 então, né? Não.

Descobri que ele procura o diretório de tools do 2008, que ficava na variável VS110COMNTOOLS. Basta então rodar no cmd:

set VS90COMNTOOLS=%VS110COMNTOOLS%

E aí sim, rode o easy install. Vai rodar e instalar direitinho. Mas não vai funcionar.

Crie o arquivo .hgrc na sua home (geralmente fica em c:\users\seunome). Coloque nele:

[extensions]
hgext.bookmarks =
hggit=C:\Python27\Lib\site-packages\hg_git-0.3.4-py2.7.egg\hggit

Confira se o diretório do hg-git está correto, algum número de versão pode ter mudado dependendo de quand você leu esse post.

Tudo ótimo, hg configurado, como usar? Basta clonar um repo hg, e então empurrar pro Github. Nem tente usar o git com https, porque não há como se autenticar. Vá ao git bash, que pode ser instalado via msysgit, ou via GitHub for Windows. Melhor o github for windows, já que nele você consegue se autenticar e ele cria uma chave ssh para sua máquina e já acrescenta ela na sua home\.ssh (se for via msysgit você tem que fazer isso manualmente). Lá você verá um arquivo chamado github_rsa. Copie e cole ele com o nome id_rsa, que é o padrão para autenticação via ssh. Agora você consegue se autenticar via ssh no github. Vá ao git bash e faça:

hg push git+ssh://<sua info do repo do github>

Por exemplo, esse é o do repositório AnimalQuiz, um exercício antigo feito em boo:

Migrando um repo hg pro github

E pronto, está copiado pro Github. Depois você pode apagar o diretório local, se quiser.

Estou movendo todos os meus repos do BitBucket pro Github. Não sei se apago ou se mantenho no Bitbucket ainda. Vou pensar.