将具有公共中继的多项目Subversion仓库迁移到Git?

Ben*_*ank 5 svn git

我去年开始使用Git并且非常喜欢它,所以我正在考虑切换我最大,最活跃的Subversion回购.不幸的是,该回购包含几个(相关但独立)的项目.

有很多很多页面描述了如何转换单项目回购,但是多项目回购更少.事实上,我只发现一些,他们似乎都认为每个项目都有自己的主干:

project1/
    branches/
    tags/
    trunk/
project2/
    branches/
    tags/
    trunk/
project3/
    branches/
    tags/
    trunk/
Run Code Online (Sandbox Code Playgroud)

遗憾的是,我的 Subversion回购看起来像这样:

branches/
    *empty*
tags/
    project1-0.9/
    project1-1.0/
    project1-1.0.1/
    project2-0.9/
    project2-0.9.1/
    project3-0.5/
trunk/
    project1/
    project2/
    project3/
Run Code Online (Sandbox Code Playgroud)

更糟糕的是,标签都是从工作副本(例如svn copy . svn://example.com/svn/tags/project1-1.0.2)创建的,因此包括从未提交到主干的小变化(主要是硬编码版本号).此外,还有一些提交跨越所有项目(许可证更新等).值得庆幸的是,至少没有合并!

是否有一种干净的方法来解决这些项目,同时保留我的标签?如果它有帮助,这将是一个单向转换,随后Subversion repo脱机.

seb*_*sgo 2

我使用http://gitorious.org/svn2git/svn2git做了同样的事情。这个工具最初是为了将巨大的 KDE SVN 存储库转换为 Git 而创建的,顺便说一句,Git 也可以作为您的存储库。您所要做的就是编写一个简单的控制文件来描述哪些目录对应于哪个项目和分支。最后,您的项目就拥有了一套不错的 git 存储库。

但需要注意的是:不直接支持 SVN 标签。您必须将它们作为 Git 分支导入并对它们进行后处理,参见。http://gitorious.org/svn2git/svn2git/blobs/master/samples/merged-branches-tags.rules