Jak mogę debugować problemy związane z git / git-shell?

148

Jak mogę uzyskać informacje debugowania dotyczące git / git-shell?

Miałem problem, że user1mogłem sklonować repozytorium bez problemu, podczas gdy user2mogłem sklonować tylko puste. Ustawiłem GIT_TRACE=1, ale nie powiedziano nic użytecznego.

W końcu po długich próbach i błędach okazało się, że był to problem z uprawnieniami do pliku. Odpowiedni komunikat o błędzie może spowodować zwarcie tego problemu.

Andor
źródło
Uwaga: dodatkowo GIT_CURL_VERBOSEbędziesz mieć z Git 2.9.x / 2.10 GIT_TRACE_CURL. Zobacz moją odpowiedź poniżej .
VonC,
I (drugi kwartał 2019, trzy lata później GIT_TRACE_CURL) masz trace2. Przykład: git config --global trace2.normalTarget ~/log.normal. Zobacz moją (nową) odpowiedź poniżej .
VonC

Odpowiedzi:

212

Aby uzyskać jeszcze bardziej szczegółowe dane wyjściowe, użyj następującego:

GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master

WTK
źródło
53
Istnieje kilka opcji GIT_TRACE poza podstawową. Oto opcja über-verbose:set -x; GIT_TRACE=2 GIT_CURL_VERBOSE=2 GIT_TRACE_PERFORMANCE=2 GIT_TRACE_PACK_ACCESS=2 GIT_TRACE_PACKET=2 GIT_TRACE_PACKFILE=2 GIT_TRACE_SETUP=2 GIT_TRACE_SHALLOW=2 git pull origin master -v -v; set +x
Paul Irish
2
Jak i gdzie ustawić te zmienne?
Hunsu
To tylko cała linia, którą możesz wkleić do swojego terminala. Powinieneś zastąpić git pull origin masterczęść poleceniem, które chcesz wykonać.
Aeolun
1
Na jakich platformach to działa? Na pewno nie Windows.
cowlinator
8
W systemie Windows możesz ustawić te zmienne, pojedynczo (po jednej w wierszu), na przykład:set GIT_CURL_VERBOSE=1 set GIT_TRACE=1 git pull origin master
cowlinator
85

Debugowanie

Git ma dość kompletny zestaw śladów, których możesz użyć do debugowania problemów z gitem.

Aby je włączyć, możesz zdefiniować następujące zmienne:

  • GIT_TRACE na ślady ogólne,
  • GIT_TRACE_PACK_ACCESS do śledzenia dostępu do pliku pakietu,
  • GIT_TRACE_PACKET do śledzenia na poziomie pakietów dla operacji sieciowych,
  • GIT_TRACE_PERFORMANCE do rejestrowania danych dotyczących wydajności,
  • GIT_TRACE_SETUP aby uzyskać informacje o odkrywaniu repozytorium i środowiska, z którym wchodzi w interakcje,
  • GIT_MERGE_VERBOSITY do debugowania rekurencyjnej strategii scalania (wartości: 0-5),
  • GIT_CURL_VERBOSEdo logowania wszystkich komunikatów curl (odpowiednik curl -v),
  • GIT_TRACE_SHALLOW do debugowania pobierania / klonowania płytkich repozytoriów.

Możliwe wartości mogą obejmować:

  • true, 1Lub 2pisać na stderr,
  • bezwzględna ścieżka zaczynająca się od, /aby prześledzić dane wyjściowe do określonego pliku.

Aby uzyskać więcej informacji, zobacz: Wewnętrzne elementy Git - zmienne środowiskowe


SSH

W przypadku problemów z SSH wypróbuj następujące polecenia:

echo 'ssh -vvv "$*"' > ssh && chmod +x ssh
GIT_SSH="$PWD/ssh" git pull origin master

lub użyj sshdo sprawdzenia swoich danych uwierzytelniających, np

ssh -vvvT [email protected]

lub przez port HTTPS:

ssh -vvvT -p 443 [email protected]

Uwaga: Zmniejsz liczbę, -vaby zmniejszyć poziom szczegółowości.


Przykłady

$ GIT_TRACE=1 git status
20:11:39.565701 git.c:350               trace: built-in: git 'status'

