zoukankan      html  css  js  c++  java
  • git原理:pack打包

    git向磁盘中存储对象使用“松散(loose)”对象格式。比如文件a.txt第一个版本大小是10k,第二个版本向其中添加了一行代码,假如此时文件为10.1k,那么第二个版本会重新产生一个1.1k的文件,这样会很浪费磁盘空间,所以git会时不时地将多个这些对象打包成一个称为“包文件(packfile)”的二进制文件,以节省空间和提高效率。在手动执行git gc的时候,或者向远程推送的时候,都会进行打包的操作。

    $ git gc
    Counting objects: 4, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (4/4), done.
    Total 4 (delta 0), reused 0 (delta 0)

    $ find .git/objects/ -type f

    .git/objects/bd/9dbf5aae1a3862dd1526723246b20206e5fc37
    .git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4
    .git/objects/info/packs
    .git/objects/pack/pack-5e00a7e5254491edada3599d9091d49afb16c975.idx
    .git/objects/pack/pack-5e00a7e5254491edada3599d9091d49afb16c975.pack


    执行git gc会主动出发git的打包机制,打包以后,会在 .git/objects/pack文件夹中产生两个文件,其他的文件都是在此次打包过程中,git认为不能是摇摆的文件,一般是没有被添加到任何提交记录中的文件。

    .pack 是包文件,这个文件包含了从文件系统中移除的所有对象的内容
    .idx是索引文件,这个文件包含了包文件的偏移信息

    备注:
      1.可以通过git verify-pack命令来查看包文件,但是我不会。。。。
      2.在打包以后,git会在第二个版本中存储完整的文件,而在第一个版本中存便宜,这样做的目的是,git认为检出第二个版本的概率要大于检出第一个版本的概率

    查看git中各种文件的大小:
    $ git count-objects -v
    count: 0
    size: 0
    in-pack: 15
    packs: 1
    size-pack: 8
    prune-packable: 0
    garbage: 0
    size-garbage: 0

  • 相关阅读:
    单调栈模板
    Yet Another Broken Keyboard[双指针]
    经典递归集合
    [未完成]ECRound 80
    #614 C. NEKO's Maze Game[简易DFS,0|1转换]
    等差数列异或和模板
    线段树基础题
    前缀和&差分
    优先队列
    st表模板
  • 原文地址:https://www.cnblogs.com/413xiaol/p/7828770.html
Copyright © 2011-2022 走看看