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.

Giovanni Bassi

Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.