git - git分支和标签如何存储在磁盘中?

标签 git tags branch git-branch

我最近在工作中检查了我的一个git存储库之一,该存储库具有10,000多个分支和30000多个标签。新鲜克隆后,回购的总大小为12Gigs。我确信没有理由要有10000个分支机构。因此,我相信它们会在磁盘中占据相当大的空间。所以,我的问题如下

  • 如何将分支和标记存储在磁盘中,例如使用的数据结构如何,每个分支存储什么信息?
  • 如何获取有关分支的元数据?就像创建分支时一样,分支的大小是多少。
  • 最佳答案

    所有git引用(分支,标签,注释,存储等)均使用相同的系统。这些是:

  • 引用本身,以及
  • “reflogs”

  • 引用日志基于引用名称存储在.git/logs/refs/中,但有一个异常(exception):HEAD的引用日志存储在.git/logs/HEAD中而不是.git/logs/refs/HEAD中。

    引用是“松散的”或“打包的”。打包的refs在.git/packed-refs中,它是(SHA-1,refname)对的平面文件,用于简单的ref,还有带注释标签的其他信息。 “宽松”的裁判在.git/refs/name中。这些文件包含原始SHA-1(可能是最常见的)或文字字符串ref:,后跟符号引用的另一个引用的名称(通常仅适用于HEAD,但您可以创建其他引用)。符号引用没有打包(或者至少,我似乎无法做到这一点:-))。

    打包标签和“空闲”分支头(那些没有被主动更新的分支头)可以节省空间和时间。您可以使用 git pack-refs 执行此操作。但是,git gc会为您调用git pack-refs,因此通常您不需要自己执行此操作。

    关于git - git分支和标签如何存储在磁盘中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20666331/

    相关文章:

    loops - iMacros 中的 LOOP 功能 (TAG POS)

    xslt - XSl——需要转型帮助

    Gitlab:您必须接受服务条款才能完成操作

    git - 如何处理共享代码中的密码

    git - 我可以在 Github diff 中显示更多上下文吗?

    python - 如何将 Python 插件添加到 Gnu Global

    json - 有谁知道开源 JSON 模式元数据存储库?

    c - 编写一个程序,读取输入 # 并报告序列 ei 出现的次数

    svn - 配置 TeamCity 以从 SVN 主干、分支和/或标签构建

    svn - 合并后分支上提交日志会发生什么?