Domanda Converti un Mercurial Repository in Git


Ho già provato hg2git attraverso l'esportazione rapida e ho già provato hg-git.

Entrambi senza successo. hg2git in realtà ha funzionato, ma ho dovuto chiedere ad un amico che esegue una macchina Unix per farlo. E questo ha incasinato tutti i linefeed in tutti i file.

hg-git ha semplicemente fallito con qualche errore di compressione di libzip.

Qualcuno ha avuto successo nel convertire un repository hg in git su Windows?

Per essere chiari, non mi interessa l'interoperabilità. Voglio portare l'intero repo da hg a git, portando con me la storia. Non ho bisogno di spingere i cambiamenti avanti e indietro - converti solo una volta.

Grazie in anticipo!


44
2017-09-07 12:55


origine


risposte:


Ha fatto quanto segue sul mio Mac per esportare con successo un repository Mercurial su Git (con filiali complete):

mkdir myrepo; cd myrepo;
git clone git://repo.or.cz/fast-export.git .
rm -rf .git .gitignore
git init
./hg-fast-export.sh -r ../path/to/local/hg/repo
git clean -f # remove fast-export files

57
2017-08-02 19:44



Windows 7 Soluzione a 64 bit

Come convertire un repository Mercurial in un repository Git.

Questa è una delle sequenze più asinine di eventi che abbia mai dovuto capire, ma non sono affatto un ragazzo di Python.

Il mio ambiente di inizio

  • Visual Studio 2010/2012
  • TortoiseHg 2.8.2; Include Mercurial 2.6.3 e Python 2.7.3
  • Git 1.8.3

Errori che ho avuto lungo la strada

  • Impossibile trovare Python
  • Impossibile trovare il modulo Mercurial in Python
  • Easy_Install non esiste
  • Impossibile compilare il modulo Mercurial

Cosa ho fatto

  • Ho dovuto installare Python27 stand alone (http://www.python.org/)
  • Assicurati di inserire il percorso in Path in Variabili d'ambiente
  • Ho dovuto installare Easy_Install (http://sourceforge.net/projects/pywin32/files/)
  • Assicurati che il percorso degli script Python sia anche in Variabili d'ambiente
  • E ottenere questo ... Doveva andare a MSDN e scaricare la versione completa di Visual Studio 2008 e installare solo C ++ con l'opzione a 64 bit attivata (così Easy_Install poteva compilare il modulo Mercurial per Python), ma non riuscivo a farlo funziona con l'edizione Express perché non è stato possibile trovare l'opzione a 64 bit.

passi

  • In Command Console (dopo aver installato tutto)
    • C: \ easy_install mercurial

(Se hai installato tutto ciò che dovresti vedere, scarica e compila il modulo Mercurial)

  • In Git Console
    • Segui i passaggi di @ mauvis-ledford e @benno (Grazie ragazzi !!!)

13
2017-08-05 20:57



Ecco un semplice esempio di come esportare il clone locale di un repository Mercurial su GitHub.

Innanzitutto, aggiungi il hggit estensione al tuo ~/.hgrc file se non lo hai già fatto:

[extensions]
hggit =

Quindi esegui i seguenti comandi dalla radice del tuo repository Mercurial:

hg bookmark -r default master
hg push -f git+ssh://git@github.com/bolinfest/plovr.git

Personalmente, ho dovuto specificare -f durante la corsa hg push, anche se sospetto che sia perché ho avuto alcuni rami complicati nel mio repository Mercurial. Potrebbe non essere necessario per la tua migrazione.

Assicurati di avere il git+ssh: URI al tuo repository GitHub piuttosto che al git: URI. (Il git+ssh: L'URI è un po 'più difficile da trovare nella nuova interfaccia utente di GitHub.)

A seconda delle dimensioni del repository, in esecuzione hg push potrebbe richiedere un po ', quindi sii paziente. Quando hai finito, dovresti essere in grado di vedere il tuo progetto su GitHub. In questo esempio, il mio progetto era disponibile all'indirizzo https://github.com/bolinfest/plovr.

Come ci si aspetterebbe, ora chiunque può clonare il repository pubblico di GitHub come segue:

git clone git@github.com:bolinfest/plovr.git

8
2017-07-02 15:33



Ecco tutti i pezzi messi insieme per una migrazione su Windows.

Prerequisiti

  • Idiota
  • Mercurial o TortoiseHg
  • Python 2.7 (3.x non funzionerà)

Durante l'installazione, consentire il collegamento ai file .sh.
Assicurarsi che tutti gli strumenti siano disponibili nella variabile di ambiente PATH.

Migrazione

  1. Apri cmd.exe
  2. mkdir c:\git_work
  3. cd c:\git_work
  4. git clone http://repo.or.cz/r/fast-export.git
    Questo crea una cartella: c: \ git_work \ fast-export \
  5. Ora hai bisogno di librerie mercuriali per Python. O prendili da loro Qui  o fare i seguenti passi.
    Modifica c: \ git_work \ fast-export \ hg-fast-export.py:

    import sys # move this line up here
    # Add a new line that imports [mercurial libraries][2] from this zip:
    sys.path.append(r'C:\Program Files\TortoiseHg\library.zip')
    # ...above the old line:
    from mercurial import node
    
  6. mkdir MyNewGitRepo

  7. Copia il contenuto di fast-export in MyNewGitRepo, ignora .git *
  8. hg-fast-import.sh -r c:\Path\To\MyOldHgRepo 
  9. Se questo non riesce con "Errore: repository ha almeno un capo senza nome ..." chiama l'ultima riga con parametro: --force
  10. Rimuovere gli script di migrazione:

    git clean -n # see what would happen
    git clean -f # delete migration files
    
  11. Ripristina i file mancanti resettando l'indice e l'albero di lavoro.

    git reset --hard
    

7
2018-06-12 08:05



Ad oggi, git distribution include uno strumento per convertire i repository mercurial in git, hg-to-git. Se hai installato una versione git recente, è lì. Ha funzionato molto bene per me.


6
2017-07-13 12:55



Se ti capita di usare GitHub e il tuo repository Mercurial è disponibile tramite HTTP / HTTPS ...

Durante l'utilizzo di fast-import (un ottimo strumento, che ha convertito il mio repository senza problemi) e spingendo il mio nuovo repository git dalla mia casella di sviluppo a GitHub, ho notato un'opzione per "Importare il codice da un altro repository" durante l'installazione rapida "Porzione del mio repo su GitHub.

L'ho provato e ho raggiunto gli stessi risultati con l'importazione rapida. L'utilizzo dell'opzione di importazione GitHub si è rivelata un po 'più facile nel mio caso dell'importazione rapida (di nuovo, nulla contro quello strumento, e no, non lavoro per GitHub). I passaggi che hanno funzionato per me sono stati:

  1. Crea un nuovo repository GitHub
  2. Scegli l'opzione "Importa codice" in Quick Setup una volta creato il repository
  3. Inserisci l'URL di un repository hg, svn o tfs pubblicamente disponibile e premi "Inizia importazione" nella finestra di dialogo "Github Importer"

5
2017-12-19 21:05



Se stai solo cercando di farlo, una volta che puoi usarlo hg export come questo:

hg export 0:tip -o all-changesets-in-one.patch

o se Git preferisce solo una patch per file, puoi crearne una per ogni changeset come questo:

hg export 0:tip -o changeset-%r.patch

presumibilmente git apply può prendere uno o l'altro di questi formati.


3
2017-09-09 02:00