将一个Git存储库拆分为多个 - 分支成为分支

时间:2010-10-22 10:44:17

标签: git git-branch fork

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

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

使事情稍微复杂一点的是,一个客户端拥有自己项目的分支,这是一个“真正的”分支,因为它将在某个时间点合并回客户端主分支。

为了让事情更清楚,SVN结构如下:

  • “项目”存储库
    • 中继线
    • 分行
      • Client1(从Trunk v100分支)
      • Client2(从Trunk v150分支)
      • Client2-Branch(从Client2 v200分支)
      • Client3(从Trunk v150分支)

我想要的结构是

  • “项目”存储库

  • Client1存储库(从SHA123分叉)

  • Client2存储库(从SHA456分叉)

    • Client2-Branch(从SHA456789分支)
  • Client3存储库(从SHA789分叉)

任何人都可以推荐一个很好的方法来做到这一点 - 我不是Git新手,我知道filter-branch,我只是不确定我应采取什么方法来获得这个结构并保持尽可能多的历史尽可能。

由于

2 个答案:

答案 0 :(得分:4)

如果你真的想这样做,请克隆仓库,并删除每个仓库中无关的分支。

但目前的情况似乎还不错。你确定你永远不想从一个回购中挑选补丁吗?

答案 1 :(得分:1)

您可以使用svn2git将分支克隆到自己的存储库中,例如

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

对于要进行分叉回购的每个分支,然后

svn2git svn://project/trunk --rootistrunk

为行李箱。

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