web-dev-qa-db-fra.com

Comment migrer/convertir de SVN en Mercurial (hg) sur Windows

Je suis à la recherche d'un outil pour migrer quelques référentiels SVN vers Mercurial, avec historique, libellés, 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? Ou, quels autres outils puis-je utiliser pour effectuer ce processus?

Fondamentalement, comment puis-je convertir un projet SVN en Mercurial?

120
David Lay

Je devais juste m'attaquer à ce problè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 en ligne de commande CollabNet Subversion .

<Enable Convert Extension w/ Tortoise Hg 2>

Un grand merci à bgever _ pour avoir signalé dans les commentaires que TortoiseHg 2.0, rendre l'extension de conversion plus facile que jamais Comme il dit

Avec TortoiseHG 2.0, cela a été fait beaucoup plus simple: Démarrer le TortoiseHG Workbench dans le menu Démarrer. Sélectionner Fichier -> Paramètres. Sélectionnez Extensions de la liste. Cochez la case 'convertir' case à cocher et cliquez sur OK. C'est tout! Non besoin d'essayer de générer la config fichier plus et le rechercher dans le fichier système. - bgever 11 mars à 7:56

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

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 

  • XP ou plus ancien - C:\Documents and Settings\USERNAME\Mercurial.ini
  • Vista ou version ultérieure - C:\Utilisateurs\NOMUTILISATEUR\Mercurial.ini

Ce fichier sera en grande partie vide et vous ne listerez que ce que vous souhaitez y remplacer. Si c'est ce que vous avez, ajoutez simplement ces deux lignes à la toute fin du fichier:

[extensions]
convert =

2) Recherchez la ligne commençant par 

[extensions]

3) Au-dessous, vous verrez une liste de mots-clés, commentés avec un point-virgule (;) sur chaque ligne.

4) Trouvez la ligne qui dit 

; convert =

et supprimez le point-virgule de sorte qu'il se lit 

convertir =

</Enable Convert Extension Manually>

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 dans lequel l'invite de commande est ouverte).

6) Utilisez cette commande

hg convert file: /// y:/yoursvnreponame

J'ai constaté que l'outil de conversion pouvait avoir des problèmes avec les référentiels en réseau, j'ai donc dû mapper un lecteur sur celui-ci, mais cela a très bien fonctionné pour moi.

92
Michael La Voie
  1. serveur svn de démarrage sur localhost
  2. hg convertir svn: // localhost/your_repo
  3. done, parce que svn bindings n'était nécessaire que pour le protocole file: //
8
evilbloodydemon

Mercurial a une extension de conversion intégrée pour cela .

7
Chad Birch

