Возможно, вы сможете достичь своих целей более эффективно, используя теги и ветки или систему конфигурации времени сборки.
Есть ли в репозитории абсурдно длинные имена путей? Вероятно, это не будет хорошо работать с другими инструментами. Одного-двух сотен символов должно быть достаточно, даже если вы пишете на Java.
Существуют ли другие странные и сомнительные вещи в репозитории?
** Аннотированные теги, указывающие друг на друга в длинных цепочках? **
** Объединения осьминога с десятками родителей? **
** Коммиты с гигантскими сообщениями журнала? **
Программа «git-sizer» вычисляет множество статистических данных о размере вашего репозитория, которые могут помочь выявить все проблемы, описанные выше. Эти методы сами по себе не являются неправильными, но чем больше вы выходите за рамки возможностей Git, тем меньше вы сможете наслаждаться легендарной скоростью и производительностью Git. Особенно если статистика вашего репозитория Git кажется непропорциональной размеру вашего проекта, вы можете упростить свою жизнь, изменив способ использования Git.
Убедитесь, что у вас установлен клиент командной строки Git (https://git-scm.com/), версия >= 2.6. ПРИМЕЧАНИЕ: «git-sizer» вызывает команды git для изучения содержимого вашего репозитория, поэтому при запуске «git-sizer» необходимо, чтобы команда git находилась в вашем PATH.
Установите «git-sizer». Либо:
а) Установите выпущенную версию «git-sizer» (рекомендуется): 1. Перейдите на страницу выпусков (https://github.com/github/git-sizer/releases) и загрузите ZIP-файл, соответствующий вашей платформе. 2. Распакуйте файл. 3. Переместите исполняемый файл («git-sizer» или «git-sizer.exe») в ваш PATH.
б) Соберите и установите из исходного кода. См. инструкции в docs/BUILDING.md.
Измените каталог, содержащий полный, немелкий клон репозитория Git, который вы хотите проанализировать. Затем запустите:
git-sizer [<option>...]
Никаких опций не требуется. Вы можете узнать о доступных опциях, набрав «git-sizer -h» или прочитав далее.
Совет: Если вы добавите «git-sizer» в свой PATH, то сможете запустить его, набрав либо «git-sizer», либо «git sizer». В последнем случае он будет найден и запущен для вас Git, и вы сможете добавить дополнительные параметры Git между двумя словами, например «git -C /path/to/my/repo sizer». Если вы не добавите «git-sizer» в свой PATH, вам, конечно, нужно будет ввести полный путь и имя файла для его запуска; например, /path/to/bin/git-sizer. В любом случае исполняемый файл git должен находиться в вашем PATH.
По умолчанию «git-sizer» выводит результаты в табличном формате. Например, давайте используем его для анализа репозитория Linux (https://github.com/torvalds/linux), используя опцию «--verbose», чтобы вывести всю статистику:
$ 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 ГиБ | ***** |
| * Аннотированные теги | | |
| * Количество | 534 | |
| * Ссылки | | |
| * Количество | 539 | |
| | | |
| Самые большие объекты | | |
| * Коммиты | | |
| * Максимальный размер [1] | 72,7 КиБ | * |
| * Максимальное количество родителей [2] | 66 | ****** |
| * Деревья | | |
| * Максимальное количество записей [3] | 1,68 тыс. | * |
| * Блоб-объекты | | |
| * Максимальный размер [4] | 13,5 МиБ | * |
| | | |
| Структура истории | | |
| * Максимальная глубина истории | 136 тыс. | |
| * Максимальная глубина тегов [5] | 1 | |
| | | |
| Крупнейшие извлечения | | |
| * Количество каталогов [6] | 4,38 тыс. | ** |
| * Максимальная длина пути [7] | 13 | * |
| * Максимальная длина имени файла [8] | 134 Б | * |
| * Количество файлов [9] | 62,3 тыс. | * |
| * Общий размер файлов [9] | 747 МиБ | |
| * Количество символьных ссылок [10] | 40 | |
| * Количество подмодулей | 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}) **tag depth** сообщает о самой длинной цепочке аннотированных тегов, которые указывают на другие аннотированные теги.
Раздел **«Самые большие извлечения»** касается размеров коммитов, извлечённых в рабочую копию. **«Максимальная глубина пути»** — это наибольшее количество компонентов пути для файлов в рабочей копии, а **«максимальная длина пути»** — самый длинный путь в байтах. **«Общий размер файлов»** — сумма всех размеров файлов в одном самом большом коммите, включая кратности, если один и тот же файл появляется несколько раз.
Столбец **«Значение»** отображает подсчёты с использованием единиц «k» (тысяча), «M» (миллион), «G» (миллиард) и т. д., а также размеры с использованием единиц «B» (байт), «KiB» (1024 байта), «MiB» (1024 KiB) и т. д. Обратите внимание, что если значение переполняет свой счётчик (что должно происходить только для вредоносных репозиториев), соответствующее значение отображается как ∞ в табличной форме или усекается до 2³²-1 или 2⁶⁴-1 (в зависимости от размера счётчика) в режиме JSON.
В столбце **«Уровень беспокойства»** используются звёздочки для обозначения значений, которые кажутся высокими по сравнению со «стандартными» репозиториями Git. Чем больше звёздочек, тем больше неудобств может вызвать этот аспект вашего репозитория. Восклицательные знаки указывают на чрезвычайно высокие значения (т. е. эквивалентные более чем 30 звёздочкам).
Сноски содержат SHA-1 самых больших объектов, упомянутых в таблице, вместе с более удобочитаемым описанием `<commit>:<path>`, где находится объект в истории репозитория. Зная имя большого объекта, вы можете, например, ввести
git cat-file -p <commit>:<path>
в командной строке, чтобы просмотреть содержимое объекта. (Используйте `--names=none`, если хотите опустить эти сноски.)
По умолчанию сообщается только статистика выше минимального уровня беспокойства. Используйте `--verbose` (как указано выше), чтобы запросить вывод всей статистики. Используйте `--threshold=<value>`, чтобы подавить сообщение о статистике ниже указанного уровня беспокойства (`<value>` интерпретируется как числовое значение, соответствующее количеству звёздочек). Используйте `--critical`, чтобы сообщать только о статистике критического уровня беспокойства (эквивалентно `--threshold=30`).
Если вы хотите получить вывод в машиночитаемом формате, включая точные числа, используйте опцию `--json`. Вы можете использовать `--json-version=1` или `--json-version=2`, чтобы выбрать между старым и новым стилем вывода JSON.
Чтобы получить список других опций, запустите
git-sizer -h
Репозиторий Linux большой по большинству стандартов. Как видите, он достигает некоторых пределов Git. И действительно, некоторые операции Git с репозиторием Linux (например, `git fsck`, `git gc`) занимают некоторое время. Но благодаря своей разумной структуре ни одно из его измерений не выходит за рамки пропорций по отношению к размеру кодовой базы, поэтому проект ядра успешно управляется с помощью Git.
Вот вывод без подробного описания для одного из знаменитых репозиториев [«git bomb»](https://kate.io/blog/git-bomb/):
$ git-sizer [...]
Name | Value | Level of concern |
---|---|---|
Biggest checkouts | ||
* Number of directories [1] | 1.11 G | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
* Maximum path depth [1] | 11 | * |
* Number of files [1] | ∞ | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
* Total size of files [2] | 83.8 GiB | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
[1] c1971b07ce6888558e2178a121804774c4201b17 (refs/heads/master^{tree}) [2] d9513477b01825130c48c4bebed114c4b2d50401 (18ed56cbc5012117e24a603e7c072cf65d36d469^{tree})
Этот репозиторий намеренно сконструирован так, чтобы иметь патологическую древовидную структуру с одними и теми же каталогами, повторяющимися снова и снова. В результате, хотя весь репозиторий имеет размер менее 20 кб, при извлечении он разрастётся до более миллиарда каталогов, содержащих более десяти миллиардов файлов. (`git-sizer` печатает ∞ для количества больших двоичных объектов, потому что истинное число превысило 32-битный счётчик, используемый для этого поля.) И всё ещё находится в активной разработке. Если вы хотите помочь, пожалуйста, смотрите CONTRIBUTING.md.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )