Nous avons une grande base de code qui contient plusieurs projets communs, la solution fichiers, etc en un répertoire SVN. Nous sommes à la migration vers l'Mercurial. Je voudrais profiter de cette occasion pour réorganiser notre code en plusieurs référentiels pour faire le clonage pour la ramification ont moins de frais généraux. J'ai déjà réussi à convertir notre repo de SVN, Mercurial, tout en préservant l'histoire. Ma question: comment puis-je briser tous les différents projets en différents référentiels, tout en préservant leur histoire?
Voici un exemple de ce que notre référentiel unique (OurPlatform) ressemble actuellement:
/OurPlatform
---- Core
---- Core.Tests
---- Database
---- Database.Tests
---- CMS
---- CMS.Tests
---- Product1.Domain
---- Product1.Stresstester
---- Product1.Web
---- Product1.Web.Tests
---- Product2.Domain
---- Product2.Stresstester
---- Product2.Web
---- Product2.Web.Tests
==== Product1.sln
==== Product2.sln
Tous ceux-là sont les dossiers contenant VS les Projets sauf pour les fichiers de la solution. Produit1.la sln et Produit2.la sln à la fois référence à tous les autres projets. Idéalement, j'aimerais profiter de chacun de ces dossiers, et de les transformer en séparer Hg repos, et aussi d'ajouter de nouvelles repos pour chaque projet (ils agiraient en tant que parent repos). Alors, Si quelqu'un allait travailler sur Produit1, ils clone du Produit1 repo, qui contenait Produit1.la sln et subrepo références à ReferenceAssemblies, Core, Core.Tests, Base De Données, Base De Données.Tests, CMS et CMS.Les Tests.
Ainsi, il est facile de le faire en seulement hg init qui pratiquent dans les répertoires du projet. Mais peut-il être réalisé tout en préservant l'histoire? Ou est-il un meilleur moyen d'arranger cela?
EDIT::::
Grâce à Ry4an réponse, j'ai pu accomplir mon objectif. Je voulais partager ce que j'ai fait ici pour les autres.
Depuis nous avons eu beaucoup de projets séparés, j'ai écrit un petit script bash pour automatiser la création de la filemaps et de créer la finale bat script pour faire la conversion. Ce n'était pas évident à partir de la réponse, c'est que la commande de conversion doit être exécuté une fois pour chaque filemap, pour produire un référentiel distinct pour chaque projet. Ce script devra être placé dans le répertoire ci-dessus, un svn copie de travail que vous avez déjà converti. J'ai utilisé la copie de travail puisque c'est la structure de fichier plus adapté à ce que je voulais la version définitive de la nouvelle hg repos à l'être.
#!/bin/bash
# this requires you to be in: /path/to/svn/working/copy/, and issue: ../filemaplister.sh ./
for filename in *
do
extension=${filename##*.} #$filename|awk -F . '{print $NF}'
if [ "$extension" == "sln" -o "$extension" == "suo" -o "$extension" == "vsmdi" ]; then
base=${filename%.*}
echo "#$base.filemap" >> "$base.filemap"
echo "include $filename" >> "$base.filemap"
echo "C:\Applications\TortoiseHgPortable\hg.exe convert --filemap $base.filemap ../hg-datesort-converted ../hg-separated/$base > $base.convert.output.txt" >> "MASTERGO.convert.bat"
else
echo "#$filename.filemap" >> "$filename.filemap"
echo "include $filename" >> "$filename.filemap"
echo "rename $filename ." >> "$filename.filemap"
echo "C:\Applications\TortoiseHgPortable\hg.exe convert --filemap $filename.filemap ../hg-datesort-converted ../hg-separated/$filename > $filename.convert.output.txt" >> "MASTERGO.convert.bat"
fi
done;
mv *.filemap ../hg-conversion-filemaps/
mv *.convert.bat ../hg-conversion-filemaps/
Ce script vérifie tous les fichiers dans un svn copie de travail, et selon le type crée un nouveau filemap fichier ou ajoute à un existant. Le si est vraiment juste pour attraper divers visual studio fichiers, et de les placer dans un autre repo. Ceci est destiné à être exécuté sur le coup (cygwin dans mon cas), mais l'exécution de l'effectif commande de conversion est accompli grâce à la version de hg livré avec TortoiseHg en raison de la fourche/questions de processus sur Windows (gah, je sais...).
Si vous exécutez le MASTERGO.convertir des.le fichier bat, qui ressemble à votre converti hg repo, et crée distincte de repos à l'aide de l'fournis filemap. Après il est complet, il y a un dossier appelé hg-séparé qui contient un dossier/repo pour chaque projet, ainsi qu'un dossier/repo pour chaque solution. Ensuite, vous devez manuellement clone tous les projets dans une solution de pensions de titres, et ajouter les clones à l' .hgsub fichier. Après avoir commis un .hgsubstate fichier est créé et vous êtes prêt à aller!
Avec l'exemple donné ci-dessus, mon .hgsub fichier ressemble à ceci "Produit1":
Product1.Domain = /absolute/path/to/Product1.Domain
Product1.Stresstester = /absolute/path/to/Product1.Stresstester
Product1.Web = /absolute/path/to/Product1.Web
Product1.Web.Tests = /absolute/path/to/Product1.Web.Tests
Une fois que j'ai le transfert de ces repos à un serveur central, je vais être de modifier manuellement les chemins d'url.
Aussi, il n'y a rien d'analogue à la première OurPlatform repo svn, puisque tout est séparé maintenant.
Merci encore!