Wie kann ich Probleme im Zusammenhang mit Git / Git-Shell beheben?


148

Wie kann ich Debug-Informationen zu git / git-shell haben?

Ich hatte ein Problem, das user1ein Repository problemlos user2klonen konnte , während nur ein leeres geklont werden konnte. Ich hatte eingestellt GIT_TRACE=1, aber nichts Nützliches wurde gesagt.

Nach langem Ausprobieren stellte sich schließlich heraus, dass es sich um ein Berechtigungsproblem für eine Datei handelte. Eine entsprechende Fehlermeldung kann dieses Problem kurzschließen.


Hinweis: Zusätzlich GIT_CURL_VERBOSEhaben Sie mit Git 2.9.x / 2.10 GIT_TRACE_CURL. Siehe meine Antwort unten .
VonC

Und (Q2 2019, drei Jahre später GIT_TRACE_CURL) haben Sie jetzt trace2. Beispiel : git config --global trace2.normalTarget ~/log.normal. Siehe meine (neue) Antwort unten .
VonC

Antworten:


212

Verwenden Sie für eine noch ausführlichere Ausgabe Folgendes:

GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master


53
Es gibt einige GIT_TRACE-Optionen, die über die Kernoption hinausgehen. Hier ist die überaus ausführliche Option: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
Wie und wo werden diese Variablen gesetzt?
Hunsu

Das ist nur eine ganze Zeile, die Sie in Ihr Terminal einfügen können. Sie sollten das git pull origin masterTeil durch den Befehl ersetzen, den Sie ausführen möchten.
Aeolun

1
Auf welchen Plattformen funktioniert das? Mit Sicherheit nicht Windows.
Cowlinator

8
Unter Windows können Sie diese Variablen set GIT_CURL_VERBOSE=1 set GIT_TRACE=1 git pull origin master
einzeln

85

Debuggen

Git hat einen ziemlich vollständigen Satz eingebetteter Traces, mit denen Sie Ihre Git-Probleme debuggen können.

Um sie einzuschalten, können Sie die folgenden Variablen definieren:

  • GIT_TRACE für allgemeine Spuren,
  • GIT_TRACE_PACK_ACCESS zur Verfolgung des Packfile-Zugriffs,
  • GIT_TRACE_PACKET für die Ablaufverfolgung auf Paketebene für Netzwerkoperationen,
  • GIT_TRACE_PERFORMANCE zum Protokollieren der Leistungsdaten,
  • GIT_TRACE_SETUP Informationen zum Erkennen des Repositorys und der Umgebung, mit der es interagiert,
  • GIT_MERGE_VERBOSITY zum Debuggen einer rekursiven Zusammenführungsstrategie (Werte: 0-5),
  • GIT_CURL_VERBOSEzum Protokollieren aller Curl-Nachrichten (entspricht curl -v),
  • GIT_TRACE_SHALLOW zum Debuggen des Abrufens / Klonens von flachen Repositorys.

Mögliche Werte können sein:

  • true, 1Oder 2auf stderr zu schreiben,
  • Ein absoluter Pfad, der mit /der Verfolgung der Ausgabe bis zur angegebenen Datei beginnt .

Weitere Informationen finden Sie unter: Git-Interna - Umgebungsvariablen


SSH

Versuchen Sie bei SSH-Problemen die folgenden Befehle:

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

oder verwenden Sie ssh, um Ihre Anmeldeinformationen zu überprüfen, z

ssh -vvvT git@github.com

oder über HTTPS-Port:

ssh -vvvT -p 443 git@ssh.github.com

Hinweis: Reduzieren Sie die Anzahl von -v, um die Ausführlichkeitsstufe zu verringern.


Beispiele

$ 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
...

2
Das Ändern echo 'ssh -vvv $*' > ssh && chmod +x sshauf echo 'ssh -vvv "$@"' > ssh && chmod +x sshsollte in dem Randfall sicherer sein, in dem ein einzelner Parameter ein Leerzeichen enthält.
Alexander Bird

46

Probier diese:

GIT_TRACE=1 git pull origin master

40

Wenn es über SSH ist, können Sie Folgendes verwenden:

