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