Wie aus einer komplizierten Subversion-Repository auf ein verteiltes Versionskontrollsystem zu migrieren?
Frage
Nehmen wir an, wir ein Subversion-Repository haben, die wie
sieht/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 sind Gabeln der Original-Software.
Ich bin auf der Suche nach einer Methode für dieses Repository in ein verteiltes Versionskontrollsystem der Migration: ein Verfahren
- nicht unbedingt Wigh einen einzigen Befehl
- für irgendeinen der bekannten verteilten Versionskontrollsysteme
- machen denke, die DVCS von ihnen Zweige: /official/{0.1,0.2} Bäume, / Varianta / trunk Baum, ...
- machen die DVCS sich der Vererbungsbeziehung dieser Bäume
Lösung
Wenn man bedenkt, Git als möglicher Kandidat DVCS, die Ruby-Skript svn2git das tut, was Sie brauchen.
Mehr Details in der Frage: < strong> Klonen einer nicht-Standard-SVN-Repository mit Git-Svn
Andere Tipps
Mercurial kommt mit einer convert-Erweiterung, die tun soll, was Sie wollen. Sehen Sie die Erweiterung Details auf der Mercurial Webseite zu konvertieren.
Für Git finden Sie in den Anweisungen unter http://github.com/guides/import- von 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. Mit svn2git könnte produzieren bessere Ergebnisse als git-svn, wenn Sie Tags oder Zweige haben.)
cat "mysvnusername = Me Myself <me.myself@somewhere.com>" >> 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 git@github.com:mygithubusername/<GIT-REPO-NAME>.git
git push origin master
cd ..
rm -rf <SVN-REPO-NAME>
git clone git@github.com:mygithubusername/<GIT-REPO-NAME>.git
Aber da Sie ein Nicht-Standard-SVN-Repository Layout haben, müssen Sie die --trunk angeben, --tags und --branches Parameter statt --stdlayout git svn clone .
Um die ganze Erbschaft Geschichte Ihres Repository darstellen, könnten Sie versuchen, Ihre Repository Nachbestellung so dass anstelle einer Nicht-Standardhierarchie Sie ein Standard-Flach Repository Layout haben würden:
/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
...
Das sollte es einfacher für Import-Tools, das Repository zu verstehen. Dann, wenn sie importiert wurden, können Sie sie reorganisieren besser im neuen Repository.
Außerdem habe ich gehört, dass Git 1.6.x tief Klonen unterstützt, so dass Sie geben können Parameter git svn clone
wie --branches=branches/*/*
die für Zweige tief in die Hierarchie aussehen wird. Siehe diesen Beitrag für ein Beispiel es zu benutzen.
$ bzr svn-import --layout trunk1 SVN-root-url bzr.repo
Sollte das Richtige tun. Sie müssen die BZR-SVN-Plugin installiert, um haben, diese in der Lage sein zu tun.