Git 2.22 (Q2 2019) presenta trace2
con commit ee4512e di Jeff Hostetler :
trace2
: crea una nuova funzione di traccia combinata
Crea una nuova funzione di traccia unificata per git.
L'intento finale è quello di sostituire la corrente trace_printf*
e le trace_performance*
routine con un insieme unificato di git_trace2*
routine.
Oltre alla solita API in stile printf, trace2
fornisce verbi di eventi di livello superiore con campi fissi che consentono la scrittura di dati strutturati.
Ciò semplifica la post-elaborazione e l'analisi di strumenti esterni.
Trace2 definisce 3 target di output.
Questi vengono impostati utilizzando le variabili di ambiente "GIT_TR2
", " GIT_TR2_PERF
" e " GIT_TR2_EVENT
".
Questi possono essere impostati su "1" o su un nome di percorso assoluto (proprio come l'attuale GIT_TRACE
).
Nota: per quanto riguarda il nome della variabile di ambiente, utilizzare sempre GIT_TRACExxx
, nonGIT_TRxxx
.
Quindi in realtà GIT_TRACE2
, GIT_TRACE2_PERF
o GIT_TRACE2_EVENT
.
Vedere la ridenominazione Git 2.22 menzionata più avanti di seguito.
Quello che segue è l' iniziale lavoro su questa nuova funzionalità di traccia, con i vecchi nomi delle variabili di ambiente:
GIT_TR2
è destinato a sostituire GIT_TRACE
e registra i dati di riepilogo dei comandi.
GIT_TR2_PERF
è inteso come sostituto di GIT_TRACE_PERFORMANCE
.
Estende l'output con colonne per il processo di comando, thread, repo, tempi trascorsi assoluti e relativi. Riporta eventi per l'avvio / arresto del processo figlio, l'avvio / arresto del thread e l'annidamento della funzione per thread.
GIT_TR2_EVENT
è un nuovo formato strutturato. Scrive i dati degli eventi come una serie di record JSON.
Le chiamate alle funzioni trace2 accedono a una delle 3 destinazioni di output abilitate senza la necessità di chiamare diverse trace_printf*
o trace_performance*
routine.
Vedi commit a4d3a28 (21 mar 2019) di Josh Steadmon ( steadmon
) .
(Unito da Junio C Hamano - gitster
- in commit 1b40314 , 08 maggio 2019)
trace2
: scrive nelle destinazioni della directory
Quando il valore di una variabile d'ambiente trace2 è un percorso assoluto che fa riferimento a una directory esistente, scrivere l'output su file (uno per processo) sotto la directory specificata.
I file verranno denominati in base al componente finale del SID trace2, seguito da un contatore per evitare potenziali collisioni.
Ciò rende più conveniente raccogliere tracce per ogni invocazione git impostando incondizionatamente l' trace2
envvar rilevante su un nome di directory costante.
Vedi anche commit f672dee (29 aprile 2019) e commit 81567ca , commit 08881b9 , commit bad229a , commit 26c6f25 , commit bce9db6 , commit 800a7f9 , commit a7bc01e , commit 39f4317 , commit a089724 , commit 1703751 (15 aprile 2019) di Jeff Hostetler ( jeffhostetler
) .
(Unita da Junio C Hamano - gitster
- in commit 5b2d1c0 , 13 maggio 2019)
La nuova documentazione ora include le impostazioni di configurazione che vengono lette solo dal sistema e dai file di configurazione globali (il che significa che i file di configurazione del repository locale e di lavoro e gli -c
argomenti della riga di comando non vengono rispettati).
Esempio :
$ git config --global trace2.normalTarget ~/log.normal
$ git version
git version 2.20.1.155.g426c96fcdb
i rendimenti
$ 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
E per misurare le prestazioni :
$ git config --global trace2.perfTarget ~/log.perf
$ git version
git version 2.20.1.155.g426c96fcdb
i rendimenti
$ 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
Come documentato in Git 2.23 (3 ° trimestre 2019), la variabile d'ambiente da usare è GIT_TRACE2
.
Vedi commit 6114a40 (26 giu 2019) di Carlo Marcelo Arenas Belón ( carenas
) .
Vedi commit 3efa1c6 (12 giu 2019) di Ævar Arnfjörð Bjarmason ( avar
) .
(Unito da Junio C Hamano - gitster
- in commit e9eaaa4 , 09 lug 2019)
Ciò segue il lavoro svolto in Git 2.22: commit 4e0d3aa , commit e4b75d6 (19 maggio 2019) di SZEDER Gábor ( szeder
) .
(Unito da Junio C Hamano - gitster
- in commit 463dca6 , 30 maggio 2019)
trace2
: rinomina le variabili di ambiente in GIT_TRACE2 *
Per una variabile di ambiente che dovrebbe essere impostata dagli utenti, la GIT_TR2*
sono semplicemente poco chiare, incoerenti e brutte.
La maggior parte delle stabiliti GIT_*
variabili d'ambiente non utilizzare abbreviazioni, e nel caso dei pochi che fare ( GIT_DIR
, GIT_COMMON_DIR
, GIT_DIFF_OPTS
) è abbastanza evidente che cosa le abbreviazioni ( DIR
e OPTS
) rappresentano.
Ma cosa faTR
? Traccia, tradizionale, trailer, transazione, trasferimento, trasformazione, transizione, traduzione, trapianto, trasporto, attraversamento, albero, trigger, troncamento, fiducia o ...?!
La funzione trace2, come suggerisce il suffisso '2' nel suo nome, dovrebbe eventualmente sostituire la funzione di traccia originale di Git.
È ragionevole aspettarsi che le variabili d'ambiente corrispondenti seguano l'esempio, e dopo le GIT_TRACE
variabili originali vengono chiamate GIT_TRACE2
; non esiste una cosa del genere ' GIT_TR
'.
Tutte le variabili di configurazione specifiche di trace2 sono, molto sensatamente, nella sezione ' trace2
', non in ' tr2
'.
OTOH, non otteniamo assolutamente nulla omettendo gli ultimi tre caratteri di "trace" dai nomi di queste variabili di ambiente .
Quindi, rinominiamo tutte GIT_TR2*
le variabili di ambiente in GIT_TRACE2*
, prima che diventino una versione stabile.
Git 2.24 (Q3 2019) migliora l'inizializzazione del repository Git.
Vedi commit 22932d9 , commit 5732f2b , commit 58ebccb (06 agosto 2019) di Jeff King ( peff
) .
(Unito da Junio C Hamano - gitster
- in commit b4a1eec , 09 set 2019)
common-main: ritarda l'inizializzazione di trace2
Inizializziamo il trace2
sistema nella funzione main () comune in modo che tutti i programmi (anche quelli che non sono integrati) consentano la traccia.
Ma l' trace2
avvio è relativamente pesante, poiché dobbiamo effettivamente leggere la configurazione su disco per decidere se tracciare.
Ciò può causare interazioni impreviste con altre inizializzazioni principali comuni. Ad esempio, finiremo nel codice di configurazione prima di chiamare initialize_the_repository()
, e il solito invariante che the_repository
non è mai NULL non verrà trattenuto.
trace2
Spingiamo ulteriormente l' inizializzazione in common-main, appena prima di eseguirla cmd_main()
.
Git 2.24 (Q4 2019) si assicura anche che l'output dal trace2
sottosistema sia formattato in modo più grazioso ora.
Vedi commit 742ed63 , commit e344305 , commit c2b890a (09 ago 2019), commit ad43e37 , commit 04f10d3 , commit da4589c (08 ago 2019) e commit 371df1b (31 luglio 2019) di Jeff Hostetler ( jeffhostetler
) .
(Unita da Junio C Hamano - gitster
- in commit 93fc876 , 30 set 2019)
E ancora Git 2.24
Vedi commit 87db61a , commit 83e57b0 (04 ott 2019) e commit 2254101 , commit 3d4548e (03 ott 2019) di Josh Steadmon ( steadmon
) .
(Unita da Junio C Hamano - gitster
- in commit d0ce4d9 , 15 ott 2019)
trace2
: scarta nuove tracce se la directory di destinazione contiene troppi file
Firmato-fuori-da: Josh Steadmon
trace2
può scrivere file in una directory di destinazione.
Con un uso intenso, questa directory può riempire di file, causando difficoltà per i sistemi di elaborazione delle tracce.
Questa patch aggiunge un'opzione di configurazione ( trace2.maxFiles
) per impostare un numero massimo di file che trace2
verranno scritti in una directory di destinazione.
Il seguente comportamento è abilitato quando maxFiles
è impostato su un numero intero positivo:
Il presupposto è che un sistema separato di elaborazione delle tracce abbia a che fare con le tracce generate; una volta elaborato e rimosso il file sentinella, dovrebbe essere sicuro generare di nuovo nuovi file di traccia.
Il valore predefinito per trace2.maxFiles
è zero, che disabilita il controllo del conteggio dei file.
La configurazione può anche essere sovrascritto con una nuova variabile d'ambiente: GIT_TRACE2_MAX_FILES
.
E Git 2.24 (Q4 2019) insegna trace2 sugli git push
stadi.
Vedi commit 25e4b80 , commit 5fc3118 (02 ott 2019) di Josh Steadmon ( steadmon
) .
(Unita da Junio C Hamano - gitster
- in commit 3b9ec27 , 15 ott 2019)
push
: aggiunge la strumentazione trace2
Firmato-fuori-da: Josh Steadmon
Aggiungi le tracce trace2 in transport.c
e builtin/push.c
per monitorare meglio il tempo trascorso in varie fasi di push:
- Elenco di riferimento
- Verifica dei sottomoduli
- Spingendo sottomoduli
- Spingendo i riferimenti
Con Git 2.25 (Q1 2020), alcuni dei file Documentation/technical
vengono spostati nei *.h
file di intestazione .
Vedi commit 6c51cb5 , commit d95a77d , commit bbcfa30 , commit f1ecbe0 , commit 4c4066d , commit 7db0305 , commettere f3b9055 , commettere 971b1f2 , commettere 13aa9c8 , commettere c0be43f , commettere 19ef3dd , commettere 301d595 , commettere 3a1b341 , commettere 126c1cc , commettere d27eb35 , commettere 405c6b1 , commettono d3d7172 , commit 3f1480b , commit 266f03e , commit 13c4d7e(17 nov 2019) di Heba Waly ( HebaWaly
) .
(Unita da Junio C Hamano - gitster
- in commit 26c816a , 16 dic 2019)
trace2
: sposta doc in trace2.h
Firmato-fuori-da: Heba Waly
Sposta la documentazione delle funzioni da Documentation/technical/api-trace2.txt
a trace2.h
poiché è più facile per gli sviluppatori trovare le informazioni sull'utilizzo accanto al codice invece di cercarle in un altro file doc.
Viene rimossa solo la sezione della documentazione delle funzioni Documentation/technical/api-trace2.txt
poiché il file è pieno di dettagli che sembravano più appropriati trovarsi in un file doc separato così com'è, con un collegamento al file doc aggiunto in trace2.h. Inoltre, il documento delle funzioni viene rimosso per evitare di avere informazioni ridondanti che saranno difficili da sincronizzare con la documentazione nel file di intestazione.
(sebbene tale riorganizzazione abbia avuto un effetto collaterale su un altro comando, spiegato e corretto con Git 2.25.2 (marzo 2020) in commit cc4f2eb (14 feb 2020) di Jeff King ( peff
) .
(Fuso da Junio C Hamano - gitster
- in commit 1235384 , 17 febbraio 2020) )
Con Git 2.27 (Q2 2020): miglioramento di Trace2 per consentire la registrazione delle variabili di ambiente .
Vedere commit 3d3adaa (20 marzo 2020) di Josh Steadmon ( steadmon
) .
(Unita da Junio C Hamano - gitster
- in commit 810dc64 , 22 aprile 2020)
trace2
: insegna a Git a registrare le variabili di ambiente
Firmato-fuori: Josh Steadmon
Acked-by: Jeff Hostetler
Tramite trace2, Git può già registrare interessanti parametri di configurazione (vedere la trace2_cmd_list_config()
funzione). Tuttavia, ciò può garantire un'immagine incompleta poiché molti parametri di configurazione consentono anche sostituzioni tramite variabili di ambiente.
Per consentire registri più completi, aggiungiamo una nuova trace2_cmd_list_env_vars()
funzione e un'implementazione di supporto, modellata sull'implementazione di registrazione dei parametri di configurazione preesistente.
Con Git 2.27 (2 ° trimestre 2020), insegnare ai codepati che mostrano i contatori dei progressi per utilizzare anche start_progress()
le stop_progress()
chiamate e come " region
" da tracciare.
Vedi commit 98a1364 (12 maggio 2020) di Emily Shaffer ( nasamuffin
) .
(Unita da Junio C Hamano - gitster
- in commit d98abce , 14 maggio 2020)
trace2
: registra il tempo di avanzamento e la velocità effettiva
Firmato-fuori-da: Emily Shaffer
Invece di insegnare una sola operazione, come ' git fetch
', come scrivere il throughput sulle tracce, possiamo imparare una vasta gamma di operazioni dell'utente che possono sembrare lente aggiungendo strumenti alla stessa libreria di avanzamento .
Le operazioni che mostrano progressi sono probabilmente lente e il tipo di cose che vogliamo comunque monitorare per le prestazioni.
Mostrando il conteggio degli oggetti e le dimensioni del trasferimento dei dati, dovremmo essere in grado di effettuare alcune misurazioni derivate per garantire che le operazioni si ridimensionino nel modo previsto.
E:
Con Git 2.27 (Q2 2020), la correzione dell'ultimo minuto per la nostra recente modifica per consentire l'uso dell'API di avanzamento come area tracciabile.
Vedi commit 3af029c (15 maggio 2020) di Derrick Stolee ( derrickstolee
) .
(Unita da Junio C Hamano - gitster
- in commit 85d6e28 , 20 maggio 2020)
progress
: chiama trace2_region_leave()
solo dopo aver chiamato_enter()
Firmato-fuori-da: Derrick Stolee
Un utente dell'API progress chiama in modo start_progress()
condizionale e dipende da display_progress()
estop_progress()
funzioni per diventare non operativo quando start_progress()
non è stato chiamato.
Come abbiamo aggiunto una chiamata trace2_region_enter()
astart_progress()
le chiamate verso altre chiamate API da trace2 le funzioni API di avanzamento devono fare in modo che queste chiamate trace2 vengono ignorati quando start_progress()
non è stato invitato lo struct progresso.
In particolare, non chiamare trace2_region_leave()
da stop_progress()
quando non abbiamo chiamato start_progress()
, che avrebbe chiamato la corrispondenza trace2_region_enter()
.
GIT_CURL_VERBOSE
, con Git 2.9.x / 2.10 avrai a disposizioneGIT_TRACE_CURL
. Vedi la mia risposta qui sotto .