Je suis à la recherche d’un outil permettant de migrer quelques référentiels SVN vers Mercurial, avec l’historique, les étiquettes, etc.
J’utilise TortoiseHg (Windows x32), donc ConvertExtensions est ignoré. Il y a quelques informations sur la façon de faire ce processus sur une machine Linux ( hgsvn ), mais je n’ai pas de machine Linux disponible.
Puis-je utiliser ces scripts Python sous Windows? Si oui, de quoi ai-je besoin pour le faire? Ou, quels autres outils puis-je utiliser pour effectuer ce processus?
En gros, comment convertir un projet SVN en Mercurial?
Je devais simplement aborder ce problème moi-même. J’ai une machine Windows XP avec un serveur Windows distinct hébergeant VisualSVN Server .
J’ai également installé TortoiseHG ainsi que le client de ligne de commande CollabNet Subversion .
Merci beaucoup à bgever d’ avoir souligné dans les commentaires qu’avec TortoiseHg 2.0, activer l’extension de conversion est plus facile que jamais. Comme il dit
Avec TortoiseHG 2.0, cela est devenu beaucoup plus simple: démarrez le TortoiseHG Workbench à partir du menu Démarrer. Sélectionnez Fichier -> Paramètres. Sélectionnez Extensions dans la liste. Cochez la case “convertir” et cliquez sur OK. C’est tout! Pas besoin d’essayer de générer le fichier de configuration et de le rechercher dans le système de fichiers. – bgever 11 mars à 7h56
Pour convertir un référentiel de SVN en HG, j’ai suivi ces étapes:
1) Ouvrez C: \ Program Files \ TortoiseHg \ Mercurial.ini
MODIFIER
FYI – Tortoise Hg a migré ce fichier vers
Ce fichier sera généralement vide et vous ne listerez que ce que vous souhaitez remplacer. Si c’est ce que vous avez, ajoutez simplement ces deux lignes à la toute fin du fichier:
[extensions] convert =
2) Recherchez la ligne qui commence par
[extensions]
3) En dessous, vous verrez une liste de mots-clés, commentés avec un point-virgule (;) sur chaque ligne
4) Trouvez la ligne qui dit
convertir =
et supprimer le point-virgule pour qu’il lit
convertir =
5) Ouvrez l’invite de commande et accédez au répertoire dans lequel vous souhaitez créer le nouveau dossier hg (le processus créera un nouveau dossier appelé yoursvnreponame-hg dans le répertoire auquel l’invite de commande est ouverte).
6) Utilisez cette commande
hg convertir le fichier: /// y: / yoursvnreponame
J’ai trouvé que l’outil de conversion pouvait avoir des problèmes avec les référentiels en réseau, donc j’ai dû trouver un lecteur, mais cela fonctionnait très bien pour moi.
Mercurial dispose d’une extension de conversion intégrée pour cela .
Pour convertir un Repo SVN en un Repo HG ET le copier sur un autre serveur, vous aurez besoin de quelques choses.
convert
à Tortoise. Démarrez le TortoiseHG Workbench à partir du menu Démarrer. Sélectionnez File -> Settings
. Sélectionnez Extensions
dans la liste. Cochez la case convert
et cliquez sur OK. D’abord la conversion…
\\server\folder
Ne \\server\folder
pas le dossier SVN Repo lui-même. Mappez le dossier juste au-dessus) Donnez une lettre au lecteur mappé, comme Y:\
CD /DY:\
Y:\
, tapez: hg convert y:/RepoName
(utilisez le nom du hg convert y:/RepoName
actuel) Faites attention aux barres obliques avant et arrière. Celui de la commande est une barre oblique. De plus, si le nom comporte des espaces, insérez le nom dans des citations. (c.-à-d. Y:/"My Repo folder"
) Deuxièmement le clonage…
File -> Clone Repository
Personne ne mentionne toujours pas hgsubversion ( Extension Wiki ), qui peut le faire sans presque aucun mal de tête (à l’exception des cas rares et des arbres spécifiques).
Ajoutez simplement une extension, activez-la et hg clone SVN_REPO
sur le repo mercurial local
Ceci est dans la FAQ TortoiseHg :
Comment convertir un référentiel de subversion en Mercurial?
Vous devez installer les outils de ligne de commande svn-win32-1.4.6, puis les append à votre chemin. Ensuite, vous devez activer l’extension de conversion. À ce stade, vous devriez pouvoir utiliser la commande ‘
hg convert
‘ pour effectuer la conversion. Veuillez adresser les problèmes / questions concernant l’extension de conversion à la liste de diffusion Mercurial ou à#mercurial
surirc.freenode.net
.
Donc c’est apparemment possible – j’utilise Linux donc je n’ai pas essayé moi-même.
Je viens de convertir un repo SVN distant avec HTTP en un repo Mercurial, et laissez-moi vous dire, il n’y a pas beaucoup de documentation sur la façon de le faire. J’ai dû télécharger la source Mercurial et l’installer de manière autonome, en utilisant le paquet source, de sorte que les liaisons SVN fonctionnent correctement.
Je l’ai installé comme:
python setup.py install
Ce qui a bien fonctionné sur ma boîte Server 2003. Je peux maintenant convertir un repo SVN correctement, en faisant quelque chose comme ceci:
python c:\python26\scripts\hg convert
La documentation de ConvertExtension sur le site Mercurial n’est pas très claire, mais elle dit ceci:
Il n’y a aucun moyen d’installer les liaisons Subversion dans la bibliothèque Python intégrée à [Mercurial]. Vous devrez donc utiliser un Mercurial installé sur un Python autonome.
Alors maintenant, je viens d’utiliser la version autonome pour la conversion et TortoiseHg pour le travail sur VCS.
Mieux vaut tard que jamais …
Deux réponses pour le prix d’une …
Si c’est un repository public open-source, vous pouvez simplement utiliser http://svn2github.com/add/, ce qui prend environ une demi-heure pour cloner ce repository dans GitHib, puis le transférer dans Hg.
L’avantage d’utiliser hg convert
est qu’il peut être repris. La conversion de SVN en Hg peut prendre des jours . Si vous arrêtez cela, il reprendra d’où il s’est arrêté.
Vous trouverez ci-dessous un fichier de commandes que j’ai écrit parce que les déchets de Codeplex SVNbridge. Le repository dans cet exemple a pris quelques jours pour récupérer l’historique complet (je suis en Australie, donc la latence peut avoir été un facteur). J’aimerais penser que cela a donné un bon coup à un serveur TFS.
Ce fichier de commandes peut être exécuté à tout moment pour extraire les mises à jour de la source SVN si elles sont les seules qui restnt encore sur Terre en utilisant SVN. Je ne l’ai pas testé, alors voyez ce qui se passe si vous faites cela. Si j’étais vous, j’abandonnerais la twig d’origine si vous voulez éditer le repository.
Le robocopy shamap
est de conserver l’historique SVN si vous clonez le référentiel Hg, shamap est éphémère – vérifiez le fichier batch & shamap dans (je ferais cela sur une nouvelle twig).
le lot …
@echo off mode con:cols=100 lines=800 :: Change the SVN remote name here :: set remote=https://cinch.svn.codeplex.com/svn :: title Fetching SVN from %remote%. This could take...DAYS echo . echo Fetching SVN checkins from %remote% echo . echo Dependencies: Tortoise Hg and hg.exe in the Path would be ideal. echo using hg convert echo . echo First, I will make a backup of shamap in the hg repo folder. echo If shamap in .hg\ is newer then it will be copied to the repo. echo You should commit it so hg clones of this repo work with this. echo Commit this .BeeyATch file as well. echo shamap keeps track of what has been fetched from SVN. echo ok, that ends the educational part of this script... echo Now I will fetch SVN changes from echo %remote% echo ... echo ...(this could take quite some time)... echo ...DAYS...yes...DAYS echo ...especially if it's fecking Codeplex SVN... echo . echo If this craps out just run it again - it will resume from where it left off. echo and fetch the rest...eventually echo . echo Control C to abort or any other key to start: echo . pause echo . :: http://mercurial.selenic.com/wiki/ConvertExtension <== see for details of shamap :: copy the shamap from the original convert into the .hg folder unless it is already there & newer :: don't panic if shamap is much bigger than the original - diff it to see why robocopy .\ .\.hg\ shamap /XO robocopy .\.hg\ .\ shamap /XO echo . hg convert --verbose --debug %remote% "%CD%" echo . echo . echo Finished fetching from %remote% title Finished fetching from %remote% echo Any key to Exit echo . pause exit
En utilisant l’ extension convert
de Mercurial:
convert=
à la section [extensions]
de .hgrc comme ceci:[extensions]
convertir =
sudo apt-get install python-subversion
hg convert
hg convert -h
pour obtenir de l’aide hg convert http://[svnserver]/[Project] --source-type svn [DestinationDir]
hg push https://[mercurialserver]/[Project]
note : vous pouvez même répéter la commande hg convert pour inclure les nouvelles modifications apscopes dans le référentiel svn après la conversion précédente.