$ GIT_TRACE_PERFORMANCE=$PWD/gc.log git gc
Counting objects: 143760, done.
...
$ head gc.log 
20:12:37.214410 trace.c:420             performance: 0.090286000 s: git command: 'git' 'pack-refs' '--all' '--prune'
20:12:37.378101 trace.c:420             performance: 0.156971000 s: git command: 'git' 'reflog' 'expire' '--all'
...

$ GIT_TRACE_PACKET=true git pull origin master
20:16:53.062183 pkt-line.c:80           packet:        fetch< 93eb028c6b2f8b1d694d1173a4ddf32b48e371ce HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed symref=HEAD:refs/heads/master agent=git/2:2.6.5~update-ref-initial-update-1494-g76b680d
...
kenorb
źródło
2
Zmiana echo 'ssh -vvv $*' > ssh && chmod +x sshna echo 'ssh -vvv "$@"' > ssh && chmod +x sshpowinna być bezpieczniejsza w przypadku krawędzi, w którym pojedynczy parametr zawiera spację.
Alexander Bird
46

Spróbuj tego:

GIT_TRACE=1 git pull origin master
CC
źródło
40

Jeśli jest używany przez SSH, możesz użyć:

Aby uzyskać wyższy poziom debugowania dla typu -vv lub -vvv dla poziomu debugowania odpowiednio 2 i 3:

# Debug level 1
GIT_SSH_COMMAND="ssh -v" git clone <repositoryurl>

# Debug level 2
GIT_SSH_COMMAND="ssh -vv" git clone <repositoryurl>

# Debug level 3
GIT_SSH_COMMAND="ssh -vvv" git clone <repositoryurl>

Jest to przydatne głównie do rozwiązywania problemów z kluczami publicznymi i prywatnymi na serwerze. Możesz użyć tego polecenia dla dowolnego polecenia git, nie tylko „git clone”.

