查找Git存储库的大小

查找Git存储库大小的简单方法是什么?

我并不是指存储库根目录上的du -h。我有很多被忽略的文件,所以这个大小与我的总存储库大小不同。实际上,我想知道克隆存储库时会传输多少数据。

198802 次浏览

更新 git 1.8.3引入了一种更有效的获取大致大小的方法:git count-objects -vH(参见@VonC的回答)

对于“完全大小”的不同概念,你可以使用:

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

接近(但不精确:)

git gc
du -sh .git/

如果是后者,你还可以计算:

git命令

git count-objects -v

可以很好地估计git存储库的大小。如果没有-v标志,它只告诉您解包文件的大小。这个命令可能不在你的$PATH中,你可能需要找到它(例如,在Ubuntu上,我在/usr/lib/git-core/中找到了它)。

从Git手册页:

- v,详细

除了松散对象的数量和磁盘空间消耗, 它报告内包对象的数量、包的数量、磁盘 这些包所消耗的空间,以及可以容纳的对象数量

输出如下所示:

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

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

注意,由于git 1.8.3(2013年4月22日):

"git count-objects"学习了"--human-readable"又名"-H"选项,显示各种大数字在Ki/Mi/GiB按比例缩放必要。

它可以与他的回答杰克·莫里森提到的-v选项组合。

git gc
git count-objects -vH

(git gc很重要,正如A-B-B回答所提到的那样)

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

"git count-objects -v"学会了报告对象存储中剩余的临时包文件和其他垃圾文件

如果你使用git LFS, git count-objects不会计算你的二进制文件,而只计算指向它们的指针。

如果你的LFS文件是由Artifactorys管理的,你应该使用REST API:

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

要了解更多细节,可以使用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})

顺便说一句:如果你想最小化克隆的大小,你可以使用git clone的——深度1参数。

I 认为这给了你回购历史中所有文件的总列表:

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

你可以用树形(HEADorigin/master等)替换--all来计算分支的大小。

如果存储库在GitHub上,您可以使用开源Android应用程序Octodroid,它默认显示存储库的大小。

例如,对于mptcp存储库:

Size of multipath TCP repository on Octodroid

克隆时存储库的大小

免责声明:我并没有创造Octodroid。

如果你已经将git存储库推送到github,这个答案也适用。

你可以很容易地在账户设置中找到每个存储库的大小