Ответ на вопрос 1 очень сложен, так как зависит от предоставленных опций. Тем не менее, ваша конкретная команда включает в себя:
--no-walk=unsorted
, что означает, что команда rev-list не * не только проходит по графику фиксации (именно там большинство времени тратится в основном на большинство *). 1006 * команд), он также даже не сортирует объекты, указанные в командной строке (что исключает вызов алгоритма сортировки; обычно сортировка - это O (n log n) по количеству сортируемых элементов - для большинства --no-walk
git rev-list
команд, в любом случае n здесь будет довольно маленьким).
В этом случае производительность git rev-list
будет зависеть от поиска идентификаторов объектов ha sh, указанных на командной строки и путем форматирования этих объектов с помощью директивы --format
. Вполне вероятно, что первое является медленной частью: объекты фиксации должны быть получены с диска (как свободные объекты или члены объекта пакета). Скорость этого будет зависеть от того, что находится в кеше вашей ОС, насколько эффективен этот кеш, количество свободных и упакованных объектов, количество пакетов и т. Д.
Недавно было исправлено быстродействие Git для использования в репозиториях с более чем 50 пакетными файлами. Если у вас> 50 файлов объектных пакетов и у вас нет этой версии Git, обновление вашего Git будет самым быстрым решением для этого. Вы также можете запустить git repack
, чтобы уменьшить количество файлов пакета.