Basil Musa
źródło
Tak, to działa idealnie. Lepiej niż inni. Tak, to działa idealnie. Lepiej niż inni.
BMW
Byłoby to najbardziej przydatne, ponieważ muszę teraz rozwiązać kluczowy problem, ale nie działa to dla mnie z git 1.8.3.1 i OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 lutego 2013 r. Na CentOS Linux w wersji 7.2.1511 (Rdzeń). :(
Greg Dubicki
@GregDubicki Strange. Daj mi znać, co działa w Twoim przypadku, abym mógł zaktualizować odpowiedź.
Basil Musa
1
W systemie Windows użyj set GIT_SSH_COMMAND=ssh -v(bez cudzysłowów).
jansohn
18

Git 2.9.x / 2,10 (Q3 2016) dodaje inną opcję debugowania: GIT_TRACE_CURL.

Zobacz commit 73e57aa , commit 74c682d (23 maja 2016) autorstwa Elia Pinto ( devzero2000) .
Z pomocą: Torsten Bögershausen ( tboegi) , Ramsay Jones, Junio ​​C Hamano ( gitster) , Eric Sunshine ( sunshineco) i Jeff King ( peff) .
(Scalone przez Junio ​​C Hamano - gitster- w zatwierdzeniu 2f84df2 , 06 lipca 2016)

http.c: zaimplementuj GIT_TRACE_CURLzmienną środowiskową

Zaimplementuj GIT_TRACE_CURLzmienną środowiskową, aby uzyskać większy stopień szczegółowości GIT_CURL_VERBOSE, w szczególności całego nagłówka transportowego i wszystkich wymienianych danych.
Może to być przydatne, jeśli dana sytuacja wymaga dokładniejszej analizy debugowania.

Dokumentacja będzie zawierać:

GIT_TRACE_CURL

Umożliwia zawijanie pełnego zrzutu śledzenia wszystkich danych przychodzących i wychodzących, w tym informacji opisowych protokołu transportowego git.
Jest to podobne do wykonywania curl --trace-asciiw wierszu poleceń.

Ta opcja zastępuje ustawienie GIT_CURL_VERBOSEzmiennej środowiskowej.


Możesz zobaczyć tę nową opcję użytą w tej odpowiedzi , ale także w testach Git 2.11 (Q4 2016):

Zobacz zatwierdzenie 14e2411 , zatwierdzenie 81590bf , zatwierdzenie 4527aa1 , zatwierdzenie 4eee6c6 (7 września 2016) autorstwa Elia Pinto ( devzero2000) .
(Scalone przez Junio ​​C Hamano - gitster- w zatwierdzeniu 930b67e , 12 września 2016 r.)

Użyj nowej GIT_TRACE_CURLzmiennej środowiskowej zamiast wycofanej GIT_CURL_VERBOSE .

GIT_TRACE_CURL=true git clone --quiet $HTTPD_URL/smart/repo.git
VonC
źródło
Ta funkcja jest fajna! Jedynym punktem jest wyjście ASCII (gdzie wypisują wszystko, co nie (ch >= 0x20) && (ch < 0x80)jest kropką .) i nie ma możliwości wyjścia szesnastkowego dla danych http.
kinORnirvana
8

Git 2.22 (Q2 2019) wprowadza trace2z 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 trace2zapewnia 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_PERFalbo 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_TR2ma na celu zastąpienie GIT_TRACEdanych podsumowania poleceń i rejestruje je.

  • GIT_TR2_PERFjest 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_EVENTto 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 trace2zmiennej 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 -cargumenty 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 ( DIRa OPTS) oznaczają.
Ale co to TRoznacza? Ś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_TRACEzmiennych 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 trace2system we wspólnej funkcji main (), aby wszystkie programy (nawet te, które nie są wbudowane) umożliwiały śledzenie.

Ale trace2uruchomienie 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_repositorynigdy nie ma wartości NULL, nie będzie przechowywany.

Wciśnijmy trace2inicjalizację niżej w common-main, tuż przed wykonaniem cmd_main().


Git 2.24 (Q4 2019) zapewnia również, że dane wyjściowe z trace2podsystemu 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

trace2moż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 trace2będą zapisywane w katalogu docelowym.

Następujące zachowanie jest włączone, gdy maxFilesustawiono dodatnią liczbę całkowitą:

  • Kiedy trace2zapisuje 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-discardaby 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.maxFilesjest 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 pushetapach.

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.ci builtin/push.clepiej ś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/technicaljest przenoszona do *.hplikó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.txtdo, trace2.hponieważ 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.txtponieważ 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() .

VonC
źródło
4

Czy próbowałeś dodać -voperator verbose ( ) podczas klonowania?

git clone -v git://git.kernel.org/pub/scm/.../linux-2.6 my2.6

JamesHalsall
źródło
2

Dla starszych wersji git (1.8 i wcześniej)

Nie mogłem znaleźć odpowiedniego sposobu na włączenie debugowania SSH w starszych wersjach git i ssh. Szukałem zmiennych środowiskowych przy użyciultrace -e getenv ... i nie mogłem znaleźć żadnej kombinacji zmiennych GIT_TRACE lub SSH_DEBUG, które działałyby.

Zamiast tego jest przepis na tymczasowe wstrzyknięcie 'ssh -v' do sekwencji git-> ssh:

$ echo '/usr/bin/ssh -v ${@}' >/tmp/ssh
$ chmod +x /tmp/ssh
$ PATH=/tmp:${PATH} git clone ...
$ rm -f /tmp/ssh

Oto dane wyjściowe z git w wersji 1.8.3 z wersją ssh OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 lutego 2013 klonowanie repozytorium github:

$ (echo '/usr/bin/ssh -v ${@}' >/tmp/ssh; chmod +x /tmp/ssh; PATH=/tmp:${PATH} \
   GIT_TRACE=1 git clone https://github.com/qneill/cliff.git; \
   rm -f /tmp/ssh) 2>&1 | tee log
trace: built-in: git 'clone' 'https://github.com/qneill/cliff.git'
trace: run_command: 'git-remote-https' 'origin' 'https://github.com/qneill/cliff.git'
Cloning into 'cliff'...
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /home/q.neill/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to github.com ...
...
Transferred: sent 4120, received 724232 bytes, in 0.2 seconds
Bytes per second: sent 21590.6, received 3795287.2
debug1: Exit status 0
trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all'
trace: exec: 'git' 'rev-list' '--objects' '--stdin' '--not' '--all'
trace: built-in: git 'rev-list' '--objects' '--stdin' '--not' '--all'
qneill
źródło