Für eine höhere Debugstufe für Typ -vv oder -vvv für Debugstufe 2 bzw. 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>

Dies ist hauptsächlich nützlich, um Probleme mit öffentlichen und privaten Schlüsseln mit dem Server zu lösen. Sie können diesen Befehl für jeden git-Befehl verwenden, nicht nur für 'git clone'.


Ja, das funktioniert perfekt. Besser als andere. Ja, das funktioniert perfekt. Besser als andere.
BMW

Dies wäre am nützlichsten, da ich jetzt ein Schlüsselproblem lösen muss, aber es funktioniert nicht mit Git 1.8.3.1 und OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11. Februar 2013 unter CentOS Linux Release 7.2.1511 (Ader). :(
Greg Dubicki

@ GregDubicki Seltsam. Lassen Sie mich wissen, was für Sie funktioniert, damit ich die Antwort aktualisieren kann.
Basil Musa

1
Unter Windows verwenden set GIT_SSH_COMMAND=ssh -v(keine Anführungszeichen).
jansohn

18

Git 2.9.x / 2.10 (Q3 2016) fügt eine weitere Debug-Option hinzu: GIT_TRACE_CURL .

Siehe Commit 73e57aa , Commit 74c682d (23. Mai 2016) von Elia Pinto ( devzero2000) .
Unterstützt von: Torsten Bögershausen ( tboegi) , Ramsay Jones, Junio ​​C. Hamano ( gitster) , Eric Sunshine ( sunshineco) und Jeff King ( peff) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 2f84df2 , 06. Juli 2016)

http.c: Implementieren Sie die GIT_TRACE_CURLUmgebungsvariable

Implementieren Sie die GIT_TRACE_CURLUmgebungsvariable, um mehr Details zu ermöglichen GIT_CURL_VERBOSE, insbesondere den gesamten Transportheader und alle ausgetauschten Datennutzdaten.
Es kann nützlich sein, wenn eine bestimmte Situation eine gründlichere Debugging-Analyse erfordert.

In der Dokumentation heißt es:

GIT_TRACE_CURL

Ermöglicht einen vollständigen Curl-Trace-Dump aller eingehenden und ausgehenden Daten, einschließlich beschreibender Informationen, des Git-Transportprotokolls.
Dies ähnelt curl --trace-asciider Befehlszeile.

Diese Option überschreibt das Festlegen der GIT_CURL_VERBOSEUmgebungsvariablen.


Sie können diese neue Option in dieser Antwort sehen , aber auch in den Git 2.11 (Q4 2016) -Tests:

Siehe Commit 14e2411 , Commit 81590bf , Commit 4527aa1 , Commit 4eee6c6 ( 07.09.2016 ) von Elia Pinto ( devzero2000) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 930b67e , 12. September 2016)

Verwenden Sie die neue GIT_TRACE_CURLUmgebungsvariable anstelle der veralteten GIT_CURL_VERBOSE .

GIT_TRACE_CURL=true git clone --quiet $HTTPD_URL/smart/repo.git

Diese Funktion ist cool! Der einzige Punkt ist die ASCII-Ausgabe (wo alles gedruckt wird, was nicht (ch >= 0x20) && (ch < 0x80)als Punkt ist .) und keine Möglichkeit der Hex-Ausgabe für http-Daten.
KinORnirvana

8

Git 2.22 (Q2 2019) stellt trace2mit Commit ee4512e von Jeff Hostetler vor :

trace2: Neue kombinierte Trace-Funktion erstellen

Erstellen Sie eine neue einheitliche Ablaufverfolgungsfunktion für Git.
Die letztendliche Absicht besteht darin, den Strom trace_printf*und die trace_performance*Routinen durch einen einheitlichen Satz von git_trace2*Routinen zu ersetzen .

trace2Bietet zusätzlich zur üblichen API im printf-Stil Ereignisverben auf höherer Ebene mit festen Feldern, mit denen strukturierte Daten geschrieben werden können.
Dies erleichtert die Nachbearbeitung und Analyse für externe Tools.

