【问题标题】:How can I reduce the size of .git folder with huge history of commits?如何减少具有大量提交历史的 .git 文件夹的大小?
【发布时间】:2017-08-24 14:24:44
【问题描述】:

由于 .git 文件夹的大小变得非常庞大,我们每天都在一个小组中工作并提交大量数据。在我们的系统上执行 pull 命令时,由于 .git 文件夹很大,需要花费很多时间。我们如何清理或减小这个 git repo 的大小?

【问题讨论】:

标签: git github


【解决方案1】:

您需要确定您的存储库中是否存在固有的大问题——比如太多的大二进制文件——或者垃圾回收是否会修复它。

做一次垃圾回收,看看你的仓库有多大。

如果这不能解决问题,请查看 @sauerburger 提供的 Atlassian 链接,或根据您在那里找到的内容进行其他谷歌搜索。

(这些步骤的细节特意留给用户练习。)

【讨论】:

    【解决方案2】:

    如果大部分文件大小被 .git 文件夹中的旧提交占用,而不是当前文件,您可以做的是将特定的最近提交重新设置为根,保留从那时起的所有文件和提交但要摆脱旧的历史。

    请务必先备份所有内容!

    引用这个答案(https://stackoverflow.com/a/24153726/7070218):

    这里有一种方法,假设您当前的工作被称为 branchname。每当我进行大型变基时,我都喜欢使用临时标签 仔细检查没有变化并标记我可以的点 reset 如果出现问题,请返回(不确定这是否是标准的 程序与否,但它适用于我):

    git tag temp
    
    git checkout 10004
    git checkout --orphan new_root
    git commit -m "set new root 10004"
    
    git rebase --onto new_root 10004 branchname
    
    git diff temp   # verification that it worked with no changes
    git tag -d temp
    git branch -D new_root
    

    要摆脱旧分支,您需要删除所有标签和分支 上面的标签;那么

    git prune
    git gc
    

    将从您的存储库中清除它。

    请注意,您将暂时拥有所有内容的两份副本,直到您 有gc'd,但这是不可避免的;即使你做一个标准的壁球 和 rebase 你仍然有两个副本,直到 rebase 完成。

    【讨论】:

    • 这个过程可能曾经是有意义的,但现在它只是一种模仿回购“浅化”的手动方式。实际上,真正的浅存储库(例如,通过使用 depth 参数创建到 clone 时)更好,因为它保留了提交 ID(由于许多原因,这可能很有用,特别是如果您保留原始历史的存档)。另外,顺便说一句,关于在变基后拥有“所有内容的两个副本”的业务是不正确的;这不是 git 存储东西的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多