Git 2.22 (Q2 2019) wprowadza trace2
z zatwierdzeniem ee4512e autorstwa Jeffa Hostetlera :
trace2
: utwórz nowe połączone narzędzie śledzenia
Utwórz nowe ujednolicone narzędzie do śledzenia dla git.
Ostatecznym zamiarem jest zastąpienie obecnych trace_printf*
i trace_performance*
procedur ujednoliconym zestawem git_trace2*
procedur.
Oprócz zwykłego interfejsu API w stylu printf trace2
zapewnia czasowniki zdarzeń wyższego poziomu ze stałymi polami, które umożliwiają zapisywanie danych strukturalnych.
Ułatwia to przetwarzanie końcowe i analizę dla narzędzi zewnętrznych.
Trace2 definiuje 3 cele wyjściowe.
Są one ustawiane za pomocą zmiennych środowiskowych „ GIT_TR2
”, „ GIT_TR2_PERF
” i „ GIT_TR2_EVENT
”.
Mogą być ustawione na „1” lub na bezwzględną nazwę ścieżki (tak jak bieżąca GIT_TRACE
).
Uwaga: jeśli chodzi o nazwę zmiennej środowiskowej, zawsze używaj GIT_TRACExxx
, nie GIT_TRxxx
.
Więc faktycznie GIT_TRACE2
, GIT_TRACE2_PERF
albo GIT_TRACE2_EVENT
.
Zobacz zmianę nazwy Git 2.22 wspomnianą poniżej.
Poniżej przedstawiono wstępne prace nad tą nową funkcją śledzenia ze starymi nazwami zmiennych środowiskowych:
GIT_TR2
ma na celu zastąpienie GIT_TRACE
danych podsumowania poleceń i rejestruje je.
GIT_TR2_PERF
jest przeznaczony jako zamiennik GIT_TRACE_PERFORMANCE
.
Rozszerza dane wyjściowe o kolumny dotyczące procesu polecenia, wątku, repozytorium, bezwzględnych i względnych czasów, które upłynęły. Raportuje zdarzenia dla rozpoczęcia / zakończenia procesu potomnego, rozpoczęcia / zatrzymania wątku i zagnieżdżenia funkcji na wątek.
GIT_TR2_EVENT
to nowy ustrukturyzowany format. Zapisuje dane zdarzenia jako serię rekordów JSON.
Wywołania funkcji trace2 rejestrują się w dowolnym z 3 włączonych docelowych wartości wyjściowych bez konieczności wywoływania różnych procedur trace_printf*
lub trace_performance*
.
Zobacz commit a4d3a28 (21 marca 2019) autorstwa Josha Steadmona ( steadmon
) .
(Scalone przez Junio C Hamano - gitster
- w zobowiązaniu 1b40314 , 08 maja 2019 r.)
trace2
: napisz do katalogu docelowego
Gdy wartość zmiennej środowiskowej trace2 jest ścieżką bezwzględną odnoszącą się do istniejącego katalogu, zapisz dane wyjściowe do plików (po jednym na proces) w podanym katalogu.
Pliki zostaną nazwane zgodnie z ostatnim składnikiem identyfikatora SID trace2, po którym nastąpi licznik, aby uniknąć potencjalnych kolizji.
Ułatwia to zbieranie śladów dla każdego wywołania git przez bezwarunkowe ustawienie odpowiedniej trace2
zmiennej envv na stałą nazwę katalogu.
Zobacz także commit f672dee (29 kwietnia 2019) i commit 81567ca , commit 08881b9 , commit bad229a , commit 26c6f25 , commit bce9db6 , commit 800a7f9 , commit a7bc01e , commit 39f4317 , commit a089724 , commit 1703751 (15 April 2019) by Jeff Hostetler ( jeffhostetler
) .
(Scalenie przez Junio C Hamano - gitster
- w zatwierdzeniu 5b2d1c0 , 13 maja 2019 r.)
Nowa dokumentacja zawiera teraz ustawienia konfiguracyjne, które są odczytywane tylko z systemem i globalnych plików konfiguracyjnych (czyli repozytorium lokalne i worktree pliki konfiguracyjne i -c
argumenty wiersza poleceń nie są przestrzegane).
Przykład :
$ git config --global trace2.normalTarget ~/log.normal
$ git version
git version 2.20.1.155.g426c96fcdb
plony
$ 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
I dla pomiaru wydajności :
$ git config --global trace2.perfTarget ~/log.perf
$ git version
git version 2.20.1.155.g426c96fcdb
plony
$ 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
Jak udokumentowano w Git 2.23 (Q3 2019), używaną zmienną środowiskową jest GIT_TRACE2
.
Zob. Zobowiązanie 6114a40 (26 czerwca 2019 r.) Autorstwa Carlo Marcelo Arenas Belón ( carenas
) .
Zobacz commit 3efa1c6 (12 czerwca 2019) autorstwa Ævara Arnfjörð Bjarmason ( avar
) .
(Scalony przez Junio C Hamano - gitster
- w zatwierdzeniu e9eaaa4 , 09 lipca 2019)
Wynika to z pracy wykonanej w Git 2.22: commit 4e0d3aa , commit e4b75d6 (19 maja 2019) przez SZEDER Gábor ( szeder
) .
(Scalone przez Junio C Hamano - gitster
- w zobowiązaniu 463dca6 , 30 maja 2019 r.)
trace2
: zmień nazwę zmiennych środowiskowych na GIT_TRACE2 *
W przypadku zmiennej środowiskowej, która ma być ustawiana przez użytkowników, zmienne GIT_TR2*
env są po prostu zbyt niejasne, niespójne i brzydkie.
Większość ustalonych GIT_*
zmiennych środowiskowych nie używać skrótów, aw przypadku niewielu, które zrobić ( GIT_DIR
, GIT_COMMON_DIR
, GIT_DIFF_OPTS
) jest to dość oczywiste, co skróty ( DIR
a OPTS
) oznaczają.
Ale co to TR
oznacza? Śledzenie, tradycyjne, przyczepa, transakcja, transfer, transformacja, przejście, tłumaczenie, przeszczep, transport, przechodzenie, drzewo, wyzwalacz, obcinanie, zaufanie lub ...?!
Narzędzie trace2, jak sugeruje przyrostek „2” w jego nazwie, ma ostatecznie zastąpić oryginalne narzędzie śledzenia Git.
Rozsądnie jest oczekiwać, że odpowiadające im zmienne środowiskowe pójdą w ich ślady i po oryginalnych GIT_TRACE
zmiennych są wywoływane GIT_TRACE2
; nie ma czegoś takiego ' GIT_TR
'.
Wszystkie zmienne konfiguracyjne specyficzne dla trace2 znajdują się, bardzo rozsądnie, w sekcji „ trace2
”, a nie w „ tr2
”.
OTOH, nic nie zyskujemy, pomijając ostatnie trzy znaki „trace” w nazwach tych zmiennych środowiskowych .
Więc zmieńmy nazwy wszystkich GIT_TR2*
zmiennych środowiskowych na GIT_TRACE2*
, zanim trafią do stabilnej wersji.
Git 2.24 (Q3 2019) usprawnia inicjalizację repozytorium Git.
Zobacz commit 22932d9 , commit 5732f2b , commit 58ebccb (06 sierpnia 2019) autorstwa Jeffa Kinga ( peff
) .
(Scalone przez Junio C Hamano - gitster
- w zatwierdzeniu b4a1eec , 09 września 2019)
common-main: opóźnienie inicjalizacji trace2
Inicjalizujemy trace2
system we wspólnej funkcji main (), aby wszystkie programy (nawet te, które nie są wbudowane) umożliwiały śledzenie.
Ale trace2
uruchomienie jest stosunkowo ciężkie, ponieważ musimy faktycznie przeczytać konfigurację na dysku, aby zdecydować, czy śledzić.
Może to spowodować nieoczekiwane interakcje z innymi inicjalizacjami typu common-main. Na przykład skończymy w kodzie konfiguracji przed wywołaniem initialize_the_repository()
, a zwykły niezmiennik, który the_repository
nigdy nie ma wartości NULL, nie będzie przechowywany.
Wciśnijmy trace2
inicjalizację niżej w common-main, tuż przed wykonaniem cmd_main()
.
Git 2.24 (Q4 2019) zapewnia również, że dane wyjściowe z trace2
podsystemu są teraz ładniej sformatowane.
Zobacz commit 742ed63 , commit e344305 , commit c2b890a (09 sierpnia 2019), commit ad43e37 , commit 04f10d3 , commit da4589c (08 sierpnia 2019) i commit 371df1b (31 lipca 2019) autorstwa Jeffa Hostetlera ( jeffhostetler
) .
(Scalone przez Junio C Hamano - gitster
- w zobowiązaniu 93fc876 , 30 września 2019)
I nadal Git 2.24
Zobacz commit 87db61a , commit 83e57b0 (04 października 2019) i commit 2254101 , commit 3d4548e (03 Oct 2019) autorstwa Josha Steadmona ( steadmon
) .
(Scalone przez Junio C Hamano - gitster
- w zatwierdzeniu d0ce4d9 , 15 października 2019)
trace2
: odrzuca nowe ślady, jeśli katalog docelowy zawiera zbyt wiele plików
Podpisał: Josh Steadmon
trace2
może zapisywać pliki w katalogu docelowym.
Przy intensywnym użytkowaniu katalog ten może zapełnić się plikami, powodując trudności dla systemów śledzenia.
Ta poprawka dodaje opcję konfiguracyjną ( trace2.maxFiles
), aby ustawić maksymalną liczbę plików, które trace2
będą zapisywane w katalogu docelowym.
Następujące zachowanie jest włączone, gdy maxFiles
ustawiono dodatnią liczbę całkowitą:
Kiedy trace2
zapisuje plik w katalogu docelowym, najpierw sprawdź, czy ślady powinny zostać odrzucone. Ślady należy wyrzucić, jeśli:
- istnieje plik wartowniczy, który deklaruje, że jest za dużo plików
- LUB, liczba plików przekracza
trace2.maxFiles
.
W tym drugim przypadku tworzymy plik wartownika o nazwie, git-trace2-discard
aby przyspieszyć przyszłe sprawdzenia.
Zakłada się, że wygenerowanymi śladami zajmuje się oddzielny system przetwarzania; po przetworzeniu i usunięciu pliku wartownika ponowne wygenerowanie nowych plików śledzenia powinno być bezpieczne.
Wartością domyślną trace2.maxFiles
jest zero, co wyłącza sprawdzanie liczby plików.
Config może być zmienione z nową zmienną środowiskową: GIT_TRACE2_MAX_FILES
.
Git 2.24 (Q4 2019) uczy trace2 o git push
etapach.
Zobacz commit 25e4b80 , commit 5fc3118 (02 października 2019) autorstwa Josha Steadmona ( steadmon
) .
(Scalone przez Junio C Hamano - gitster
- w zobowiązaniu 3b9ec27 , 15 października 2019 r.)
push
: dodaj oprzyrządowanie trace2
Podpisał: Josh Steadmon
Dodaj regiony trace2 transport.c
i builtin/push.c
lepiej śledź czas spędzony w różnych fazach wypychania:
- Ref. Aukcji
- Sprawdzanie podmodułów
- Pchanie podmodułów
- Przesuwanie referencji
W Git 2.25 (Q1 2020) część plików Documentation/technical
jest przenoszona do *.h
plików nagłówkowych .
Widzieć popełnić 6c51cb5 , popełnić d95a77d , popełnić bbcfa30 , popełnić f1ecbe0 , popełnić 4c4066d , popełnić 7db0305 , popełnić f3b9055 , popełnić 971b1f2 , popełnić 13aa9c8 , popełnić c0be43f , popełnić 19ef3dd , popełnić 301d595 , popełnić 3a1b341 , popełnić 126c1cc , popełnić d27eb35 , popełnić 405c6b1 , zobowiązać d3d7172 , zatwierdzenie 3f1480b , zatwierdzenie 266f03e , zatwierdzenie 13c4d7e(17 listopada 2019) autorstwa Heba Waly ( HebaWaly
) .
(Scalone przez Junio C Hamano - gitster
- w zatwierdzeniu 26c816a , 16 grudnia 2019 r.)
trace2
: przenieś dokument do trace2.h
Podpisano przez: Heba Waly
Przenieś dokumentację funkcji z Documentation/technical/api-trace2.txt
do, trace2.h
ponieważ programiści mogą łatwiej znaleźć informacje o użytkowaniu obok kodu, zamiast szukać ich w innym pliku doc.
Tylko sekcja dokumentacji funkcji jest usuwana z, Documentation/technical/api-trace2.txt
ponieważ plik jest pełen szczegółów, które wydawały się bardziej odpowiednie w osobnym pliku doc, z linkiem do pliku doc dodanym w trace2.h. Dokument funkcji jest również usuwany, aby uniknąć zbędnych informacji, które będą trudne do zsynchronizowania z dokumentacją w pliku nagłówkowym.
(chociaż ta reorganizacja miała efekt uboczny na inne polecenie, wyjaśnione i naprawione w Git 2.25.2 (marzec 2020) w zatwierdzeniu cc4f2eb (14 lutego 2020) przez Jeffa Kinga ( peff
) .
(połączone przez Junio C Hamano - gitster
- w zatwierdzeniu 1235384 , 17 lutego 2020) )
Z Git 2.27 (Q2 2020): Ulepszenie Trace2 umożliwiające rejestrowanie zmiennych środowiskowych .
Zobacz commit 3d3adaa (20 marca 2020) autorstwa Josha Steadmona ( steadmon
) .
(Scalone przez Junio C Hamano - gitster
- w zatwierdzeniu 810dc64 , 22 kwietnia 2020 r.)
trace2
: naucz Git logować zmienne środowiskowe
Podpisał: Josh Steadmon
Potwierdził: Jeff Hostetler
Poprzez trace2, Git może już rejestrować interesujące parametry konfiguracyjne (zobacz trace2_cmd_list_config()
funkcję). Może to jednak dać niekompletny obraz, ponieważ wiele parametrów konfiguracyjnych umożliwia również zastąpienie za pomocą zmiennych środowiskowych.
Aby umożliwić bardziej kompletne dzienniki, dodajemy nową trace2_cmd_list_env_vars()
funkcję i wspierającą implementację, wzorowaną na wcześniejszej implementacji rejestrowania parametrów konfiguracji.
Z Git 2.27 (Q2 2020), codepaths uczą, że licznik pokazać postęp również użyć start_progress()
, a stop_progress()
rozmowy jako „ region
”, aby prześledzić.
Zobacz zobowiązanie 98a1364 (12 maja 2020) autorstwa Emily Shaffer ( nasamuffin
) .
(Scalone przez Junio C Hamano - gitster
- w zatwierdzeniu d98abce , 14 maja 2020 r.)
trace2
: dziennik postępu i przepustowości
Podpisał: Emily Shaffer
Zamiast uczyć tylko jednej operacji, takiej jak „ git fetch
”, jak zapisywać przepustowość do śladów, możemy dowiedzieć się o szerokim zakresie operacji użytkownika, które mogą wydawać się powolne, dodając narzędzia do samej biblioteki postępu .
Operacje, w których wyświetlany jest postęp, prawdopodobnie będą działały wolno i są to rzeczy, które i tak chcemy monitorować pod kątem wydajności.
Pokazując liczbę obiektów i rozmiar transferu danych, powinniśmy być w stanie dokonać pewnych pomiarów pochodnych, aby upewnić się, że operacje skalują się w oczekiwany sposób.
I:
Wraz z Git 2.27 (Q2 2020) poprawiliśmy w ostatniej chwili naszą ostatnią zmianę, aby umożliwić korzystanie z interfejsu API postępu jako identyfikowalnego regionu.
Zobacz commit 3af029c (15 maja 2020) autorstwa Derrick Stolee (derrickstolee
) .
(Scalone przez Junio C Hamano - gitster
- w zobowiązaniu 85d6e28 , 20 maja 2020 r.)
progress
: dzwoń trace2_region_leave()
tylko po wezwaniu_enter()
Podpisał: Derrick Stolee
Użytkownik interfejsu API postępu wywołuje start_progress()
warunkowo i zależy od funkcji display_progress()
i, stop_progress()
aby przestały działać, gdy start_progress()
nie zostały wywołane.
Jak dodał wezwanie do trace2_region_enter()
celu start_progress()
, rozmowy do innych połączeń trace2 API z funkcji API postępu musi upewnić się, że te rozmowy trace2 są pomijane, gdy start_progress()
nie został powołany na struct postępu.
W szczególności nie wywołuj trace2_region_leave()
od stop_progress()
momentu, w którym nie zadzwoniliśmy start_progress()
, co spowodowałoby dopasowanietrace2_region_enter()
.
GIT_CURL_VERBOSE
będziesz mieć z Git 2.9.x / 2.10GIT_TRACE_CURL
. Zobacz moją odpowiedź poniżej .