Для Git, см. Инструкции в http://github.com/guides/import-from-subversion
В последний раз, когда я делал это вручную, я использовал команды ниже. (Это было для проекта, который не использовал теги или ветви. Использование svn2git может дать лучшие результаты, чем git-svn, если у вас есть теги или ветви.)
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
Но поскольку у вас нестандартный макет репозитория SVN, вам нужно будет указать параметры --trunk, --tags и --branches вместо --stdlayout для git svn clone .
Чтобы представить всю историю наследования вашего репозитория, вы можете попробовать переупорядочить свой репозиторий так, чтобы вместо нестандартной иерархии у вас была стандартная плоская компоновка репозитория:
/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
...
Это должно облегчить инструментам импорта понимание хранилища. Затем, когда они были импортированы, вы можете лучше их реорганизовать в новом хранилище.
Кроме того, я слышал, что Git 1.6.x поддерживает глубокое клонирование, так что вы можете указать git svn clone
параметры, такие как --branches=branches/*/*
, которые будут глубоко изучать иерархию ветвей. См. этот пост для примера использования.