Convertendo a pasta Mercurial em um repositório Git

137

Eu não tenho uma grande experiência com o Mercurial, sou principalmente um cara do Git.

Gostaria de espelhar uma pasta / arquivo Mercurial específico em um repositório git. Na verdade, estou tentando exportar o histórico de um arquivo de um repositório Mercurial para o Git e poder manter isso sincronizado com confirmações futuras.

Você tem alguma sugestão de como proceder? Acredito que o caminho a seguir deve ser o histórico do patch do Mercurial, exportar periodicamente cada commit único como um patch e aplicar os patches do Mercurial ao repositório Git.

Simone Carletti
fonte
Atualmente, o GitHub.com irá importá-lo para você .
Brad Turek

Respostas:

125

No Linux ou qualquer coisa com bash/shou similar, ou pythontente com exportação rápida :

cd
git clone git://repo.or.cz/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD
Yohann
fonte
1
Ok, você quer manter o git sincronizado com o mercurial? Gosta disso ?
Yohann 23/05
1
Observe que '/ path / to / old / mercurial_repo' deve ser um caminho no sistema de arquivos (não uma URL), portanto, você deve clonar o repositório original antes.
mar10 27/12/13
1
No meu caso tinha que usar PYTHON=python2 ~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo. Além disso, funcionou perfeitamente.
Artur Czajka
5
Obrigado pela resposta concisa! Eu tive que sudo easy_install mercurialprimeiro. Seria bom ter nas instruções
Marcus Westin
3
Se você estiver em uma máquina Windows uso a festa Git e executar hg-fast-export.sh
Augustas
61

Windows: Extensão TortoiseHG Hg-Git

O Hg-Git pode ser usado para converter um repositório do Mercurial em Git. Você pode usar um repositório local ou um repositório remoto acessado via SSH, HTTP ou HTTPS.

Exemplo de conversão de repositórios locais.

  1. Instale o Hg-Git.

    • No Windows, o TortoiseHg vem com o Hg-Git, mas você precisa habilitá-lo através da ferramenta de configuração (na seção de extensões)

      Configurações do TortoiseHg

      ou manualmente ~/mercurial.ini

      [extensions]
      hggit =
      
  2. Use os seguintes comandos para converter o repositório:

    $ mkdir git-repo; cd git-repo; git init; cd ..
    $ cd hg-repo
    $ hg bookmarks hg
    $ hg push ../git-repo
    

O hgmarcador é necessário para evitar problemas, caso contrário, o hg-git envia para o ramo atualmente com check-out, confundindo o Git. Isso criará um ramo nomeado hgno repositório Git. Para obter as alterações no mestre, use os seguintes comandos (necessários apenas na primeira execução, depois apenas usegit merge ou rebase):

$ cd git-repo
$ git checkout -b master hg
naXa
fonte
Eu achei o git-hg bastante complicado, mas funcionou como um encanto e não exigiu nenhum download adicional, o que é bom.
Timmmm 22/10/2015
2
Eu queria uma pasta, não o repositório inteiro.
Simone Carletti
Agora o github tem uma ferramenta que suporta isso diretamente no github, veja stackoverflow.com/questions/16037787/…
Tommy
@SimoneCarletti Dê uma olhada nesta pergunta . Deve ajudá-lo a exportar um arquivo / pasta e seu histórico em um repositório temporário. Em seguida, você pode usar qualquer uma das soluções fornecidas para converter o repositório Mercurial temporário em Git.
NaXa
13

Você pode (do lado Mercurial):

  • usando a extensão Convert com --filemapopção converter parte do repositório original em menor com apenas diretórios de arquivos necessários
  • com extensão hg-git push repo despojado para Git

ou (em vez de hg-git), usando a ponte Mercurial no Git , clone | repositório pull do Git

Lazy Badger
fonte
11

Gitify

Parece ser uma alternativa mais moderna e fácil de usar para realizar a conversão https://github.com/buchuki/gitifyhg