Trace2 definiert 3 Ausgabeziele.
Diese werden mit den Umgebungsvariablen " GIT_TR2", " GIT_TR2_PERF" und " GIT_TR2_EVENT" festgelegt.
Diese können auf "1" oder auf einen absoluten Pfadnamen gesetzt werden (genau wie der aktuelle GIT_TRACE).

Hinweis: In Bezug auf den Namen der Umgebungsvariablen immer verwenden GIT_TRACExxx, nicht GIT_TRxxx.
Also eigentlich GIT_TRACE2, GIT_TRACE2_PERFoder GIT_TRACE2_EVENT.
Siehe die unten erwähnte Umbenennung von Git 2.22.

Was folgt, ist die erste Arbeit an dieser neuen Ablaufverfolgungsfunktion mit den alten Namen der Umgebungsvariablen:

  • GIT_TR2soll die GIT_TRACEBefehlszusammenfassungsdaten ersetzen und protokollieren.

  • GIT_TR2_PERFist als Ersatz für gedacht GIT_TRACE_PERFORMANCE.
    Es erweitert die Ausgabe um Spalten für den Befehlsprozess, Thread, Repo, absolute und relative verstrichene Zeiten. Es werden Ereignisse für das Starten / Stoppen des untergeordneten Prozesses, das Starten / Stoppen des Threads und die Verschachtelung der Funktionen pro Thread gemeldet.

  • GIT_TR2_EVENTist ein neues strukturiertes Format. Es schreibt Ereignisdaten als eine Reihe von JSON-Datensätzen.

Aufrufe von trace2-Funktionen protokollieren bei einem der 3 aktivierten Ausgabeziele, ohne dass andere trace_printf*oder trace_performance*Routinen aufgerufen werden müssen .

Siehe Commit a4d3a28 (21. März 2019) von Josh Steadmon ( steadmon) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 1b40314 , 08. Mai 2019)

trace2: In Verzeichnisziele schreiben

Wenn der Wert einer Umgebungsvariablen trace2 ein absoluter Pfad ist, der auf ein vorhandenes Verzeichnis verweist, schreiben Sie die Ausgabe in Dateien (eine pro Prozess) unter dem angegebenen Verzeichnis.
Dateien werden nach der letzten Komponente der SID trace2 benannt, gefolgt von einem Zähler, um mögliche Kollisionen zu vermeiden.

Dies macht es bequemer, Traces für jeden Git-Aufruf zu sammeln, indem die relevante trace2Umgebung unbedingt auf einen konstanten Verzeichnisnamen gesetzt wird.


Siehe auch Commit f672dee (29. April 2019) und Commit 81567ca , Commit 08881b9 , Commit bad229a , Commit 26c6f25 , Commit bce9db6 , Commit 800a7f9 , Commit a7bc01e , Commit 39f4317 , Commit a089724 , Commit 1703751 (15. April 2019) von Jeff Hostetler ( jeffhostetler) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 5b2d1c0 , 13. Mai 2019)

Die neue Dokumentation enthält jetzt Konfigurationseinstellungen, die nur aus den System- und globalen Konfigurationsdateien gelesen werden (dh lokale Repository- und Worktree-Konfigurationsdateien sowie -cBefehlszeilenargumente werden nicht berücksichtigt ).

Beispiel :

$ git config --global trace2.normalTarget ~/log.normal
$ git version
git version 2.20.1.155.g426c96fcdb

ergibt

$ 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

Und zur Leistungsmessung :

$ git config --global trace2.perfTarget ~/log.perf
$ git version
git version 2.20.1.155.g426c96fcdb

ergibt

$ 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

Wie in Git 2.23 (Q3 2019) dokumentiert, ist die zu verwendende Umgebungsvariable GIT_TRACE2.

Siehe Commit 6114a40 (26. Juni 2019) von Carlo Marcelo Arenas Belón ( carenas) .
Siehe Commit 3efa1c6 (12. Juni 2019) von Ævar Arnfjörð Bjarmason ( avar) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit e9eaaa4 , 09. Juli 2019)

Dies folgt der Arbeit in Git 2.22: Commit 4e0d3aa , Commit e4b75d6 (19. Mai 2019) von SZEDER Gábor ( szeder) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 463dca6 , 30. Mai 2019)

