2009-05-08 2 views
3

Nehmen wir an, wir ein Subversion-Repository haben, die Wie migrieren Sie von einem komplizierten Subversion-Repository zu einem verteilten Versionskontrollsystem?

/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) 

wo Varianta und variantB wie

sieht Gabeln der Original-Software sind.

ich für ein Verfahren suchen dieses Repository in ein verteiltes Versionskontrollsystem für die Migration: ein Verfahren

  • nicht unbedingt Wigh einen einzigen Befehl
  • für eines der bekannten verteilten Versionskontrollsysteme
  • machen die DVCS von ihnen denken, Zweige: /official/{0.1,0.2} Bäume,/Varianta/Stamm Baum, ...
  • die DVCS macht sich der Vererbungsbeziehung dieser Bäume
+0

Wie Sie dies angehen, hängt weitgehend davon ab, welche DVCS Sie verwenden werden. –

Antwort

2

Für Git finden Sie die Anweisungen auf http://github.com/guides/import-from-subversion

Das letzte Mal, dass ich es manuell tat, habe ich die folgenden Befehle. (Dies war für ein Projekt, das Tags oder Zweige nicht genutzt. svn2git verwenden, kann bessere Ergebnisse als git-svn, wenn Sie Tags oder Zweige haben.)

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 

Aber da haben Sie einen Nicht-Standard-SVN-Repository Layout , müssen Sie die Parameter --trunk, --tags und --branches anstelle von --stdlayout für git svn clone angeben.

Um das ganze Erbe Geschichte Ihres Repository darstellen, könnten Sie versuchen, Ihr Repository Nachbestellung so dass anstelle einer Nicht-Standardhierarchie Sie ein Standard-Flach Repository Layout haben würde:

/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 
... 

, die es einfacher machen sollte für Import-Tools, um das Repository zu verstehen. Wenn sie importiert wurden, können Sie sie im neuen Repository besser reorganisieren.

Auch ich habe gehört, dass Git 1.6.x Deep Cloning unterstützt, so dass Sie git svn clone Parameter wie --branches=branches/*/* geben können, die tief in die Hierarchie für Filialen schauen wird. Ein Beispiel für die Verwendung finden Sie unter this post.

+1

+1.Guter Beitrag mit viel praktischen Details als meine eigene Antwort – VonC

+0

Ich habe kürzlich einige SVN-to-Git-Konvertierungen und mit einigen Projekten Patches waren hilfreich bei der Festsetzung der Geschichte. Ich habe darüber in meinem Blog geschrieben: http://blog.orfjackal.net/2009/05/converting-confused-svn-repositories-to.html –

1

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

Sollte das Richtige tun. Sie müssen das bzr-svn-Plugin installiert haben, um dies tun zu können.

Verwandte Themen