Conversione della cartella Mercurial in un repository Git


137

Non ho una grande esperienza con Mercurial, sono principalmente un ragazzo Git.

Mi piacerebbe eseguire il mirroring di una specifica cartella / file Mercurial in un repository git. Quello che sto effettivamente cercando di fare è esportare la cronologia di un file da un repository Mercurial su Git ed essere in grado di mantenerlo sincronizzato con i commit futuri.

Hai qualche suggerimento su come procedere? Credo che la strada da percorrere dovrebbe essere quella di ottenere la cronologia della patch Mercurial, esportare periodicamente ogni singolo commit come patch e applicare le patch Mercurial al repository Git.


Oggi GitHub.com lo importerà per te .
Brad Turek,

Risposte:


125

Su Linux o qualsiasi altra cosa con bash/sho simile, oppure python, prova con l' esportazione veloce :

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

1
Ok, vuoi mantenere sincronizzato git con mercurial? Come questo ?
Yohann,

1
Notare che '/ path / to / old / mercurial_repo' deve essere un percorso sul file system (non un URL), quindi è necessario clonare il repository originale prima.
mar10,

1
Nel mio caso ho dovuto usare PYTHON=python2 ~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo. A parte questo, ha funzionato perfettamente.
Artur Czajka,

5
Grazie per la risposta concisa! sudo easy_install mercurialPrima dovevo . Sarebbe bello avere nelle istruzioni
Marcus Westin,

3
Se sei su una macchina Windows usa Git bash ed esegui hg-fast-export.sh
Augustas

61

Windows: estensione TortoiseHG Hg-Git

Hg-Git può essere usato per convertire un repository Mercurial in Git. È possibile utilizzare un repository locale o un repository remoto a cui si accede tramite SSH, HTTP o HTTPS.

Esempio di conversione di repository locali.

  1. Installa Hg-Git.

    • Su Windows, TortoiseHg viene fornito con Hg-Git, anche se è necessario abilitarlo tramite lo strumento di impostazione (nella sezione estensioni)

      Impostazioni TortoiseHg

      o manualmente dentro ~/mercurial.ini

      [extensions]
      hggit =
      
  2. Utilizzare i seguenti comandi per convertire il repository:

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

Il hgsegnalibro è necessario per evitare problemi, altrimenti hg-git spinge verso il ramo attualmente estratto confondendo Git. Questo creerà un ramo chiamato hgnel repository Git. Per ottenere le modifiche nel master, utilizzare i comandi seguenti (necessari solo nella prima esecuzione, successivamente utilizzare semplicemente git mergeo rebase):

$ cd git-repo
$ git checkout -b master hg

Ho trovato git-hg abbastanza difettoso, ma questo ha funzionato come un fascino e non ha richiesto alcun download aggiuntivo che è bello.
Timmmm,

2
Volevo una cartella, non l'intero repository.
Simone Carletti,

github ora ha uno strumento che lo supporta direttamente da github, vedi stackoverflow.com/questions/16037787/…
Tommy

@SimoneCarletti Dai un'occhiata a questa domanda . Dovrebbe aiutarti a esportare un file / cartella e la sua cronologia in un repository temporaneo. Quindi è possibile utilizzare una delle soluzioni fornite per convertire il repository Mercurial temporaneo in Git.
naXa,

13

Puoi (dal lato Mercurial):

  • usando Converti estensione con--filemap opzione converti parte del repository originale in dimensioni ridotte con solo i file | directory necessari
  • con estensione hg-git spingere repository spogliato su Git

o (invece di hg-git), usando Mercurial bridge in Git , clona | pull repository da Git


11

Gitify

Sembra un'alternativa più moderna e facile da usare per eseguire la conversione 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

1
Non volevo convertire un intero repository, solo una cartella.
Simone Carletti,

1
Eccezionale! Fai attenzione all'errore unicode sebbene github.com/buchuki/gitifyhg/pull/98
Andrei

3
Nota: gitifyhg non è attualmente aggiornato con le ultime versioni di Mercurial.
Zoran Pavlovic,

4

Converti un repository Mercurial in Git su Windows 10

Se nessun problema con la codifica, usa l'estensione Hg-Git di TortoiseHG

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 qualcosa non va con la codifica, usa l'esportazione veloce

Installa Bash

Apri PowerShell come amministratore ed esegui:

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

Installa Ubuntu 16.04 LTS da Microsoft Store

Apri Bash ed esegui

installare mercurial

sudo -s
apt-get update
apt install mercurial

ottenere l'esportazione veloce v180317 (al momento le versioni successive al 180317 non funzionano correttamente)

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

converti repository

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

opzioni di codifica:

  • -f codifica, come -f cp1251
  • --fe nome file codifica come --fe cp1251

3

hg-git-fast-import

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

Un'altra utility con le seguenti funzionalità:

  1. Importazione di repository Mercurial singoli e multipli nel repository Git.
  2. Importazione di nuove revisioni da repository Mercurial precedentemente importati nel repository Git.
  3. Tags.
  4. Rami chiusi.
  5. Verifica del risultato finale con diff.

Puoi scaricare binario per la tua piattaforma e metterlo da qualche parte nel percorso o installarlo cargo(richiede rustl' installazione ):

cargo install hg-git-fast-import

Quindi l'utilizzo è così:

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

Non ha bisogno Pythone Mercurialdeve essere installato. La configurazione avanzata consente di sostituire autori o rami, creare prefissi e altro ancora.


2

Se stai usando github.com , sembrano avere una funzione di importazione che ti consente semplicemente di digitare l'URL del tuo progetto hg.

Prima crea un nuovo repository e poi nella pagina di destinazione del nuovo repository scorri verso il basso e fai clic sul pulsante "Importa codice" .

contesto per il pulsante del codice di importazione

Quindi digitare l' URL del repository precedente e premere "Inizia importazione".

contesto per il pulsante "Inizia importazione"

Quindi GitHub si prende cura di tutto il resto!

Github si occupa degli affari per te

Nota che GitHub ti chiederà le tue credenziali per il vecchio repository se ne ha bisogno.

Ooh! Ho trovato la guida ufficiale


0

Su Windows può essere un po 'complicato. Dopo aver abilitato i plug-in corretti in mercurial ( hggit), è possibile utilizzare anche TortoiseHG.

  1. Clone repository mercuriale
  2. Clone git repo
  3. Abilita console: abilitazione console
  4. Utilizzando la console:

    % hg bookmarks hg

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


0

Forse aiuta qualcuno oggi (quando converte un repository mercurial in git, mantenendo la storia). Testato per funzionare con 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 infine per spingere il repository locale appena convertito.

~$ git push REMOTE '*:*'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.