• Git的gc功能


    Git的底层并没有采用 CVS、SVN 底层所采用的那套增量式文件系统,而是采用一套自行维护的存储文件系统。当文件变动发生提交时,该文件系统存储的不是文件的差异信息,而是文件快照,即整个文件内容,并保存指向快照的索引。这种做法,提高 Git 分支的使用效率;但也容易导致代码仓库中内容重复程度过高,从而仓库体积过大。当遇到这种情况时,或者需要将仓库推送到远程主机时,就需要Git中的gc(garbage collect)功能,也就是垃圾回收功能。

    大体来说,当运行 "git gc" 命令时,Git会收集所有松散对象并将它们存入 packfile,合并这些 packfile 进一个大的 packfile,然后将不被任何 commit 引用并且已存在一段时间 (数月) 的对象删除。 此外,Git还会将所有引用 (references) 并入一个单独文件。

    就细节而言,Git做了这几件事:

        pack_refs 过程
        reflog expire 过程
        repack 过程
        prune 过程
        rerere 过程

    pack_refs 过程相当于执行"git pack-refs --all --prune",它会将$GIT_DIR/refs目录下的所有heads和tags打包成一个文件并保存为$GIT_DIR/packed-refs下。

    reflog expire 过程相当于执行"git reflog expire --all",它会将删除所有超过期限而且没有被refs涉及的reflog条目。

    repack 过程相当于执行"git repack -d -l",一般情况下还会包括"-A"选项,它会将所有未被包含在一个pack的松散对象连结成一个pack,也会将现有的pack重新组织为一个新的更有效率的pack,并删除冗余的pack(如果她们中存在不可达的松散对象,会先把这些对象释放出来)。

    prune 过程相当于执行"git prune --expire",他会删除所有过期的、不可达的且未被打包的松散对象。

    rerere 过程相当于执行"git rerere gc",这种情形下似乎没什么用。
    ————————————————
    版权声明:本文为CSDN博主「lihuanshuai」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/lihuanshuai/java/article/details/37345565

  • 相关阅读:
    报表引擎API开发入门— EJB程序数据源
    真正意义上下一代 Windows Embedded:有关 Windows 10 "Athens" 的事
    如何将网格式报表打印成其它样式
    报表引擎API开发入门—带参程序数据集
    wifi漫游测试过程
    前端,Java,产品经理,微信小程序,Python等资源合集大放送
    bootstrap+fileinput插件实现可预览上传照片功能
    Jquery前端分页插件pagination同步加载和异步加载
    Jquery前端分页插件pagination使用
    最简单的混合开发教程资料汇总
  • 原文地址:https://www.cnblogs.com/qiyuexin/p/12792381.html
Copyright © 2020-2023  润新知