2009-05-08 14 views
3

Supposons que nous avons un dépôt subversion qui ressembleComment migrer d'un référentiel Subversion compliqué vers un système de contrôle de version distribué?

/original/0.1 
/original/0.2 
/variantA/trunk 
/variantA/branches/who/branch_for_xxx 
/variantA/branches/she/branch_for_yyy 
/variantB/trunk 
/variantB/branches/who/branch_for_zzz 
(... 30 or 40 alike) 

où VARIANTA et variantB sont fourches du logiciel d'origine.

Je cherche une méthode pour la migration de ce référentiel dans un système de contrôle de version distribué: une méthode

  • pas nécessairement wigh une seule commande
  • pour l'un des bien connus des systèmes de contrôle de version distribuée
  • faire les DVCS pensent les branches: /official/{0.1,0.2} arbres,/VARIANTA/tronc arbre, ...
  • faire les DVCS au courant de la relation d'héritage de ces arbres
+0

Comment vous abordez cela dépend largement de ce que DVCS vous allez utiliser. –

Répondre

2

Pour Git, consultez les instructions à http://github.com/guides/import-from-subversion

La dernière fois que je l'ai fait manuellement, je les commandes ci-dessous. (Ce fut pour un projet qui n'a pas utilisé des balises ou des branches. En utilisant svn2git pourrait produire de meilleurs résultats que si vous avez des étiquettes ou des branches git-svn.)

cat "mysvnusername = Me Myself <[email protected]>" >> authors.txt 

svnserve --daemon --foreground --root <SVN-REPO-PARENT-DIR> 
git svn clone --stdlayout --authors-file=authors.txt --no-metadata svn://localhost/<SVN-REPO-NAME> 

# push to a public repo and clone from there, to get push/pull working easily 
cd <SVN-REPO-NAME> 
git remote add origin [email protected]:mygithubusername/<GIT-REPO-NAME>.git 
git push origin master 
cd .. 
rm -rf <SVN-REPO-NAME> 

git clone [email protected]:mygithubusername/<GIT-REPO-NAME>.git 

Mais puisque vous avez une mise en page de dépôt SVN non standard , vous devrez spécifier les paramètres --trunk, --tags et --branches au lieu de --stdlayout pour git svn clone.

Pour représenter toute l'histoire de l'héritage de votre dépôt, vous pouvez essayer de réorganiser votre dépôt de sorte qu'au lieu d'une hiérarchie non standard, vous auriez une mise en page de référentiel standard plat:

/branches/original-0.1 
/branches/original-0.2 
/branches/variantA-trunk 
/branches/variantA-who-branch_for_xxx 
/branches/variantA-she-branch_for_yyy 
/branches/variantB-trunk 
/branches/variantB-who-branch_for_zzz 
... 

Cela devrait faciliter pour importer des outils pour comprendre le référentiel. Ensuite, lorsqu'ils ont été importés, vous pouvez les réorganiser mieux dans le nouveau référentiel.

En outre, j'ai entendu que Git 1.6.x prend en charge le clonage en profondeur, de sorte que vous pouvez donner à git svn clone des paramètres tels que --branches=branches/*/* qui regardera profondément dans la hiérarchie pour les branches. Voir this post pour un exemple d'utilisation.

+1

+1.Bon post avec beaucoup plus de détails pratiques que ma propre réponse – VonC

+0

J'ai récemment fait quelques conversions SVN-à-Git et avec certains projets, les correctifs ont aidé à corriger l'historique. J'ai écrit à ce sujet dans mon blog: http://blog.orfjackal.net/2009/05/converting-confused-svn-repositories-to.html –

1

$ bzr svn import---layout trunk1 svn-root-url bzr.repo

devrait faire la bonne chose. Vous devez avoir installé le plugin bzr-svn pour pouvoir le faire.