trace2: Umbenennen von Umgebungsvariablen in GIT_TRACE2 *

Für eine Umgebungsvariable, die von Benutzern festgelegt werden soll, sind die Umgebungsvariablen GIT_TR2*einfach zu unklar, inkonsistent und hässlich.

Die meisten der etablierten GIT_*Umgebungsvariablen verwenden keine Abkürzungen, und bei den wenigen, die ( ,, ) tun GIT_DIR, GIT_COMMON_DIRist GIT_DIFF_OPTSes ziemlich offensichtlich, wofür die Abkürzungen ( DIRund OPTS) stehen.
Aber wofür steht TR? Verfolgen, traditionell, Anhänger, Transaktion, Übertragung, Transformation, Übergang, Übersetzung, Transplantation, Transport, Durchquerung, Baum, Auslöser, Abschneiden, Vertrauen oder ...?!

Die trace2-Funktion soll, wie das Suffix '2' im Namen andeutet, die ursprüngliche Trace-Funktion von Git ersetzen.
Es ist zu erwarten, dass die entsprechenden Umgebungsvariablen dem Beispiel folgen und nach den ursprünglichen GIT_TRACEVariablen aufgerufen werden GIT_TRACE2. Es gibt kein solches GIT_TR.

Alle trace2-spezifischen Konfigurationsvariablen befinden sich sehr vernünftigerweise im trace2Abschnitt ' ', nicht in ' tr2'.

OTOH, wir gewinnen überhaupt nichts, wenn wir die letzten drei Zeichen von "trace" aus den Namen dieser Umgebungsvariablen weglassen .

Benennen wir also alle GIT_TR2*Umgebungsvariablen in um GIT_TRACE2*, bevor sie in eine stabile Version gelangen.


Git 2.24 (Q3 2019) verbessert die Initialisierung des Git-Repositorys.

Siehe Commit 22932d9 , Commit 5732f2b , Commit 58ebccb (06. August 2019) von Jeff King ( peff) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit b4a1eec , 9. September 2019)

common-main: Initialisierung von Trace2 verzögern

Wir initialisieren das trace2System in der gemeinsamen Funktion main (), damit alle Programme (auch solche, die nicht eingebaut sind) die Ablaufverfolgung ermöglichen.

Der trace2Start ist jedoch relativ schwer, da wir die Konfiguration auf der Festplatte lesen müssen, um zu entscheiden, ob eine Ablaufverfolgung durchgeführt werden soll.
Dies kann zu unerwarteten Interaktionen mit anderen Common-Main-Initialisierungen führen. Zum Beispiel werden wir vor dem Aufruf im Konfigurationscode landen initialize_the_repository(), und die übliche Invariante, the_repositorydie niemals NULL ist, wird nicht gelten.

Lassen Sie uns die trace2Initialisierung in Common-Main bis kurz vor der Ausführung weiter nach unten verschieben cmd_main().


Git 2.24 (Q4 2019) stellt außerdem sicher, dass die Ausgabe vom trace2Subsystem jetzt hübscher formatiert wird.

Siehe Commit 742ed63 , Commit e344305 , Commit c2b890a (09. August 2019), Commit ad43e37 , Commit 04f10d3 , Commit da4589c (08. August 2019) und Commit 371df1b (31. Juli 2019) von Jeff Hostetler ( jeffhostetler) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 93fc876 , 30. September 2019)

Und immer noch Git 2.24

Siehe Commit 87db61a , Commit 83e57b0 (04. Oktober 2019) und Commit 2254101 , Commit 3d4548e (03. Oktober 2019) von Josh Steadmon ( steadmon) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit d0ce4d9 , 15. Oktober 2019)

trace2: Neue Traces verwerfen, wenn das Zielverzeichnis zu viele Dateien enthält

Unterzeichnet von: Josh Steadmon

trace2kann Dateien in ein Zielverzeichnis schreiben.
Bei starker Nutzung kann sich dieses Verzeichnis mit Dateien füllen, was für Trace-Verarbeitungssysteme zu Schwierigkeiten führt.

