为了账号安全,请及时绑定邮箱和手机立即绑定

git gc --aggressive与git repack

git gc --aggressive与git repack

Git
潇潇雨雨 2019-11-23 13:24:59
我正在寻找减少git存储库大小的方法。搜索将我带入git gc --aggressive大多数时间。我还读到这不是首选方法。为什么?如果正在跑步,我应该注意些什么gc --aggressive?git repack -a -d --depth=250 --window=250建议超过gc --aggressive。为什么?如何repack减少存储库的大小?另外,我对标志--depth和还不太清楚--window。我应该在gc和之间选择什么repack?什么时候应该使用gc和repack?
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

问题git gc --aggressive在于选项名称和文档具有误导性。


正如Linus自己在这封邮件中解释的那样,git gc --aggressive基本上是这样的:


尽管git通常会尝试重用增量信息(因为这是个好主意,而且不会浪费CPU时间重新查找我们之前发现的所有良好的增量),但有时您还是想说“让我们重新开始,空白板,并忽略所有以前的增量信息,并尝试生成一组新的增量”。


通常,无需重新计算git中的增量,因为git可以非常灵活地确定这些增量。仅当您知道自己有非常非常差的增量时才有意义。正如Linus解释的那样,主要利用这些工具的工具就git fast-import属于此类。


大部分时间git在确定有用的增量方面做得非常好,使用Delta git gc --aggressive将使您产生可能浪费更长时间的CPU的增量。


莱纳斯结束了他的邮件与结论,即git repack用大--depth而--window在大多数时间是更好的选择; 尤其是在导入大型项目并希望确保git找到良好的增量之后。


因此,相当于(git gc --aggressive但正确完成)的事情是(隔夜)做类似的事情


git repack -a -d --depth=250 --window=250


深度是关于增量链有多深(在较长的历史记录中使它们更长-这是值得的空间开销),而窗口是关于我们希望每个增量候选对象扫描多大的对象窗口。


在这里,您可能要添加-f标记(即“删除所有旧的增量”,因为您现在实际上正在尝试确保该标记确实找到了合适的候选者。


查看完整回答
反对 回复 2019-11-23
  • 3 回答
  • 0 关注
  • 2084 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信