Трассировка команд в Git
Apr 29, 2018 · CommentsGit
Недавно разбирался почему клонирование большого репозитория в Git занимает так много времени. Текущая версия ответа “ну репозиторий же большой, что ж вы хотели-то?” звучит логично, но все равно руки чешутся найти какую-нибудь глупость и ускорить этот процесс раза в два. Пока что-то не очень получается…
Пока копался в недрах наткнулся на то, что Git содержит встроенную трассировку
команд. Трассировка включается через переменные окружения вида GIT_TRACE_XXX
.
Если значение переменной true
, 1
или 2
- отладочные сообщения будут
писаться в stderr
. Если значение переменной - абсолютный путь, начинающийся с
/
, то отладочные сообщения будут писаться в этот файл.
Поддерживаются следующие категории сообщений:
GIT_TRACE
: общие сообщения, которые не попали в другие категории.GIT_TRACE_PACK_ACCESS
: отладка обращений к.pack
файлам.GIT_TRACE_PACKET
: трассировка пакетов для сетевых операций.GIT_TRACE_PERFORMANCE
: выдает информацию о производительности - в основном меряет время, затраченное различными операциями.GIT_TRACE_SETUP
: выводит информацию о рабочей копии и окружении.
Разные категории сообщений могут писаться в один файл. Новые сообщения дописываются в конец файла.
Возможность писать сообщения в файл особенно удобна. К примеру, я добавил
export GIT_TRACE_PERFORMANCE=/home/<user>/git_trace.log
в .zshrc
и теперь
если Git неожиданно замирает на ровном месте, tail -n30 ~/git_trace.txt
выдает
мне сводку где Git проводит больше всего времени.