Convertire repository Subversion a Mercurial
Domanda
Sto cercando di convertire un repository SVN per Mercurial, ma sto avendo alcuni problemi. Questi sono i passi che ho preso: (io sono su Windows)
Acceso "convertito" nelle estensioni
Ha aperto una finestra di comando e digitato:
hg convert http://myversioncontrorepositoryhere
Si dice che è inizializzare la cartella di destinazione e poi chiede:
Enter username for Administration at http://myversioncontrorepositoryhere:
digitare il mio nome utente quindi
in Administration at http://myversioncontrorepositoryhere:
Suppongo che questo è la password, ma semplicemente torna indietro al
Enter username for Administration at http://myversioncontrorepositoryhere:
Che cosa sto facendo di sbagliato? Sono molto sicuro che sto digitando il mio nome utente e la password in modo corretto.
Soluzione
Non so che cosa può andare male, ma mi piacerebbe suggerire una soluzione alternativa (che è l'unico modo che ho usato personalmente per questo compito!): In primo luogo svnsync il progetto svn per fare un mirror locale, quindi hg convert
quello specchio locale - questo è ciò che O'Sullivan suggerisce in suo libro (questo URL ha, come "campione dal libro", esattamente l'appendice rilevante per l'importazione di progetti da altri VCS a hg - con particolare attenzione alle svn), anche se il suo suggerimento è in gran parte ispirata da considerazioni di velocità ho il sospetto che in seguito ha anche salvato mi autenticazione e autorizzazione fastidi, e spero che potrebbe fare lo stesso per voi -!)
Altri suggerimenti
hgsubversion invece; è molto più robusto. Ho avuto un sacco di problemi bizzarri che interagiscono con CLI di Subversion su Windows (per lo più risolti utilizzando CMD al posto di un'altra shell).
Ho avuto la fortuna che fissa il problema di autenticazione con la semplice conversione da un checkout locale:
svn co http://myversioncontrorepositoryhere localrepo
hg convert localrepo
Nella mia conversione esperienza di un repository Subversion reale parola con il mazzo di progetti e anni di storia è un po 'più coinvolto. Soprattutto perché in Subversion è bene avere un enorme pronti contro termine per tutte le cose. Sui repository Mercurial contrari sono invitati a essere molto più a grana fine.
Suppongo che il seguente schema repository Subversion:
├── project1
│ ├── branches
│ ├── tags
│ └── trunk
│ ├── package1
│ └── package2
└── project2
La conversione dovrebbe diventare package1
e package2
in repository Mercurial separati con la propria storia. In questa risposta mi interessa unico percorso, ma la conversione di tag e rami è anche possibile .
Preparazione
Di solito faccio la conversione su un server remoto con connessione veloce. Per Debian-famiglia sono necessari i seguenti pacchetti.
apt-get install mercurial subversion python-subversion
Poi Converti estensione dovrebbe essere attivato.
echo -e "[extensions]\nhgext.convert=" >> ~/.hgrc
In Windows assicurati di aver adempiuto i prerequisiti .
Esecuzione
Si noti che se si tenta di fare una conversione direttamente da una sovversione remota Repo probabilmente ci vorranno ore, in modo che il seguente crea specchio del percorso del progetto. Poi ogni conversione è una questione di secondi a minuti.
cd /tmp
svnadmin create svn-mirror
# on Windows you may need to look at comments to accepted answer
echo '#!/bin/sh' > svn-mirror/hooks/pre-revprop-change
chmod +x svn-mirror/hooks/pre-revprop-change
svnsync init file:///tmp/svn-mirror svn://subversion.repo/project1
svnsync sync file:///tmp/svn-mirror
echo 'include project1/trunk/package1' > package1-map
echo 'rename project1/trunk/package1 .' >> package1-map
hg convert --filemap=package1-map svn-mirror package1
echo 'include project1/trunk/package2' > package2-map
echo 'rename project1/trunk/package2 .' >> package2-map
hg convert --filemap=package2-map svn-mirror package2
Poi dentro directory del pacchetto è possibile eseguire hg serve -p 8080
e clone dalla http://your.host:8080
con un cliente mercuriale o manager repo come RhodeCode.