我有一个SVN存储库,其中包含以下当前结构:
最初具有此结构:
也就是说,该项目被分成两个独立的“子存储库”(或者你想称之为的任何一个)
有没有办法将其迁移到git 而不会丢失历史记录? 对于这种情况,svn2git会比git-svn更好吗?还有其他迁移工具吗?
编辑:我按照建议尝试了git svn clone,但是,正如我想的那样,它没有按照从旧结构迁移到新结构。它只导入了新结构的修订版。
答案 0 :(得分:3)
首先我将主干转换为git:
git svn clone url-to-project -s
然后我转换了每个项目:
git svn clone url-to-project1 -s
git svn clone url-to-project2 -s
...
然后,对于每个项目,我使用移植物和过滤器分支从主干附加了以前的历史记录。
我只是blogged about it。
答案 1 :(得分:1)
svn2git只是在下面使用“git svn”,所以它本身不会“更好”。它只是制作漂亮的标签和分支,并清理干净的svn。如果这就是你想要的,我会继续单独在两个子存储库上使用它。它将获得所有适当的历史记录。
答案 2 :(得分:0)
答案 3 :(得分:0)
您的“当前”结构已经包含了之前结构的所有历史记录。因此,使用git svn clone
克隆每个项目应该可以正常工作。
没有必要告诉Git有关在trunk目录下有多个项目的先前结构。
Git的优点在于,您可以根据自己的喜好尝试迁移,直到您对结果感到满意为止。
答案 4 :(得分:0)
使用git svn clone -s SVN_REPOS
假设标准的Subversion布局让git克隆Subversion存储库。您将获得一个名为master的本地git分支,但git branch -a
将显示所有远程分支。 Subversion分支只有分支名称,但标记的分支名称为tags/tag_name
。
在本地克隆时不要重复使用分支/标记名称! git不喜欢那样。
本指南对我帮助很大。
http://www.viget.com/extend/effectively-using-git-with-subversion/