Трассировка команд в 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 проводит больше всего времени.