git svn克隆特定的分支和合并

时间:2018-06-07 17:22:48

标签: git svn git-svn

我希望将我的代码库从svn迁移到git。我的svn回购中有太多分支。我只希望克隆几个分支并将它们合并在一起并将其推送到git。 我想避免克隆所有分支,因为它需要很长时间。我如何实现这一目标?

完成后,我想定期从这些svn分支获取更新,合并它们并更新git repo,并且svn将在一段时间内处于活动状态。如果我必须再次克隆它,那将浪费时间。有办法做我需要的吗?

2 个答案:

答案 0 :(得分:1)

我认为SubGit工具可能是您案例的最佳解决方案:

https://subgit.com

它允许将数据从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