Найти размер репозитория Git

283

Какой простой способ узнать размер моего Git-репозитория?

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

mschallert
источник

Ответы:

260

ОБНОВЛЕНИЕ 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 (пульты, push-ветки, настройки (пробелы, слияние, псевдонимы, пользовательские данные и т. д.)
  • тайники (см. Можно ли получить тайник из удаленного репо в локальную ветку? также)
  • переписать кеш (который может стать значительным)
  • reflogs
  • резервные копии (например, из ответвления фильтра) и многое другое (промежуточное состояние из rebase, bisect и т. д.)
sehe
источник
Спасибо! Первое поведение более точно отражало общий размер клона, но второе также было довольно близко.
mschallert
7
Примечание: этот ответ устарел. Вместо этого смотрите ответ VonC для версий git> = 1.8.3.
Джон Диблинг
Заметьте также, что мой ответ - способы более полные, которые могут иметь свои достоинства.
sehe
Можете ли вы добавить, что git bundleи на git gcсамом деле делает? это создаст другой (нежелательный) архив и затем измерит размер?
Рамеш Парик
1
@RameshPareek да. Это довольно ясно, потому что я использую, duчтобы измерить размер этого файла.
Сехе
252

Обратите внимание, что начиная с git 1.8.3 (22 апреля 2013 г.) :

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

Это может быть объединено с -vвариантом, упомянутым Джеком Моррисоном в его ответе .

git gc
git count-objects -vH

(git gc Важно, как было упомянуто ABB «S ответ )

Плюс (все еще git 1.8.3), вывод более полный:

" git count-objects -v" научился сообщать об оставшихся временных пакетных файлах и другом мусоре в хранилище объектов .

VonC
источник
116

Команда git

git count-objects -v

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

С man-страницы Git:

-v, --verbose

Помимо количества незакрепленных объектов и места на диске, он сообщает количество объектов в упаковке, количество пакетов, дисковое пространство, используемое этими пакетами, и количество объектов, которые можно удалить с помощью 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нет (потому что это не в моем 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: дисковое пространство, занимаемое пакетами, в КиБах (если не указано -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})
Serv-вкл
источник
1
Это хорошо, потому что показывает больше информации, чем просто общий размер клонирования. Одна вещь, которая не показывает, что я все еще хотел бы знать, это то, насколько большим будет ZIP, если он будет загружен (он не содержит все коммиты).
НХ.
@IndrajeetGour: вам нужно установить с github.com/github/git-sizer/#getting-started . Загрузки находятся на github.com/github/git-sizer/releases .
серв-вкл
Будет ли @downvoter объяснять свои аргументы или нет?
серв-вкл
1

Если вы используете git LFS, git count-objects не считает ваши двоичные файлы, а только указывает на них.

Если ваши файлы LFS управляются Artifactorys, вы должны использовать REST API:

  • Получить API www.jfrog.com из любой поисковой системы
  • Посмотрите на сводную информацию о хранилище
elike
источник
1

я думаю, что это дает вам полный список всех файлов в истории репо:

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

Вы можете заменить --allна дерево ( HEAD, origin/masterи т. Д.), Чтобы рассчитать размер ветви.

user541686
источник
-1

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

Например, с хранилищем mptcp :

Размер многопутевого TCP-репозитория на Octodroid

Размер хранилища при клонировании

Отказ от ответственности: я не создал Octodroid.

RMPR
источник
1
Они находятся в разных единицах (ГБ х ГиБ). Кстати, 1,71 ГБ = 1,84 ГиБ, просто конвертируя и не заботясь о раундах.
Лучано
Извините, я перепутал их при наборе, правильное соотношение: 1,71 ГиБ = 1,84 Гб
Лучано