Comment puis-je avoir des informations de débogage concernant git/git-shell?
J'ai eu un problème, que user1
pourrait cloner un dépôt sans problème, alors que user2
pourrait ne cloner qu'un fichier vide. J'avais mis GIT_TRACE=1
, mais rien d’utile n’a été dit.
Enfin, après de longs essais et erreurs, il s’est avéré qu’il s’agissait d’un problème d’autorisation sur un fichier. Un message d'erreur approprié pourrait court-circuiter ce problème.
Pour une sortie encore plus prolixe, utilisez ce qui suit:
GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull Origin master
Git a un ensemble assez complet de traces intégrées que vous pouvez utiliser pour déboguer vos problèmes avec Git.
Pour les activer, vous pouvez définir les variables suivantes:
GIT_TRACE
pour les traces générales,GIT_TRACE_PACK_ACCESS
pour le traçage de l'accès aux fichiers pack,GIT_TRACE_PACKET
pour le traçage au niveau des paquets pour les opérations réseau,GIT_TRACE_PERFORMANCE
pour la consignation des données de performance,GIT_TRACE_SETUP
pour plus d’informations sur la découverte du référentiel et de son environnement d’interaction,GIT_MERGE_VERBOSITY
pour le débogage de la stratégie de fusion récursive (valeurs: 0-5),GIT_CURL_VERBOSE
pour la journalisation de tous les messages curl (équivalent à curl -v
),GIT_TRACE_SHALLOW
pour le débogage de la récupération/du clonage de référentiels peu profonds.Les valeurs possibles peuvent inclure:
true
, 1
ou 2
écrire à stderr,/
pour suivre la sortie dans le fichier spécifié.Pour plus de détails, voir: Git Internals - Variables d'environnement
Pour les problèmes SSH, essayez les commandes suivantes:
echo 'ssh -vvv "$*"' > ssh && chmod +x ssh
GIT_SSH="$PWD/ssh" git pull Origin master
ou utilisez ssh
pour valider vos informations d'identification, par exemple.
ssh -vvvT [email protected]
ou sur le port HTTPS:
ssh -vvvT -p 443 [email protected]
Remarque: Réduisez le nombre de -v
pour réduire le niveau de verbosité.
$ 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
...
essaye celui-là:
GIT_TRACE=1 git pull Origin master
Si c'est sur SSH, vous pouvez utiliser les éléments suivants:
Pour un niveau de débogage supérieur pour les types -vv ou -vvv pour les niveaux de débogage 2 et 3 respectivement:
# 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>
Ceci est principalement utile pour gérer les problèmes de clé publique et privée avec le serveur. Vous pouvez utiliser cette commande pour n’importe quelle commande git, pas seulement pour "git clone".
Git 2.9.x/2.10 (T3 2016) ajoute une autre option de débogage: GIT_TRACE_CURL
.
Voir commit 73e57aa , commit 74c682d (23 mai 2016) par Elia Pinto (devzero2000
) .
Aidé de: Torsten Bögershausen (tboegi
) , Ramsay Jones, Junio C Hamano (gitster
) , - Eric Sunshine (sunshineco
) , et Jeff King (peff
) .
(Fusionné par Junio C Hamano - gitster
- dans commit 2f84df2 , 6 juil. 2016)
http.c
: Implémenter la variable d'environnementGIT_TRACE_CURL
Implémentez la variable d'environnement
GIT_TRACE_CURL
Pour permettre un plus grand degré de détail deGIT_CURL_VERBOSE
, En particulier l'en-tête de transport complet et toutes les données utiles échangées.
Il pourrait être utile si une situation particulière pouvait nécessiter une analyse de débogage plus approfondie.
La documentation indiquera:
GIT_TRACE_CURL
Active un dump de trace complet de toutes les données entrantes et sortantes, y compris les informations descriptives, du protocole de transport git.
Cela ressemble à fairecurl --trace-ascii
Sur la ligne de commande.Cette option annule la définition de la variable d'environnement
GIT_CURL_VERBOSE
.
Vous pouvez voir cette nouvelle option utilisée dans cette réponse , mais également dans les tests Git 2.11 (Q4 2016):
Voir commit 14e2411 , commit 81590bf , commit 4527aa1 , commit 4eee6c6 (07 sept. 2016) par Elia Pinto (devzero2000
) .
(Fusion par Junio C Hamano - gitster
- dans commit 930b67e , 12 sept. 2016)
Utilisez la nouvelle variable d'environnement
GIT_TRACE_CURL
À la place de , obsolèteGIT_CURL_VERBOSE
.
GIT_TRACE_CURL=true git clone --quiet $HTTPD_URL/smart/repo.git
Avez-vous essayé d'ajouter le verbose (-v
) opérateur lorsque vous clonez?
git clone -v git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
Je pourrais trouver pas de moyen approprié pour activer le débogage SSH dans une version plus ancienne de git et ssh. J'ai cherché des variables d'environnement en utilisant ltrace -e getenv ...
et n’a trouvé aucune combinaison de variables GIT_TRACE ou SSH_DEBUG qui fonctionnerait.
Au lieu de cela, voici une recette pour injecter temporairement 'ssh -v' dans la séquence git-> ssh:
$ echo '/usr/bin/ssh -v ${@}' >/tmp/ssh
$ chmod +x /tmp/ssh
$ PATH=/tmp:${PATH} git clone ...
$ rm -f /tmp/ssh
Voici le résultat de version 1.8. avec la version ssh OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 févr. 201 clonant un dépôt 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'
Git 2.22 (T2 2019) introduit trace2
avec commit ee4512e par Jeff Hostetler :
trace2
: Créer une nouvelle fonction de trace combinéeCréez une nouvelle installation de traçage unifiée pour git.
L'intention éventuelle est de remplacer les routines actuellestrace_printf*
Ettrace_performance*
Par un ensemble unifié de routinesgit_trace2*
.En plus de l'API habituelle de style printf,
trace2
Fournit des verbes d'événement de niveau supérieur avec des champs fixes permettant l'écriture de données structurées.
Cela facilite le post-traitement et l'analyse pour les outils externes.Trace2 définit 3 cibles de sortie.
Ils sont définis à l'aide des variables d'environnement "GIT_TR2
", "GIT_TR2_PERF
" Et "GIT_TR2_EVENT
".
Ceux-ci peuvent être réglés sur "1" ou sur un chemin absolu (tout comme leGIT_TRACE
Actuel).
Remarque: en ce qui concerne le nom de la variable d'environnement, utilisez toujours GIT_TRACExxx
, Pas GIT_TRxxx
.
Donc en réalité GIT_TRACE2
, GIT_TRACE2_PERF
Ou GIT_TRACE2_EVENT
.
Voir le renommage Git 2.22 mentionné plus bas.
Ce qui suit correspond au travail initial sur cette nouvelle fonction de traçage, avec les noms de variable d’environnement old:
GIT_TR2
Est destiné à remplacerGIT_TRACE
Et à enregistrer les données récapitulatives des commandes.
GIT_TR2_PERF
Est destiné à remplacerGIT_TRACE_PERFORMANCE
.
Il étend la sortie avec des colonnes pour le processus de commande, le thread, le référentiel, les temps écoulés absolus et relatifs. Il rapporte les événements relatifs aux processus de démarrage/arrêt des processus enfants, de démarrage/d'arrêt des threads et à l'imbrication de fonctions par thread.
GIT_TR2_EVENT
Est un nouveau format structuré. Il écrit les données d'événement sous forme d'une série d'enregistrements JSON.Les appels aux fonctions trace2 se connectent à l'une des 3 cibles de sortie activées sans qu'il soit nécessaire d'appeler différentes routines
trace_printf*
Outrace_performance*
.
Voir commit a4d3a28 (21 mars 2019) par Josh Steadmon (steadmon
) .
(Fusionnée par Junio C Hamano - gitster
- dans commit 1b40314 , 08 mai 2019)
trace2
: Écrire dans les répertoires ciblesLorsque la valeur d'une variable d'environnement trace2 est un chemin absolu faisant référence à un répertoire existant, écrivez la sortie dans des fichiers (un par processus) situés sous le répertoire indiqué.
Les fichiers seront nommés en fonction du dernier composant du SID trace2, suivi d'un compteur pour éviter les collisions potentielles.Cela facilite la collecte de traces pour chaque invocation de git en définissant de manière inconditionnelle la variable env.
trace2
Appropriée avec un nom de répertoire constant.
Voir aussi commit f672dee (29 avril 2019), et commit 81567ca , commit 08881b9 , commit bad229a , - commit 26c6f25 , commit bce9db6 , commit 800a7f9 , commit a7bc01e , commit 39f4317 , - commit a089724 , commit 1703751 (15 avril 2019) par Jeff Hostetler (jeffhostetler
) .
(Fusionnée par Junio C Hamano - gitster
- dans commit 5b2d1c , 13 mai 2019)
La nouvelle documentation inclut maintenant paramètres de configuration qui ne sont lus que dans les fichiers de configuration système et globaux (ce qui signifie les fichiers de configuration de référentiel local et d'arborescence de travail et les arguments de ligne de commande -c
ne sont pas respectés.)
Exemple :
$ git config --global trace2.normalTarget ~/log.normal
$ git version
git version 2.20.1.155.g426c96fcdb
les rendements
$ 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
Et pour mesure de performance :
$ git config --global trace2.perfTarget ~/log.perf
$ git version
git version 2.20.1.155.g426c96fcdb
les rendements
$ 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
Comme indiqué dans Git 2.23 (T3 2019), la variable d'environnement à utiliser est GIT_TRACE2
.
Voir commit 6114a4 (26 juin 2019) par Carlo Marcelo Arenas Belón (carenas
) .
Voir commit 3efa1c6 (12 juin 2019) par var Arnfjörð Bjarmason (avar
) .
(Fusionné par Junio C Hamano - gitster
- dans commit e9eaaa4 , 9 juillet 2019)
Cela fait suite au travail effectué dans Git 2.22: commit 4e0d3aa , commit e4b75d6 (19 mai 2019) par SZEDER Gábor (szeder
) =.
(Fusion par Junio C Hamano - gitster
- dans commit 463dca6 , 30 mai 2019)
trace2
: Renommer les variables d'environnement en GIT_TRACE2 *Pour une variable d’environnement supposée être définie par les utilisateurs, les variables
GIT_TR2*
Env sont trop floues, incohérentes et laides.La plupart des variables d'environnement établies
GIT_*
N'utilisent pas les abréviations, et dans le cas de quelques variables (GIT_DIR
,GIT_COMMON_DIR
,GIT_DIFF_OPTS
), C'est assez évidente que les abréviations (DIR
etOPTS
) représentent.
Mais que veut direTR
? Suivre, traditionnel, remorque, transaction, transfert, transformation, transition, traduction, transplantation, transport, traversée, arbre, déclencheur, tronquer, confiance ou ...?!Comme le suggère le suffixe "2" dans son nom, trace2 est censé éventuellement remplacer la trace originale de Git.
Il est raisonnable de s’attendre à ce que les variables d’environnement correspondantes fassent de même et, après les variables originalesGIT_TRACE
, Elles sont appeléesGIT_TRACE2
; il n'y a rien de tel que 'GIT_TR
'.Toutes les variables de configuration spécifiques à trace2 sont, de manière très judicieuse, dans la section '
trace2
', Pas dans 'tr2
'.OTOH, nous ne gagnons rien du tout en omettant les trois derniers caractères de "trace" des noms de ces variables d'environnement .
Nous allons donc renommer toutes les variables d’environnement
GIT_TR2*
EnGIT_TRACE2*
, Avant qu’elles ne se retrouvent dans une version stable.