我去年开始使用Git并且非常喜欢它,所以我正在考虑切换我最大,最活跃的Subversion回购。不幸的是,该回购包含了几个(相关的,但独立的)项目。
有许多页面描述了如何转换单项目回购,但多项目回购的数量要少得多。事实上,我只有found一个few,他们似乎都假设每个项目都有自己的主干:
project1/
branches/
tags/
trunk/
project2/
branches/
tags/
trunk/
project3/
branches/
tags/
trunk/
令人遗憾的是,我的 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/
更糟糕的是,标签都是从工作副本(例如svn copy . svn://example.com/svn/tags/project1-1.0.2
)创建的,因此包含从未提交到主干的小更改(主要是硬编码版本号)。此外,还有一些提交跨越所有项目(许可证更新等)。值得庆幸的是,至少没有合并!
在保留我的标签的同时,是否有一种干净的方法来解开这些项目?如果它有帮助,这将是一个单向转换,随后Subversion repo脱机。
答案 0 :(得分:2)
我用http://gitorious.org/svn2git/svn2git做同样的事情。最初创建此工具是为了将巨大的KDE SVN存储库转换为Git,BTW也作为您的存储库。您所要做的就是编写一个简单的控制文件,描述哪些目录对应于哪个项目和分支。最后,您为项目提供了一套很好的git存储库。
但需要注意的是:SVN标签没有直接支持。你必须将它们作为Git分支导入并对它们进行后处理,参见http://gitorious.org/svn2git/svn2git/blobs/master/samples/merged-branches-tags.rules
答案 1 :(得分:0)
http://repo.or.cz/w/svn-all-fast-export.git似乎采用了可以整理存储库的大量规则文件。我知道使用git-svn
(双向)你可以毫无问题地删除svn repo的大部分内容(包括忽略提交的部分,因为svn根指向存储库或通过--ignore-paths
)。
制作新的回购后,如果有交叉引用,您可以使用git-submodule
将背面绑在一起。