如何收缩/削减Git回购

RoL*_*LLs 6 git branch

我们有一个Git仓库,有7位贡献开发人员,拥有超过2.5年的历史和大约10,000次提交.我们使用Assembla推进和拉动.当我们添加新的开发人员时,将repo克隆到他们的dev计算机上需要将近一个小时.

我不确定这是否是正确的术语,但我们的目标是通过"削减/剪断"前1.5年的提交并仅保留最新的历史年份来"缩小"回购.我们希望保留整个仓库的"备份"副本,无论是作为单独的仓库还是分支?我们想在将来重复这一点,在需要的时候将初始拆分与新拆分合并,但我不确定这是否可行.如果有一种方法可以将所有历史记录保存在一个单独的分支上,并且仅保留master分支仅包含去年的历史记录,那将是很好的,但请告诉我可能的优缺点.

我不知道我们拥有的所有可能性/选项,这就是我在这里的原因.我读过一些关于patches但我不确定这是否真的是我需要的东西,或者是否有更好/更容易的东西.你们在做什么来照顾这样的问题,包括利弊?请记住,我仍然需要每个开发人员继续推拉,最好留在master分支机构.

提前致谢!

Emi*_*Sit 7

最好的分步说明可以在Git SCM博客文章"Replace Kicker"中找到.

简短的总结如下:

  • 创建一个新的分支,在你想要切割的位置,比如git branch history 哈希.
  • 将历史记录推送到新的存储库.
  • 使用创建新基础git commit-tree.
  • 将您的post- historycommit重新定位到新的基础上.
  • 将新的截断master分支推送到服务器.
  • 然后,人们可以使用它git replace来重新连接历史.

原始帖子用图片解释得更好.

在处理涉及合并的复杂历史时,这可能效果不佳,具体取决于合作的git rebase --onto效果--preserve-merges.显然你应该在继续之前测试好.