Знайдіть розмір сховища Git


283

Який простий спосіб знайти розмір мого сховища Git?

І я не маю du -hна увазі кореневий каталог мого сховища. У мене дуже багато ігнорованих файлів, так що розмір буде відрізнятися від мого загального розміру сховища. Я по суті хочу знати, скільки даних буде передано після клонування мого сховища.


Відповіді:


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/

З останнім ви також порахували б:

  • гачки
  • config (видалення, натискання гілок, налаштування (пробіл, злиття, псевдоніми, відомості про користувача тощо)
  • скриньки (див. Чи можу я забрати сховище з віддаленого репо в місцевий відділення? )
  • оновити кеш (який може отримати значну кількість)
  • відмови
  • резервні копії (з фільтру-гілки, наприклад) та різні інші речі (проміжний стан від rebase, бісект тощо)

Дякую! Перша поведінка більш точно відображала загальний розмір клону, але друга також була досить близькою.
mschallert

7
Примітка: ця відповідь застаріла. Див VonC в відповідь замість цього для GIT версій> = 1.8.3.
Джон Дайблінг

Зауважте, моя відповідь - це більш повний спосіб, який може мати власну заслугу.
sehe

Чи можете ви додати , що git bundleі на git gcсамому справі робить? чи створить інший (небажаний) архів, а потім виміряє розмір?
Рамеш Парік

1
@RameshPareek так. Це досить зрозуміло, оскільки я використовую duдля вимірювання розміру цього файлу.
sehe

252

Зауважте, що з git 1.8.3 (22 квітня 2013 р.) :

" git count-objects" дізнався " --human-readable" aka " -H" варіант показувати різні великі числа в Ki/ Mi/ GiBмасштабувати за необхідності.

Це може поєднуватися з -vваріантом, про який Джек Моррісон згадував у своїй відповіді .

git gc
git count-objects -vH

( git gcВажливо, як було згадано ABB «S відповідь )

Плюс (ще git 1.8.3), вихід більш повний:

" git count-objects -v" навчився повідомляти про залишкові тимчасові пакети та інше сміття в магазині об'єктів .


116

Команда git

git count-objects -v

дасть вам хорошу оцінку розміру сховища git. Без прапора -v він лише повідомляє розмір розпакованих файлів. Ця команда може бути у вашому $ PATH, можливо, вам доведеться її відстежувати (наприклад, у Ubuntu я знайшов її у / usr / lib / git-core /).

З ман-сторінки Git:

-v, --вербоза

На додаток до кількості споживаних сипучих об'єктів та дискового простору, він повідомляє про кількість об'єктів в упаковці, кількість пачок, дисковий простір, спожитий цими пакетами, та кількість об'єктів, які можна видалити за допомогою git prune-pack.

Вихід буде виглядати приблизно так:

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цього немає (бо це не в моїй ПАТІ).
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.

@IndrajeetGour: вам потрібно встановити з github.com/github/git-sizer/#getting-started . Завантаження можна знайти на веб- сайті github.com/github/git-sizer/releases .
серв-інк

Чи хотів би @downvoter пояснити свої міркування, чи ні?
серв-інк

1

Якщо ви використовуєте git LFS, об’єкти git count не рахують ваші бінарні файли, а лише покажчики на них.

Якщо вашими файлами LFS керує Artifactorys, слід скористатися API REST:

  • Отримайте API www.jfrog.com з будь-якої пошукової системи
  • Подивіться Отримайте підсумкову інформацію про зберігання

1

Я думаю, що це дає вам загальний список усіх файлів в історії репо:

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

Ви можете замінити --allдерев яним ( HEAD, origin/masterтощо), щоб обчислити розмір гілки.


-1

Якщо сховище знаходиться в GitHub , ви можете використовувати відкритий вихідний додаток для Android Octodroid, який відображає розмір сховища за замовчуванням.

Наприклад, зі сховищем mptcp :

Розмір багатошарового сховища TCP на Octodroid

Розмір сховища під час клонування

Відмова: Я не створив Octodroid.


1
Вони знаходяться в різних одиницях (GB x GiB). До речі, 1,71 ГБ = 1,84 ГБ, просто конвертування і не турбота про раунди.
Лучано

Вибачте, я змішав їх під час набору, правильне співвідношення: 1,71 ГіБ = 1,84 ГБ
Лучано
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.