Dieser Patch fügt eine Konfigurationsoption ( trace2.maxFiles) hinzu, um eine maximale Anzahl von Dateien trace2festzulegen, die in ein Zielverzeichnis geschrieben werden.

Das folgende Verhalten ist aktiviert, wenn maxFilesauf eine positive Ganzzahl gesetzt ist:

  • Wenn Sie trace2eine Datei in ein Zielverzeichnis schreiben möchten, prüfen Sie zunächst, ob die Traces verworfen werden sollen. Spuren sollten verworfen werden, wenn:

    • Es gibt eine Sentinel-Datei, die angibt, dass zu viele Dateien vorhanden sind
    • ODER, die Anzahl der Dateien überschreitet trace2.maxFiles.
      Im letzteren Fall erstellen wir eine Sentinel-Datei mit dem Namen git-trace2-discard, um zukünftige Überprüfungen zu beschleunigen.

Es wird davon ausgegangen, dass ein separates Trace-Verarbeitungssystem die generierten Traces verarbeitet. Sobald die Sentinel-Datei verarbeitet und entfernt wurde, sollte es sicher sein, erneut neue Trace-Dateien zu generieren.

Der Standardwert für trace2.maxFilesist Null, wodurch die Überprüfung der Dateizahl deaktiviert wird.

Die Konfiguration kann auch mit einer neuen Umgebungsvariablen überschrieben werden : GIT_TRACE2_MAX_FILES.


Und Git 2.24 (Q4 2019) lehrt trace2 über git pushStufen.

Siehe Commit 25e4b80 , Commit 5fc3118 (02. Oktober 2019) von Josh Steadmon ( steadmon) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 3b9ec27 , 15. Oktober 2019)

push: Trace2-Instrumentierung hinzufügen

Unterzeichnet von: Josh Steadmon

Fügen Sie trace2-Regionen in transport.cund hinzu builtin/push.c, um die in verschiedenen Phasen des Pushings verbrachte Zeit besser zu verfolgen:

  • Auflistung refs
  • Submodule prüfen
  • Submodule schieben
  • Refs drücken

Mit Git 2.25 (Q1 2020) wird ein Teil davon Documentation/technicalin Header- *.hDateien verschoben .

Sehen Sie verpflichten 6c51cb5 , begehen d95a77d , begehen bbcfa30 , begehen f1ecbe0 , begehen 4c4066d , begehen 7db0305 , begehen f3b9055 , begehen 971b1f2 , begehen 13aa9c8 , begehen c0be43f , begehen 19ef3dd , begehen 301d595 , begehen 3a1b341 , begehen 126c1cc , begehen d27eb35 , begehen 405c6b1 , verpflichten d3d7172 , Commit 3f1480b , Commit 266f03e , 266f03e festschreiben(17. November 2019) von Heba Waly ( HebaWaly) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 26c816a , 16. Dezember 2019)

trace2: Verschieben Sie das Dokument nach trace2.h

Unterzeichnet von: Heba Waly

Verschieben Sie die Funktionsdokumentation von Documentation/technical/api-trace2.txtnach, trace2.hda die Entwickler die Verwendungsinformationen neben dem Code leichter finden können, als sie in einer anderen Dokumentdatei zu suchen.

Es wird nur der Abschnitt mit der Funktionsdokumentation entfernt, Documentation/technical/api-trace2.txtda die Datei viele Details enthält, die für eine separate Dokumentdatei angemessener erscheinen. Ein Link zur Dokumentdatei wird in trace2.h hinzugefügt. Außerdem wird das Funktionsdokument entfernt, um Redundandt-Informationen zu vermeiden, die nur schwer mit der Dokumentation in der Header-Datei synchronisiert werden können.

(obwohl diese Reorganisation einen Nebeneffekt auf einen anderen Befehl hatte, erklärt und behoben mit Git 2.25.2 (März 2020) in Commit cc4f2eb (14. Februar 2020) von Jeff King ( peff) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 1235384 , 17. Februar 2020) )


Mit Git 2.27 (Q2 2020): Trace2-Erweiterung, um die Protokollierung der Umgebungsvariablen zu ermöglichen .

