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?
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
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.
Mercurial a une extension de conversion intégrée pour cela .
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.
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 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:\
CD /D Y:\
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"
)Deuxième le clonage…
File -> Clone Repository
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
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
surirc.freenode.net
.
Donc, apparemment, c'est possible - j'utilise Linux alors je ne me suis pas essayé.
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.
Utilisation de 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'aidehg convert http://[svnserver]/[Project] --source-type svn [DestinationDir]
_ {(voir remarque 2)} _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]
mieux vaut tard que jamais ...
Deux réponses pour le prix d'une ...
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.
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