2010-10-22 139 views
4

我在SVN中有一个项目,我正在迁移到Git。该项目由一个“核心”产品(在主干下)组成,然后在同一个存储库内分支,并作为起点为我们将产品推出的每个客户定制。将一个Git存储库分割成多个分支成为分支

在我看来,这些并不是真正的分支,因为它们将永远不会被合并回主干,而且他们会更好地生活在他们自己的存储库中,并将它们的历史链接回“主干”存储库,在需要时能够从后备箱中拉出变化(当然可以用git轻松完成)。

让事情稍微复杂一点的是,一个客户端拥有自己项目的一个分支,从某种意义上说,它将被合并回客户主分支上,这是一个“真正的”分支。

怀着希望使事情更加清楚,SVN结构如下:

  • “项目” 库
    • 中继线
    • 分行
      • 客户端1(来自中继线V100支链)
      • Client2(从Trunk v150分支)
      • Client2-Branch(bran从客户端2 V200)
      • Client3(从树干V150支)

而且我想获得的结构

  • “项目” 库

    高等教育委员会
  • 客户端1存储库(从SHA123分叉)

  • 客户端2库(从SHA456分支)

    • 客户端2-分公司(从SHA456789支)
  • Client3库(从SHA789分支)

谁能推荐一个好方式做到这一点 - 我不是一个Git新手,我知道过滤分支,我只是不知道我应该采取什么方法来获得这个结构,并保持尽可能多的历史。

感谢

回答

3

如果你真的想这样做,克隆回购,并删除在每个外来分支机构。

但目前的情况似乎很好。你确定你永远不会想要从一个回购券到另一个回归补丁吗?

+0

很确定 - 我们总是会经历现在的干线 – spmason 2010-10-22 12:47:57

+2

@Steve:我不认为你确实在那里回答了wnoise。如果所有的工作总是经历你标记为trunk的东西,那么你肯定希望至少有一个回购站在这些分支都存在的地方,这样你就可以做一些事情,比如把树干中的常见工作合并到所有的客户端中。通过一切手段,创建单独的克隆为每个工作,但没有理由,每个客户端不应该至少知道“中继线”,没有理由中继线不应该知道所有客户端。但是wnoise是正确的:你要问的是如何克隆并删除一些分支。 – Cascabel 2010-10-22 13:10:54

+0

但我需要我创建的分支是新存储库的主/主干。我想这只是一个合并,然后删除原始分支? – spmason 2010-10-22 14:23:18

1

您可以使用svn2git在树枝上克隆到自己的回购协议,像

svn2git svn://project/branches/client1 --rootistrunk 

为你想成为一个分叉式回购各分支,然后

svn2git svn://project/trunk --rootistrunk 

为树干。

我为一个非常大的svn-> git转换做了类似的事情。