Siehe Commit 3d3adaa (20. März 2020) von Josh Steadmon ( steadmon) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 810dc64 , 22. April 2020)

trace2: Git lehren, Umgebungsvariablen zu protokollieren

Abgemeldet von: Josh Steadmon
Bestätigt von: Jeff Hostetler

Über trace2 kann Git bereits interessante Konfigurationsparameter protokollieren (siehe trace2_cmd_list_config()Funktion). Dies kann jedoch zu einem unvollständigen Bild führen, da viele Konfigurationsparameter auch Überschreibungen über Umgebungsvariablen zulassen.

Um vollständigere Protokolle zu ermöglichen, fügen wir eine neue trace2_cmd_list_env_vars()Funktion und unterstützende Implementierung hinzu, die der bereits vorhandenen Implementierung der Konfigurationsparameterprotokollierung nachempfunden ist.


Lehren Sie mit Git 2.27 (Q2 2020) Codepfade, die die Fortschrittsanzeige anzeigen, um auch die start_progress()und die stop_progress()Aufrufe als " region" zu verfolgen .

Siehe Commit 98a1364 (12. Mai 2020) von Emily Shaffer ( nasamuffin) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit D98abce , 14. Mai 2020)

trace2: Protokollieren Sie die Fortschrittszeit und den Durchsatz

Abgemeldet von: Emily Shaffer

Anstatt nur eine Operation wie ' git fetch' zu lehren , wie man den Durchsatz in Traces aufschreibt, können wir uns über eine Vielzahl von Benutzeroperationen informieren, die langsam erscheinen können, indem wir der Fortschrittsbibliothek selbst Werkzeuge hinzufügen .

Vorgänge, die den Fortschritt anzeigen, sind wahrscheinlich langsam und die Art von Dingen, die wir sowieso auf Leistung überwachen möchten.

Durch die Anzeige der Objektanzahl und der Datenübertragungsgröße sollten wir in der Lage sein, einige abgeleitete Messungen durchzuführen, um sicherzustellen, dass die Vorgänge so skalieren, wie wir es erwarten.

Und:

Mit Git 2.27 (Q2 2020) wurde in letzter Minute eine Korrektur für unsere jüngste Änderung vorgenommen, um die Verwendung der Fortschritts-API als nachverfolgbare Region zu ermöglichen.

Siehe Commit 3af029c (15. Mai 2020) von Derrick Stolee ( derrickstolee) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 85d6e28 , 20. Mai 2020)

progress: trace2_region_leave()erst nach dem anruf anrufen_enter()

Unterzeichnet von: Derrick Stolee

Ein Benutzer der Fortschritts-API ruft start_progress()bedingt auf und hängt von den Funktionen display_progress()und ab stop_progress(), um No-Op zu werden, wenn start_progress()sie nicht aufgerufen wurden.

Da wir einen Anruf hinzugefügt , trace2_region_enter()um start_progress()die Anrufe zu anderen trace2 API - Aufrufe von den Fortschritt - API - Funktionen müssen sicherstellen, dass diese trace2 Anrufe übersprungen werden , wenn start_progress()wurde über die Fortschritte Struktur nicht genannt worden.

Rufen Sie insbesondere nicht trace2_region_leave()an, stop_progress()wenn wir nicht angerufen haben start_progress(), was den Abgleich aufgerufen hätte trace2_region_enter().


4

Haben Sie versucht, den -vOperator verbose ( ) beim Klonen hinzuzufügen ?

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


2

Für ältere Git-Versionen (1.8 und früher)

Ich konnte keinen geeigneten Weg finden, um das SSH-Debugging in einer älteren Git- und SSH- Version zu aktivieren . Ich habe nach Umgebungsvariablen gesucht ltrace -e getenv ...und konnte keine Kombination von GIT_TRACE- oder SSH_DEBUG-Variablen finden, die funktionieren würde.

Stattdessen ist hier ein Rezept, um 'ssh -v' vorübergehend in die git-> ssh-Sequenz einzufügen:

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

Hier ist die Ausgabe von git Version 1.8.3 mit der ssh-Version OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11. Februar 2013, die ein Github-Repo klont:

$ (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'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.