我希望将我的代码库从svn迁移到git。我的svn回购中有太多分支。我只希望克隆几个分支并将它们合并在一起并将其推送到git。 我想避免克隆所有分支,因为它需要很长时间。我如何实现这一目标?
完成后,我想定期从这些svn分支获取更新,合并它们并更新git repo,并且svn将在一段时间内处于活动状态。如果我必须再次克隆它,那将浪费时间。有办法做我需要的吗?
答案 0 :(得分:1)
我认为SubGit工具可能是您案例的最佳解决方案:
它允许将数据从SVN转换为Git,包括和排除任何分支/标签甚至内部目录,因此很容易只获得您想要在Git中拥有的分支。比方说,如果你有分支' branch_1' ...' branch_N',但打算只在Git中使用' branch_3'和' branch_4' (以及' trunk'),然后您可以按如下方式设置SubGit:
[svn]
trunk=trunk:/refs/heads/master
branches=branches/branch_3:/refs/heads/branch_3
branches=branches/branch_4:/refs/heads/branch_4
只有那些分支才会出现在Git中。
SubGit支持SVN和Git之间的连续双向镜像,因此它不仅可以从SVN获得更新,而且还可以从Git发送更新。也可以通过定期运行导入来仅从SVN获取更新,但在这种情况下,不应在GIt中更改来自SVN的分支。
答案 1 :(得分:0)
git svn fetch
(和clone
)有--ignore-paths
and --include-paths
,因此您可以忽略某些分支/标记(SVN repo中的路径)或仅包含匹配的分支/标记。所以它应该像
git init from_svn
cd from_svn
git config svn-remote.svn.url "svn://…"
git config svn-remote.svn.include-paths "^/branches/3\." # Include only branches that match name 3.*
git svn fetch svn