Wie aus einer komplizierten Subversion-Repository auf ein verteiltes Versionskontrollsystem zu migrieren?

StackOverflow https://stackoverflow.com/questions/839683

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
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top