查找Git存储库的大小


Answers:


260

UPDATE git 1.8.3引入了一种更有效的方法来获取粗略的大小:(git count-objects -vH请参阅@VonC的答案)

对于“完整尺寸”的不同想法,您可以使用:

git bundle create tmp.bundle --all
du -sh tmp.bundle

关闭(但不完全是:)

git gc
du -sh .git/

对于后者,您还将数:

  • 钩子
  • 配置(远程,推送分支,设置(空格,合并,别名,用户详细信息等)
  • 隐藏(另请参见我可以从远程存储库中获取隐藏到本地分支吗?
  • rerere缓存(可能会很大)
  • 刷新
  • 备份(例如,从分支过滤器)和其他各种内容(来自rebase,bisect等的中间状态)

谢谢!第一个行为更准确地反映了克隆的总大小,但第二个行为也非常接近。
mschallert

7
注意:此答案已过期。请参阅VonC的答案,以获取git版本> = 1.8.3。
John Dibling 2014年

还请注意,我的答案是一种更完整的方法,它可能有其自身的优点。
sehe

您能补充一下git bundlegit gc实际上是什么吗?是否会创建另一个(不需要的)存档,然后测量大小?
拉梅什·帕雷克

1
@RameshPareek是的。这很清楚,因为我正在du测量该文件的大小。
sehe

252

请注意,自git 1.8.3(2013年4月22日)以来:

git count-objects”学会了“ --human-readable” aka“ -H”选项,以Ki/ Mi/ GiB根据需要缩放。

这可以与杰克·莫里森回答中-v提到的选择结合起来。

git gc
git count-objects -vH

git gc很重要,如ABB回答所述

加号(仍然是git 1.8.3),输出更加完整:

msgstr git count-objects -v“学习了报告对象存储中剩余的临时packfile和其他垃圾


116

git命令

git count-objects -v

将为您很好地估计git存储库的大小。没有-v标志,它仅告诉您解压缩文件的大小。该命令可能不在$ PATH中,您可能必须对其进行跟踪(例如,在Ubuntu上,我在/ usr / lib / git-core /中找到了它)。

从Git手册页:

-v,--verbose

除了消耗松散对象和磁盘空间的数量之外,它还会报告打包对象的数量,数据包的数量,这些软件包消耗的磁盘空间以及可以通过运行git prune-packed删除的对象的数量。

您的输出将类似于以下内容:

count: 1910
size: 19764
in-pack: 41814
packs: 3
size-pack: 1066963
prune-packable: 1
garbage: 0

您要寻找的线是size-pack。这就是所有打包提交对象的大小,或者是新克隆的存储库的最小可能大小。


4
以我的经验,git count-objects -v什么时候git-count-objects -v不起作用(因为它不在我的PATH中)。
mwolfetech

5
@psihodelia似乎您可能必须在运行git gc之前运行,git count-objects -v因为您的存储库可能尚未打包。请参阅此处的第一个答案以获取证据:stackoverflow.com/questions/3532740/…–
杰克·莫里森

5
您可以使用grep仅获取所需的行:git count-objects -vH | grep 'size-pack'。本H是为了显示它的人类可读的格式,如@VonC他回答说。
alko989

git count-objects --help:size-pack:包消耗的磁盘空间,以KiB为单位(除非指定-H)
auralbee

5

您可以使用git-sizer。在--verbose设置中,示例输出为(下)。寻找Total size of files线。

$ git-sizer --verbose
Processing blobs: 1652370
Processing trees: 3396199
Processing commits: 722647
Matching commits to trees: 722647
Processing annotated tags: 534
Processing references: 539
| Name                         | Value     | Level of concern               |
| ---------------------------- | --------- | ------------------------------ |
| Overall repository size      |           |                                |
| * Commits                    |           |                                |
|   * Count                    |   723 k   | *                              |
|   * Total size               |   525 MiB | **                             |
| * Trees                      |           |                                |
|   * Count                    |  3.40 M   | **                             |
|   * Total size               |  9.00 GiB | ****                           |
|   * Total tree entries       |   264 M   | *****                          |
| * Blobs                      |           |                                |
|   * Count                    |  1.65 M   | *                              |
|   * Total size               |  55.8 GiB | *****                          |
| * Annotated tags             |           |                                |
|   * Count                    |   534     |                                |
| * References                 |           |                                |
|   * Count                    |   539     |                                |
|                              |           |                                |
| Biggest objects              |           |                                |
| * Commits                    |           |                                |
|   * Maximum size         [1] |  72.7 KiB | *                              |
|   * Maximum parents      [2] |    66     | ******                         |
| * Trees                      |           |                                |
|   * Maximum entries      [3] |  1.68 k   | *                              |
| * Blobs                      |           |                                |
|   * Maximum size         [4] |  13.5 MiB | *                              |
|                              |           |                                |
| History structure            |           |                                |
| * Maximum history depth      |   136 k   |                                |
| * Maximum tag depth      [5] |     1     |                                |
|                              |           |                                |
| Biggest checkouts            |           |                                |
| * Number of directories  [6] |  4.38 k   | **                             |
| * Maximum path depth     [7] |    13     | *                              |
| * Maximum path length    [8] |   134 B   | *                              |
| * Number of files        [9] |  62.3 k   | *                              |
| * Total size of files    [9] |   747 MiB |                                |
| * Number of symlinks    [10] |    40     |                                |
| * Number of submodules       |     0     |                                |

[1]  91cc53b0c78596a73fa708cceb7313e7168bb146
[2]  2cde51fbd0f310c8a2c5f977e665c0ac3945b46d
[3]  4f86eed5893207aca2c2da86b35b38f2e1ec1fc8 (refs/heads/master:arch/arm/boot/dts)
[4]  a02b6794337286bc12c907c33d5d75537c240bd0 (refs/heads/master:drivers/gpu/drm/amd/include/asic_reg/vega10/NBIO/nbio_6_1_sh_mask.h)
[5]  5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c (refs/tags/v2.6.11)
[6]  1459754b9d9acc2ffac8525bed6691e15913c6e2 (589b754df3f37ca0a1f96fccde7f91c59266f38a^{tree})
[7]  78a269635e76ed927e17d7883f2d90313570fdbc (dae09011115133666e47c35673c0564b0a702db7^{tree})
[8]  ce5f2e31d3bdc1186041fdfd27a5ac96e728f2c5 (refs/heads/master^{tree})
[9]  532bdadc08402b7a72a4b45a2e02e5c710b7d626 (e9ef1fe312b533592e39cddc1327463c30b0ed8d^{tree})
[10] f29a5ea76884ac37e1197bef1941f62fda3f7b99 (f5308d1b83eba20e69df5e0926ba7257c8dd9074^{tree})

1
这很好,因为它不仅显示总克隆大小,还显示更多信息。它并没有表明我仍然想知道的一件事是,如果下载了ZIP,它将有多大(它不包含所有提交)。
NH。


@downvoter会在乎解释他的理由吗?
serv-inc

1

如果使用git LFS,则git count-objects不对二进制文件进行计数,而仅对指向它们的指针进行计数。

如果您的LFS文件由Artifactorys管理,则应使用REST API:

  • 从任何搜索引擎获取www.jfrog.com API
  • 查看获取存储摘要信息

1

认为这为您提供了回购历史记录中所有文件的总列表:

git rev-list --objects --all | git cat-file --batch-check="%(objectsize) %(rest)" | cut -d" " -f1 | paste -s -d + - | bc

您可以--all用树状符号(HEADorigin/master等)代替以计算分支的大小。


-1

如果存储库位于GitHub上,则可以使用开源Android应用程序Octodroid,该应用程序默认显示存储库的大小。

例如,使用mptcp存储库:

Octodroid上多路径TCP存储库的大小

克隆时存储库的大小

免责声明:我没有创建Octodroid。


1
它们以不同的单位(GB x GiB)。顺便说一句,1.71 GB = 1.84 GiB,只是转换而已,而不关心轮次。
卢西亚诺

抱歉,我在键入时将它们混合在一起,正确的关系为:1.71 GiB = 1.84 GB
Luciano
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.