Pour convertir un référentiel SVN en référentiel HG ET le copier sur un autre serveur, vous avez besoin de quelques éléments.

  1. TortoiseHG installé. (Vérifiez quelle version est actuellement utilisée)
  2. Python installé. (Vérifiez quelle version est actuellement utilisée)
  3. Les modules Python (vous pouvez les trouver http://pysvn.tigris.org/project_downloads.html )
  4. Vous devrez ajouter l'extension 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…

  1. Il est préférable de mapper le dossier contenant le référentiel SVN actuel sur l'ordinateur sur lequel vous travaillez. (i.e. \\server\folder Ne mappez pas le dossier SVN Repo lui-même. Mappez le dossier juste au-dessus de celui-ci) Donnez une lettre au lecteur mappé, telle que Y:\
  2. Ouvrez une invite de commande et tapez: CD /D Y:\
  3. À l'invite Y:\, tapez: hg convert y:/RepoName (utilisez le nom du référentiel actuel). Faites attention aux barres obliques. Celui de la commande est une barre oblique. De même, si le nom comporte des espaces, mettez-le entre guillemets. (i.e. Y:/"My Repo folder")
  4. Maintenant, il devrait être en cours d'exécution et créera un autre dossier à côté de l'ancien. Et un dossier hg devrait être à l'intérieur. IL NE SERA PAS INITIÉ, ET NE PAS INITIER! 
  5. La conversion est terminée.

Deuxième le clonage…

  1. Ouvrez TortoiseHG Workbench. Aller au File -> Clone Repository
  2. Source: Entrez le chemin complet du référentiel converti.
  3. Destination: entrez le chemin complet de l'emplacement où vous souhaitez que le référentiel soit cloné. Il n'est pas nécessaire de créer un dossier sur la nouvelle destination car le processus de clonage le créera et l'initialisera.
  4. Ajoutez les autorisations au nouveau dossier cloné.
  5. Vous avez terminé!!!
5
SueS

Personne ne mentionne toujours hgsubversion ( Extension Wiki ), qui peut le faire sans presque aucun mal de tête (sauf cas rares et arbre spécifique).

Il suffit d’ajouter une extension, de l’activer et de hg clone SVN_REPO au dépôt Mercurial local

3
Lazy Badger

Ceci est dans le TortoiseHg FAQ :

Comment convertir un référentiel Subversion en Mercurial?

Vous devez installer les outils de ligne de commande svn-win32-1.4.6, puis les ajouter à 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 sur irc.freenode.net.

Donc, apparemment, c'est possible - j'utilise Linux alors je ne me suis pas essayé.

1
Martin Geisler

Je viens de convertir un référentiel SVN distant avec une autorisation HTTP en un référentiel Mercurial, et laissez-moi vous dire qu'il n'y a pas beaucoup de documentation sur la façon de procéder. Je devais télécharger le source Mercurial et l’installer de manière autonome, à l’aide du paquet source, afin que les liaisons SVN fonctionnent correctement.

Je l'ai installé comme:

python setup.py install

Ce qui a très bien fonctionné sur ma machine Server 2003. Je peux maintenant convertir un dépôt SVN de la bonne manière, en procédant comme suit:

python c:\python26\scripts\hg convert <remote repo>

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 le Liens de subversion dans [Mercurial] intégré Bibliothèque Python. Donc, vous aurez besoin d'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 réel de VCS.

0
Alex Fort

Utilisation de l’extension convert de Mercurial:

  1. Activer l'extension de conversion; ajoutez convert= à la section [extensions] de .hgrc comme ceci:

    [extensions]
    convertir =

  2. Linux a besoin de liaisons python supplémentaires: Sudo apt-get install python-Subversion
  3. Exécutez la commande hg convert
    • Voir hg convert -h pour obtenir de l'aide
    • Exemple: hg convert http://[svnserver]/[Project] --source-type svn [DestinationDir] _ {(voir remarque 2)} _
  4. Diffusion vers le référentiel Mercurial nouvellement créé: hg Push https://[mercurialserver]/[Project]

note: vous pouvez même répéter la commande hg convert pour inclure les nouvelles modifications apportées au référentiel svn après la conversion précédente.

note 2: lorsque hg convert ne fonctionne pas avec http:// ou svn://, vous pouvez d'abord extraire le référentiel Subversion (ou en mettre à jour un existant) et effectuer une conversion à l'aide de l'extraction locale. exemple: hg convert [DirectoryOfLocalCheckout] --source-type svn [DestinationDir]

0
R. Oosterholt

mieux vaut tard que jamais ...

Deux réponses pour le prix d'une ...

  1. S'il s'agit d'un référentiel public à source ouverte, vous pouvez simplement utiliser http://svn2github.com/add/ qui a pris environ une demi-heure pour cloner ce référentiel sur GitHib, puis le transférer dans Hg.

  2. L’utilisation de hg convert présente l’avantage de pouvoir être reprise. La conversion de SVN en Hg peut prendre jours. Si vous arrêtez cela, il reprendra là où il s'était arrêté.

Ci-dessous, un fichier de commandes que j'ai écrit à cause des déchets de Codeplex SVNbridge. Le repo dans cet exemple a pris quelques jours pour aller chercher toute l'histoire (je suis en Australie, la latence peut donc 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 disponibles sur Terre utilisant encore SVN. Je ne l’ai pas testé, alors voyez ce qui se passera si vous le faites. Si j’étais vous-même, j’abandonnerais la branche originale si vous souhaitez modifier le référentiel.

Le code robocopy shamap consiste à conserver l'historique SVN si vous clonez le référentiel Hg, shamap est éphémère - vérifiez le fichier de commandes et shamap dans (je le ferais sur une nouvelle branche).

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
0
CAD bloke