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
) .
(Об'єднано Хуніо С Хамано - 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 р.) Джеффом Хостелером ( jeffhostetler
) .
(Об'єднав Хуніо С Хамано - 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 р.) Від Carlo Marcelo Arenas Belón ( carenas
) .
Див. Команду 3efa1c6 (12 червня 2019 р.) Від Ævar Arnfjörð Bjarmason ( avar
) .
(Об'єднав Хуніо С Хамано - gitster
- в комісії e9eaaa4 , 09 липня 2019 р.)
З цього випливає робота, виконана в Git 2.22: commit 4e0d3aa , commit e4b75d6 (19 травня 2019 р.) SZEDER Gábor ( szeder
) .
(Об'єднав Хуніо С Хамано - gitster
- у комітеті 463dca6 , 30 травня 2019 року)
trace2
: перейменуйте змінні середовища в GIT_TRACE2 *
Для змінної середовища, яку передбачається встановити користувачами, оточення GIT_TR2*
просто надто незрозуміле, непослідовне та некрасиве.
Більшість встановлених GIT_*
змінних оточення не використовують скорочення, а в разі небагатьох , які роблять ( GIT_DIR
, GIT_COMMON_DIR
, GIT_DIFF_OPTS
) абсолютно очевидно , що ці скорочення ( DIR
і OPTS
) позначають.
Але що означає TR
? Трек, традиційний, трейлер, транзакція, передача, перетворення, перехід, переклад, пересадка, транспорт, обхід, дерево, тригер, усічення, довіра, або ...?!
Засіб trace2, як випливає з його назви суфікс "2", повинен врешті-решт витіснити початкове об'єкт слідування Гіта.
Доцільно розраховувати, що відповідні змінні середовища слідують відповідності, а після оригінальних GIT_TRACE
змінних вони будуть викликані GIT_TRACE2
; немає такого поняття ' GIT_TR
'.
Усі змінні конфігурації trace2, дуже розумно, знаходяться в розділі ' trace2
', а не в ' tr2
'.
OTOH, ми взагалі нічого не отримуємо, опускаючи останні три символи "сліду" від назв цих змінних середовища .
Тому давайте перейменоваємо всі GIT_TR2*
змінні середовища GIT_TRACE2*
, перш ніж вони пробиваються до стабільного випуску.
Git 2.24 (Q3 2019) покращує ініціалізацію репозиторію Git.
Див. Команду 22932d9 , виконувати 5732f2b , здійснити 58ebccb (06 серпня 2019 року) Джеффа Кінга ( peff
) .
(Об’єднав Хуніо С Хамано - gitster
- в комітеті b4a1eec , 09 вересня 2019 р.)
common-main: затримка ініціалізації 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 р.) Jeff Hostetler ( jeffhostetler
) .
(Об’єднав Хуніо С Хамано - gitster
- у комітеті 93fc876 , 30 вересня 2019 р.)
І все-таки Git 2.24
Див. Команду 87db61a , виконувати 83e57b0 (04 жовтня 2019 р.) Та виконувати 2254101 , виконувати 3d4548e (03 жовтня 2019 р.) Джоша Стідмона ( steadmon
) .
(Об’єднав Хуніо С Хамано - gitster
- в комісії d0ce4d9 , 15 жовтня 2019 р.)
trace2
: відкиньте нові сліди, якщо в цільовому каталозі занадто багато файлів
Підписаний: Джош Стідмон
trace2
може записувати файли в цільовий каталог.
При великому використанні цей каталог може заповнюватися файлами, що спричиняє труднощі для систем оброблення слідів.
Цей патч додає опцію конфігурації ( 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
) .
(Об'єднав Хуніо С Хамано - gitster
- у комітці 3b9ec27 , 15 жовтня 2019 р.)
push
: додати інструмент trace2
Підписаний: Джош Стідмон
Додайте регіони trace2 у transport.c
та, builtin/push.c
щоб краще відстежувати час, проведений у різних фазах натискання:
- Лістинг реф
- Перевірка підмодулів
- Підштовхування підмодулів
- Натискання реф
З Git 2.25 (1 квартал 2020 року) частина файлів Documentation/technical
переміщена до *.h
файлів заголовків .
Див. Зробити 6c51cb5 , зробити d95a77d , зробити bbcfa30 , зробити f1ecbe0 , зробити 4c4066d , зробити 7db0305 , здійснити f3b9055 , зробити 971b1f2 , зробити 13aa9c8 , зробити c0be43f , зробити 19ef3dd , зробити 301d595 , зробити 3a1b351 , зробити 3a1b341 , зробити 3a1b351 , зробити 3a1b341 , зробити 3a1b341 d3d7172 , фіксувати 3f1480b , здійснювати 266f03e , фіксувати 13c4d7e(17 листопада 2019 р.) Від Heba Waly ( HebaWaly
) .
(Об’єднав Хуніо С Хамано - gitster
- у комітеті 26c816a , 16 грудня 2019 р.)
trace2
: перемістити док trace2.h
Підписався: Хеба Уолі
Перемістити документацію функції від Documentation/technical/api-trace2.txt
до , trace2.h
як це простіше для розробників , щоб знайти інформацію про використання поряд з кодом замість того , щоб шукати його в іншому файлі док.
Видаляється лише розділ документації щодо функцій, Documentation/technical/api-trace2.txt
оскільки файл переповнений деталями, які здаються більш доцільними у окремому файлі doc, як є, із посиланням на файл doc, доданим у trace2.h. Також вилучається документ doc, щоб уникнути надлишкової інформації, яку важко буде синхронізувати з документацією у файлі заголовка.
(хоча ця реорганізація мала побічний вплив на іншу команду, пояснювану та зафіксовану за допомогою Git 2.25.2 (березень 2020 р.) у програмі cc4f2eb (14 лютого 2020 р.) Джеффа Кінга ( peff
) .
(Об'єднав Хуніо С Хамано - gitster
- у коміті 1235384 , 17 лютого 2020 р.) )
З Git 2.27 (Q2 2020): удосконалення Trace2, щоб дозволити ведення журналу змінних середовища .
Див. Комісію 3d3adaa (20 березня 2020 р.) Джоша Стідмона ( steadmon
) .
(Об’єднав Хуніо С Хамано - gitster
- у комітеті 810dc64 , 22 квітня 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
) .
(Об'єднав Хуніо С Хамано - gitster
- у комітеті d98abce , 14 травня 2020 р.)
trace2
: час ходу та пропускну здатність журналу
Підписалися: Емілі Шаффер
Замість того, щоб навчати лише одній операції, як-от " git fetch
", як записати пропускну здатність до слідів, ми можемо дізнатися про широкий спектр операцій користувача, які можуть здатися повільними, додавши інструментарій до самої бібліотеки прогресу .
Операції, які демонструють прогрес, швидше за все будуть повільними, і ми хочемо відстежувати їх ефективність.
Показуючи кількість об'єктів та розмір передачі даних, ми повинні бути в змозі зробити деякі похідні вимірювання, щоб забезпечити масштабування операцій так, як ми очікуємо.
І:
Завдяки Git 2.27 (Q2 2020), виправлення в останню хвилину для наших останніх змін, щоб дозволити використовувати API прогресу як простежуваного регіону.
Дивіться комісію 3af029c (15 травня 2020 року) від Derrick Stolee ( derrickstolee
) .
(Об'єднав Хуніо С Хамано - 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
. Дивіться мою відповідь нижче .