pip install gitifyhg
git clone gitifyhg::<hgrepoaddress>
# done, you have a git repo with the entire history of the hg one
sorin
fonte
1
Eu não queria converter um repositório inteiro, apenas uma pasta.
Simone Carletti
1
Impressionante! Cuidado com o erro unicode, embora github.com/buchuki/gitifyhg/pull/98 #
Andrei
3
Nota - o gitifyhg está atualmente desatualizado com as últimas versões do Mercurial.
Zoran Pavlovic
4

Converter um repositório Mercurial para Git no Windows 10

Se não houver problema com a codificação - use a extensão TortoiseHG Hg-Git

md new-repo && cd new-repo
git init --bare .git
cd ..\old-mercurial-repo
hg bookmark -r default master
hg push ..\new-repo
cd ..\new-repo
git config --bool core.bare false

Se algo de errado com a codificação - use exportação rápida

Instalar o Bash

Abra o PowerShell como administrador e execute:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Instale o Ubuntu 16.04 LTS da Microsoft Store

Abra o Bash e execute

instalar mercurial

sudo -s
apt-get update
apt install mercurial

obtenha a exportação rápida v180317 (no momento as versões após 180317 não funcionam corretamente)

cd /mnt/c/path_to_work_folder
git clone https://github.com/frej/fast-export.git
cd fast-export
git checkout tags/v180317
cd ..

converter repositório

git init new-repo && cd new-repo
git config core.ignoreCase false && git config core.quotepath off
../fast-export/hg-fast-export.sh -r ../path_to_mercurial_repo/ --fe cp1251
git checkout master

opções de codificação:

  • -f codificação, como -f cp1251
  • --fe codificação de nome de arquivo como --fe cp1251
Sandre
fonte
3

hg-git-fast-import

https://github.com/kilork/hg-git-fast-import

Outro utilitário com os seguintes recursos:

  1. Importação de repositórios únicos e múltiplos do Mercurial para o repositório Git.
  2. Importação de novas revisões de repositórios Mercurial importados anteriormente para o repositório Git.
  3. Tag.
  4. Ramos fechados.
  5. Verificação do resultado final com diff.

Você pode baixar o binário para sua plataforma e colocar em algum lugar no caminho ou instalar com cargo(requer rusta instalação ):

cargo install hg-git-fast-import

Então o uso é assim:

hg-git-fast-import single /path/to/source_hg /path/to/target_git

Não precisa Pythone Mercurialdeve ser instalado. A configuração avançada permite substituir autores ou ramificações, tornar as ramificações prefixadas e muito mais.

Alexander Korolev
fonte
2

Se você estiver usando o github.com , eles parecem ter um recurso de importação que permite digitar o URL do seu projeto hg.

Primeiro, crie um novo repositório e, em seguida, na página de destino do novo repositório, role para baixo e clique no botão "Importar código" .

contexto para o botão de código de importação

Em seguida, digite o URL do seu repositório anterior e clique em "Iniciar importação".

contexto para o botão "Iniciar importação"

Então o GitHub cuida do resto!

Github cuidando dos negócios para você

Observe que o GitHub solicitará suas credenciais para o repositório antigo, se necessário.

Ooh! Eu encontrei o guia oficial

Brad Turek
fonte
0

No Windows pode ser um pouco complicado. Depois de ativar os plugins corretos no mercurial ( hggit), o TortoiseHG também pode ser usado.

  1. Clone repo mercurial
  2. Replicar clone do git
  3. Ativar console: Ativando console
  4. Usando o console:

    % hg bookmarks hg

    % hg push <relative path to>/<git-repo>

Ivasan
fonte
0

Talvez ajude alguém hoje (ao converter um repositório mercurial em git, mantendo o histórico). Testado para funcionar com o mercurial 4.0.1.

~$ git clone https://*old_hg_repo*
~$ git clone https://github.com/frej/fast-export.git
~$ cd fast-export
~$ git checkout tags/v180317
~$ cd ..
~$ mkdir new_git_repo
~$ cd new_git_repo
~$ git init
~$ .../fast-export/hg-fast-export.sh -r ../old_hg_repo/ --force
~$ git checkout HEAD

E, finalmente, forçar seu repo local recém-convertido.

~$ git push REMOTE '*:*'
slk
fonte