将复杂的SVN存储库迁移到GIT

时间:2014-03-20 09:43:49

标签: git svn github git-svn

我有一个包含100多个项目的SVN存储库,我现在想要迁移到GIT。这就是SVN Repository的样子:

customer_1/prj_1 (trunk, branches, tags)
customer_1/prj_2 (trunk, branches, tags)
customer_1/prj_n (trunk, branches, tags)
...
customer_2/prj_1 (trunk, branches, tags)
customer_2/prj_2 (trunk, branches, tags)
customer_2/prj_n (trunk, branches, tags)
...
customer_n/prj_1 (trunk, branches, tags)
customer_n/prj_2 (trunk, branches, tags)
customer_n/prj_n (trunk, branches, tags)

通过SVN我可以结帐:

  1. 包含所有客户和所有项目的整个存储库
  2. 单个客户的所有项目
  3. 特定客户的项目
  4. 我仍然需要使用GIT进行这三种访问方式,特别是对单个客户项目进行分支和标记,而不仅仅是整个存储库。所以基本上在SVN中,不同的客户项目有不同的稳定版本存储在每个项目的“tags”目录中。我还需要区分GIT中的客户项目版本。

    我已经将SVN存储库转换为单个GIT存储库(使用svn-git),但是(我认为)GIT不允许克隆像Subversion这样的单个文件夹,现在需要使用子模块或子树来构建它。

    是否有必要为每个客户项目创建一个GIT存储库(这将花费大量时间)或者最常见的方式来实现我的要求?

1 个答案:

答案 0 :(得分:0)

如果您需要标记单个客户项目,那么每个项目需要一个git存储库。 git中的标签(和分支)对于它们的存储库是全局的,没有办法标记子目录。

要使用git-svn执行此操作,请运行

git svn clone -s http://svn-repo/customer_1/prj_1 
git svn clone -s http://svn-repo/customer_1/prj_2

这可能确实需要一段时间,但你可能不得不忍受这一点。您当然会将调用脚本编写为git-svn。

至于浏览存储库:

如果你有多个git repos,你可以将它们作为一个文件夹中的子文件夹进行检查。如果要在服务器上浏览它们而不进行克隆/检出,则需要安装git存储库浏览器。有很多可用的 - git wiki中有一个列表:Interfaces, frontends, and tools