将非常大的Git repo分解成更小的回购并保持历史

时间:2016-10-04 03:47:06

标签: git github version-control

我在GitHub中获得了这个非常大的Git回购。这个回购包括几个独立的项目,我想分解成他们自己的独立回购,并继续在那里开发。

ridiculously-large.git
├───Project1
├───Project2
├───...
└───Project1000

目前,我对Project2感兴趣。我想"克隆" Project2仅及其历史记录,只有一个专门用于它的新回购Project2.git,并且ridiculously-large.git仅用于历史目的。

到目前为止,我采用以下方法取得了一些成功:

  1. 首先,在GitHub中创建一个全新的仓库,Project2没有提交历史记录(这似乎很重要,以避免那些"致命:拒绝合并不相关的历史记录......" )并克隆它。

    git clone https://github.com/me/Project2.git
    

    因此,我的本地仓库已经配置了默认远程origin,指向新的GitHub仓库,这将特定于Project2的进一步开发。

  2. 然后,在新的本地回购中:

    git config core.sparseCheckout true
    echo Project2/ >> .git/info/sparse-checkout
    
  3. 然后,我添加一个指向temp的临时上游远程ridiculously-large.git

    git remote add -f temp https://github.com/me/ridiculously-large.git
    

    到目前为止一切顺利。仍然没有什么可以承诺的。

  4. 然后,将master分支从temp远程分支拉到新的work本地分支:

    git pull temp master:work
    

    (我这样做是因为个人习惯:我从不在任何本地master分支机构工作,无论是否为其配置了上游分支。)

  5. 这成功地实现了仅将与Project2相关的来源拉入工作副本的目标。到目前为止一切顺利。

  6. 现在,在我将work推送到新专用的远程origin之后:

    git checkout work
    git push --set-upstream origin work
    

    ......我看到 THE WHOLE SHEBANG 被推到Project2的新专用遥控器上,惨遭击败这项努力的全部目的。

  7. 问题

    • 实现目标的既定/推荐方法是什么?
    • 是否可以将其作为我正在做的事情的变体(或者做不正确?)
    • 是否还有其他任何Git结构更合适?

    提前感谢任何启蒙!

0 个答案:

没有答案