Git 2,22 (Q2 2019) вводит trace2
с фиксации ee4512e на Джеффа Hostetler :
trace2
: создать новое комбинированное средство трассировки
Создайте новое унифицированное средство трассировки для git.
Возможная цель - заменить ток trace_printf*
и trace_performance*
подпрограммы унифицированным набором git_trace2*
подпрограмм.
В дополнение к обычному API в стиле printf trace2
предоставляет высокоуровневые глаголы событий с фиксированными полями, позволяющими записывать структурированные данные.
Это облегчает постобработку и анализ для внешних инструментов.
Trace2 определяет 3 выходных цели.
Они устанавливаются с помощью переменных среды " GIT_TR2
", " GIT_TR2_PERF
" и " GIT_TR2_EVENT
".
Они могут быть установлены на «1» или на абсолютное имя пути (как текущий GIT_TRACE
).
Примечание: в отношении имени переменной среды всегда используйте GIT_TRACExxx
, а не GIT_TRxxx
.
Так на самом деле GIT_TRACE2
, GIT_TRACE2_PERF
или GIT_TRACE2_EVENT
.
См. Переименование Git 2.22, упомянутое ниже.
Далее следует начальная работа над этой новой функцией трассировки со старыми именами переменных среды:
GIT_TR2
предназначен для замены GIT_TRACE
и регистрации сводных данных команды.
GIT_TR2_PERF
предназначен для замены GIT_TRACE_PERFORMANCE
.
Он расширяет вывод столбцами для командного процесса, потока, репо, абсолютного и относительного затраченного времени. Он сообщает о событиях для запуска / остановки дочернего процесса, запуска / остановки потока и вложенности функций для каждого потока.
GIT_TR2_EVENT
это новый структурированный формат. Он записывает данные о событиях в виде серии записей JSON.
Вызовы функций trace2 регистрируются в любой из 3 включенных выходных целей без необходимости вызывать разные trace_printf*
или trace_performance*
подпрограммы.
Смотрите коммит a4d3a28 (21 марта 2019 г.) Джоша Стедмона ( steadmon
) .
(Слиты Junio C Hamano - gitster
- в фиксации 1b40314 , 08 мая 2019)
trace2
: запись в каталог цели
Если значение переменной среды trace2 представляет собой абсолютный путь, относящийся к существующему каталогу, запишите выходные данные в файлы (по одному на процесс) под данным каталогом.
Файлы будут именоваться в соответствии с последним компонентом SID trace2, за которым следует счетчик, чтобы избежать возможных конфликтов.
Это делает более удобным собирать трассировки для каждого вызова git, безоговорочно устанавливая в соответствующем trace2
envvar постоянное имя каталога.
Смотрите также совершать f672dee (29 Апр 2019), а также совершать 81567ca , совершает 08881b9 , совершают bad229a , совершает 26c6f25 , совершает bce9db6 , совершает 800a7f9 , совершает a7bc01e , совершает 39f4317 , совершает a089724 , совершает 1703751 (15 апр 2019) по Джеффу Hostetler ( jeffhostetler
) ,
(Слиты Junio C Hamano - gitster
- в фиксации 5b2d1c0 , 13 мая 2019)
Новая документация теперь включает в себя параметры конфигурации , которые считываются только из системы и глобальных конфигурационных файлов (означающие хранилища локальных и worktree конфигурационных файлов и-c
аргументы командной строки , не соблюдаются.)
Пример :
$ git config --global trace2.normalTarget ~/log.normal
$ git version
git version 2.20.1.155.g426c96fcdb
доходность
$ cat ~/log.normal
12:28:42.620009 common-main.c:38 version 2.20.1.155.g426c96fcdb
12:28:42.620989 common-main.c:39 start git version
12:28:42.621101 git.c:432 cmd_name version (version)
12:28:42.621215 git.c:662 exit elapsed:0.001227 code:0
12:28:42.621250 trace2/tr2_tgt_normal.c:124 atexit elapsed:0.001265 code:0
И для измерения производительности :
$ git config --global trace2.perfTarget ~/log.perf
$ git version
git version 2.20.1.155.g426c96fcdb
доходность
$ cat ~/log.perf
12:28:42.620675 common-main.c:38 | d0 | main | version | | | | | 2.20.1.155.g426c96fcdb
12:28:42.621001 common-main.c:39 | d0 | main | start | | 0.001173 | | | git version
12:28:42.621111 git.c:432 | d0 | main | cmd_name | | | | | version (version)
12:28:42.621225 git.c:662 | d0 | main | exit | | 0.001227 | | | code:0
12:28:42.621259 trace2/tr2_tgt_perf.c:211 | d0 | main | atexit | | 0.001265 | | | code:0
Как описано в Git 2.23 (Q3 2019), используемая переменная среды GIT_TRACE2
.
См. Коммит 6114a40 (26 июня 2019 г.) Карло Марсело Аренаса Белона ( carenas
) .
См. Коммит 3efa1c6 (12 июня 2019 г.), автор fvar Arnfjörð Bjarmason ( avar
) .
(Слиты Junio C Hamano - gitster
- в фиксации e9eaaa4 , 09 июл 2019)
Это следует за работой, проделанной в Git 2.22: коммит 4e0d3aa , коммит e4b75d6 (19 мая 2019 г.) от SZEDER Gábor ( szeder
) .
(Слиты Junio C Hamano - gitster
- в фиксации 463dca6 , 30 мая 2019)
trace2
: переименование переменных среды в GIT_TRACE2 *
Для переменной среды, которая должна быть установлена пользователями, GIT_TR2*
переменные env слишком неясны, непоследовательны и ужасны.
Большинство установленных GIT_*
переменных окружения не используют сокращения, а в случае немногих , которые делают ( GIT_DIR
, GIT_COMMON_DIR
, GIT_DIFF_OPTS
) совершенно очевидно , что эти сокращения ( DIR
и OPTS
) обозначают.
Но что означает TR
? Трек, традиционный, трейлер, транзакция, передача, трансформация, переход, перевод, трансплантация, транспорт, обход, дерево, триггер, усечение, доверие или ...?!
Предполагается, что средство trace2, как следует из названия суффикса «2», в конечном итоге заменит первоначальное средство трассировки Git.
Разумно ожидать, что соответствующие переменные среды последуют их примеру, и после исходных GIT_TRACE
переменных они вызываются GIT_TRACE2
; нет такой вещиGIT_TR
».
Все специфичные для trace2 переменные конфигурации очень разумно находятся в trace2
разделе «, а не в tr2
».
OTOH, мы ничего не получаем, опуская последние три символа «trace» в именах этих переменных среды .
Итак, давайте переименуем все GIT_TR2*
переменные среды GIT_TRACE2*
, прежде чем они попадут в стабильный выпуск.
Git 2.24 (Q3 2019) улучшает инициализацию репозитория Git.
См. Коммит 22932d9 , коммит 5732f2b , коммит 58ebccb (06 августа 2019 г.) Джеффом Кингом ( peff
) .
(Объединено Junio C Hamano - gitster
- в коммите b4a1eec , 09 сентября 2019 г.)
общее: задержка инициализации trace2
Мы инициализируем trace2
систему в общей функции main (), чтобы все программы (даже не встроенные) включали трассировку.
Но trace2
запуск относительно тяжелый, так как мы должны фактически прочитать конфигурацию на диске, чтобы решить, следует ли отслеживать.
Это может вызвать неожиданные взаимодействия с другими общими основными инициализации. Например, мы будем в конечном итоге в коде конфигурации перед вызовом initialize_the_repository()
, и обычный инвариант, которыйthe_repository
никогда не равен NULL, не будет удерживаться.
Давайте продвинем trace2
инициализацию дальше в общем-общем, непосредственно перед тем, как мы выполним cmd_main()
.
Git 2.24 (Q4 2019) также гарантирует, что вывод из trace2
подсистемы теперь более отформатирован.
См. Коммит 742ed63 , коммит e344305 , коммит c2b890a (09 августа 2019 г.), коммит ad43e37 , коммит 04f10d3 , коммит da4589c (08 авг 2019 г.) и коммит 371df1b (31 июля 2019 г.) Джеффом Хостетлером ( jeffhostetler
) .
(Слиты Junio C Hamano - gitster
- в фиксации 93fc876 , 30 Sep 2019)
И еще Git 2.24
См. Коммит 87db61a , коммит 83e57b0 (04 октября 2019 г.) и коммит 2254101 , коммит 3d4548e (03 октября 2019 г.) Джоша Стедмона ( steadmon
) .
(Слиты Junio C Hamano - gitster
- в фиксации d0ce4d9 , 15 октября 2019)
trace2
: отменить новые трассы, если в целевом каталоге слишком много файлов
Подписано: Джош Стедмон
trace2
может записывать файлы в целевой каталог.
При интенсивном использовании этот каталог может заполняться файлами, что создает трудности для систем обработки трассировки.
Этот патч добавляет опцию config ( trace2.maxFiles
) для установки максимального количества файлов, которые trace2
будут записываться в целевой каталог.
Следующее поведение включается, если для свойства maxFiles
установлено положительное целое число:
Когда trace2
нужно записать файл в целевой каталог, сначала проверьте, следует ли отбрасывать следы. Следы следует отбросить, если:
- есть сторожевой файл, объявляющий, что файлов слишком много
- ИЛИ, количество файлов превышает
trace2.maxFiles
.
В последнем случае мы создаем сторожевой файл с именем, git-trace2-discard
чтобы ускорить будущие проверки.
Предполагается, что отдельная система обработки трасс имеет дело с генерируемыми трассами; как только он обрабатывает и удаляет файл часового, будет безопасно снова генерировать новые файлы трассировки.
По умолчанию значение trace2.maxFiles
равно нулю, что отключает проверку количества файлов.
Конфигурации также могут быть переопределены с новым переменным окружением: GIT_TRACE2_MAX_FILES
.
А в Git 2.24 (Q4 2019) учат trace2 о git push
стадиях.
Смотрите коммит 25e4b80 , коммит 5fc3118 (02 октября 2019 г.) Джоша Стедмона ( steadmon
) .
(Слиты Junio C Hamano - gitster
- в фиксации 3b9ec27 , 15 окт 2019)
push
: добавить инструментальные средства trace2
Подписано: Джош Стедмон
Добавьте области trace2 в transport.c
и, builtin/push.c
чтобы лучше отслеживать время, проведенное в различных фазах нажатия:
- Список ссылок
- Проверка подмодулей
- Толкающие подмодули
- Нажав ссылки
В Git 2.25 (Q1 2020) некоторые из Documentation/technical
них перемещены в заголовочные *.h
файлы.
См совершать 6c51cb5 , совершать d95a77d , совершает bbcfa30 , совершает f1ecbe0 , совершают 4c4066d , совершает 7db0305 , совершает f3b9055 , совершает 971b1f2 , совершает 13aa9c8 , совершают c0be43f , совершают 19ef3dd , совершает 301d595 , совершает 3a1b341 , совершает 126c1cc , совершает d27eb35 , совершает 405c6b1 , совершить d3d7172 , совершают 3f1480b , совершают 266f03e , коммит 13c4d7e(17 ноября 2019 г.)Хеба Вали ( HebaWaly
) .
(Слиты Junio C Hamano - gitster
- в фиксации 26c816a , 16 дек 2019)
trace2
: переместить документ в trace2.h
Подписано: Хеба Вали
Переместите документацию по функциям из Documentation/technical/api-trace2.txt
в, trace2.h
поскольку разработчикам легче найти информацию об использовании рядом с кодом, а не искать ее в другом файле документа.
Из раздела удален только раздел документации по функциям, так Documentation/technical/api-trace2.txt
как файл полон деталей, которые, как представляется, более уместны, чтобы быть в отдельном файле документа, как есть, со ссылкой на файл документа, добавленный в trace2.h. Также удалена функция doc, чтобы избежать избыточной информации, которую будет сложно синхронизировать с документацией в заголовочном файле.
(хотя эта реорганизация имела побочный эффект для другой команды, объяснена и исправлена с помощью Git 2.25.2 (март 2020 г.) в коммите cc4f2eb (14 февраля 2020 г.) Джеффом Кингом ( peff
) .
(Объединено с Junio C Hamano - gitster
- в коммите 1235384 , 17 февраля 2020 г.) )
С Git 2.27 (Q2 2020): усовершенствование Trace2, позволяющее регистрировать переменные среды .
Смотрите коммит 3d3adaa (20 марта 2020 г.) Джоша Стедмона ( steadmon
) .
(Слиты Junio C Hamano - gitster
- в фиксации 810dc64 , 22 Apr 2020)
trace2
: научить Git регистрировать переменные среды
Подписано: Джош Стедмон
Пост: Джефф Хостетлер
Через trace2 Git уже может регистрировать интересные параметры конфигурации (см. trace2_cmd_list_config()
Функцию). Однако это может дать неполное изображение, поскольку многие параметры конфигурации также допускают переопределения через переменные среды.
Чтобы обеспечить более полные журналы, мы добавляем новую trace2_cmd_list_env_vars()
функцию и поддерживающую реализацию, смоделированную после существующей реализации регистрации параметров конфигурации.
С помощью Git 2.27 (Q2 2020) научите кодовые пути, которые показывают индикатор хода выполнения, также использовать start_progress()
и stop_progress()
вызовы как « region
» для отслеживания.
См. Коммит 98a1364 (12 мая 2020 г.) Эмили Шаффер ( nasamuffin
) .
(Слиты Junio C Hamano - gitster
- в фиксации d98abce , 14 мая 2020)
trace2
: регистрировать время выполнения и пропускную способность
Подписано: Эмили Шаффер
Вместо того, чтобы учить только одной операции, такой как ' git fetch
', как записывать пропускную способность в трассировки, мы можем узнать о широком спектре пользовательских операций, которые могут показаться медленными, добавляя инструменты в саму библиотеку прогресса .
Операции, которые отображают прогресс, вероятно, будут медленными, и мы все равно хотим отслеживать производительность.
Показывая количество объектов и размер передаваемых данных, мы должны быть в состоянии сделать некоторые производные измерения, чтобы гарантировать, что операции масштабируются так, как мы ожидаем.
И:
С Git 2.27 (Q2 2020), в последнюю минуту исправлено наше недавнее изменение, позволяющее использовать API прогресса в качестве отслеживаемого региона.
См. Коммит 3af029c (15 мая 2020 г.) Деррика Столи ( derrickstolee
) .
(Слиты Junio C Hamano - gitster
- в фиксации 85d6e28 , 20 мая 2020)
progress
: звонить trace2_region_leave()
только после звонка_enter()
Подписано: Деррик Стоули
Пользователь о ходе API вызовов start_progress()
условно и зависит от display_progress()
и stop_progress()
функции стать не оп , когда start_progress()
не был вызван.
Как мы добавили вызов trace2_region_enter()
к start_progress()
, звонки на другие вызовы API trace2 из функций API прогресса должны убедиться , что эти trace2 вызовы пропускаются , когда start_progress()
не были вызваны на прогресс структуру.
В частности, не называйте trace2_region_leave()
из stop_progress()
когда мы не заехали start_progress()
, которые назвали бы соответствие trace2_region_enter()
.
GIT_CURL_VERBOSE
, у вас будет Git 2.9.x / 2.10GIT_TRACE_CURL
. Смотрите мой ответ ниже .