Подтвердить что ты не робот

Когда я делаю "git push", что означает статистика? (Итого, дельта и т.д.)

Вот пример:

$ git push -u myserver master
Counting objects: 22, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (14/14), 1.89 KiB | 0 bytes/s, done.
Total 14 (delta 10), reused 0 (delta 0)
To myserver.com:git/myrepo.git
   ed46414..0cae272  master -> master
Branch master set up to track remote branch master from myserver.

В принципе, единственное число, которое имеет для меня какой-то смысл, - это 8 в "использовании до 8 потоков", потому что у меня есть четырехъядерный процессор с гиперпотоком, поэтому я могу запускать 8 потоков.

Что такое 22? Почему это говорит 22, а затем 14, что случилось с другим 8? Почему он говорит 0 байт/с, учитывая, что он делал вещи и занимал конечное время? Что такое "общая" и "дельта" и "повторно используется"?

Подробнее о примере: Пример выше скопирован с терминала в Mac OS X. Я вручную заменил find-replace на "myrepo" и "myserver.com", все else - дословно. Репозиторий имеет 910 коммитов, и я сделал около 3 коммитов с момента предыдущего нажатия. 3 новых фиксации затронули как минимум 3 файла. В репо содержится более тысячи файлов.

4b9b3361

Ответ 1

Короткий ответ

Это просто вывод команды git git count-objects -v для нажатия (та же команда вызывается для вывода, когда gc, pull и clone). Дополнительная информация на страницах руководства: git -count-objects (1).

$ git count-objects -v
...
size: 14 # The "Compressing objects: 100% (14/14)" part (the size in KiB)
in-pack: 22 # The "Counting objects: 22" part (the number of objects)
...

Длинный ответ

Counting objects: 22, done.

Это git 22 внутренних объекта, которые подсчитываются для этой конкретной фиксации. Практически все в git является объектом и в основном являются блобами, сохраненными в вашей папке .git/objects под их соответствующим хэшем. Дополнительная информация на страницах руководства: 9.2 git Внутренние - git Объекты.

Compressing objects: 100% (14/14), done.

Это git сжатие объектов перед отправкой. 14/14 - это прогрессия в KiB сжатия (14 KiB для сжатия).

Writing objects: 100% (14/14), 1.89 KiB | 0 bytes/s, done.

Это git отправка (если удаленная) и запись объектов. 1,89 KiB | 0 байт/с - это прогрессия в KiB и скорость (0 байт/с при завершении).

Total 14 (delta 10), reused 0 (delta 0)

Это результат алгоритма пакетного файла в git (см. 9.4 git Internals - Packfiles) и довольно неясен. Он в основном упаковывает неиспользуемые объекты, обычно старую историю, в .git/objects/pack. После упаковки git проверяет, может ли он повторно использовать пакеты (следовательно, часть повторно используется 0). Элементом delta 0 является коэффициент усиления в KiB из упаковки или повторного использования.

Ответ 2

Git - адресная файловая система. т.е. он принимает объект (файл, дерево, фиксацию) и сохраняет его в файлах, адресуемых хешей.

Предположим, вы вносите очень небольшое изменение в файл. Должен ли git хранить полный файл как другой объект? Хорошо. Но иногда (во время push, pull), git вычисляет изменения файла как дельта и сохраняет их вместо полных файлов.

Это означает, что самая последняя версия файла хранится в полном объеме (поскольку она должна быть доступна наиболее легко), более старая версия того же файла представляет собой просто объект, содержащий разницу между двумя и т.д.

Таким образом, git сохраняет пространство, сохраняя возможность восстановления файла для любой версии, которую вы на нее набрасываете.

Теперь на ваш вопрос:

Counting objects: 22, done.: git подсчитывает объект, связанный с вашими фиксациями, которые вы нажимаете.

Total 14 (delta 10): git удалось уменьшить количество объектов, набрав 10 дельт.

reused 0 (delta 0): git может повторно использовать объекты дельты, если они уже существуют. Например, если подобные изменения могли быть введены в другом файле, дельта может быть схожей и многоразовой. Здесь нечего было повторять.

Writing objects: 100% (14/14), 1.89 KiB | 0 bytes/s, done. Здесь git отправляет (или записывает) объекты по сети, и вы можете видеть статистику прогресса и скорости, когда это делает.

Надеюсь, что это поможет.