O Git 2.22 (Q2 2019) é apresentado trace2
com o commit ee4512e de Jeff Hostetler :
trace2
: crie um novo recurso de rastreio combinado
Crie um novo recurso de rastreamento unificado para o git.
A intenção final é substituir a corrente trace_printf*
e as trace_performance*
rotinas por um conjunto unificado de git_trace2*
rotinas.
Além da API habitual no estilo printf, trace2
fornece verbos de eventos no nível mais alto com campos fixos, permitindo a gravação de dados estruturados.
Isso facilita o pós-processamento e a análise de ferramentas externas.
Trace2 define três destinos de saída.
Eles são configurados usando as variáveis de ambiente " GIT_TR2
", "GIT_TR2_PERF
" e " GIT_TR2_EVENT
".
Eles podem ser definidos como "1" ou com um nome de caminho absoluto (assim como o atual GIT_TRACE
).
Nota: em relação ao nome da variável de ambiente, use sempre GIT_TRACExxx
, não GIT_TRxxx
.
Então GIT_TRACE2
, na verdade , GIT_TRACE2_PERF
ou GIT_TRACE2_EVENT
.
Veja a renomeação do Git 2.22 mencionada posteriormente abaixo.
A seguir, é apresentado o trabalho inicial desse novo recurso de rastreamento, com o nomes de variáveis de ambiente antigos :
GIT_TR2
destina-se a substituir um GIT_TRACE
dados de resumo do comando and logs.
GIT_TR2_PERF
destina-se a substituir o GIT_TRACE_PERFORMANCE
.
Ele estende a saída com colunas para o processo de comando, encadeamento, repo, tempos absolutos e relativos. Ele relata eventos para início / parada do processo filho, início / parada do encadeamento e aninhamento de função por encadeamento.
GIT_TR2_EVENT
é um novo formato estruturado. Ele grava dados do evento como uma série de registros JSON.
As chamadas para as funções trace2 registram-se em qualquer um dos três destinos de saída ativados sem a necessidade de chamar diferentes trace_printf*
trace_performance*
rotinas ou .
Veja commit a4d3a28 (21 Mar 2019) por Josh Steadmon ( steadmon
) .
(Mesclado por Junio C Hamano - gitster
- no commit 1b40314 , 08 de maio de 2019)
trace2
: gravar nos destinos de diretório
Quando o valor de uma variável de ambiente trace2 for um caminho absoluto referente a um diretório existente, grave a saída nos arquivos (um por processo) abaixo do diretório fornecido.
Os arquivos serão nomeados de acordo com o componente final do SID trace2, seguido por um contador para evitar possíveis colisões.
Isso torna mais conveniente coletar rastreamentos para cada chamada de git, definindo incondicionalmente o trace2
envvar relevante como um nome de diretório constante.
Consulte também commit f672dee (29 abr 2019) e commit 81567ca , commit 08881b9 , commit bad229a , commit 26c6f25 , commit bce9db6 , commit 800a7f9 , commit a7bc01e , commit 39f4317 , commit a089724 , commit 1703751 (15 abr 2019) por Jeff Hostetler ( jeffhostetler
) .
(Incorporado por Junio C Hamano - gitster
- in commit 5b2d1c0 , 13 de maio de 2019)
A nova documentação agora inclui definições de configuração que são lidas apenas a partir do sistema e dos arquivos de configuração globais (o que significa que os arquivos de configuração locais e da árvore de trabalho do repositório e os -c
argumentos da linha de comando não são respeitados.)
Exemplo :
$ git config --global trace2.normalTarget ~/log.normal
$ git version
git version 2.20.1.155.g426c96fcdb
rendimentos
$ 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 para medir o desempenho :
$ git config --global trace2.perfTarget ~/log.perf
$ git version
git version 2.20.1.155.g426c96fcdb
rendimentos
$ 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
Conforme documentado no Git 2.23 (terceiro trimestre de 2019), a variável de ambiente a ser usada é GIT_TRACE2
.
Veja commit 6114a40 (26 jun 2019) de Carlo Marcelo Arenas Belón ( carenas
) .
Veja commit 3efa1c6 (12 Jun 2019) por Ævar Arnfjörð Bjarmason ( avar
) .
(Mesclado por Junio C Hamano - gitster
- in commit e9eaaa4 , 09 jul 2019)
Isso segue o trabalho realizado no Git 2.22: commit 4e0d3aa , commit e4b75d6 (19 de maio de 2019) por SZEDER Gábor ( szeder
) .
(Incorporado por Junio C Hamano - gitster
- in commit 463dca6 , 30 de maio de 2019)
trace2
: renomeie variáveis de ambiente para GIT_TRACE2 *
Para uma variável de ambiente que deveria ser definida pelos usuários, os ambientes GIT_TR2*
são muito pouco claros, inconsistentes e feios.
A maioria dos estabelecidos GIT_*
variáveis de ambiente não usar abreviaturas, e no caso dos poucos que fazer ( GIT_DIR
, GIT_COMMON_DIR
, GIT_DIFF_OPTS
) é bastante óbvio que as abreviaturas ( DIR
e OPTS
) representam.
Mas o que TR
significa? Rastrear, tradicional, trailer, transação, transferência, transformação, transição, tradução, transplante, transporte, travessia, árvore, gatilho, truncamento, confiança ou ...?!
O recurso trace2, como o sufixo '2' em seu nome sugere, supostamente substituirá o recurso de rastreamento original do Git.
É razoável esperar que as variáveis de ambiente correspondentes sigam o exemplo e, depois das GIT_TRACE
variáveis originais , elas são chamadas GIT_TRACE2
; não existe tal coisa é ' GIT_TR
'.
Todas as variáveis de configuração específicas do trace2 estão, muito sensatamente, na seção ' trace2
', não em ' tr2
'.
OTOH, não ganhamos nada ao omitir os três últimos caracteres do "rastreio" dos nomes dessas variáveis de ambiente .
Então, vamos renomear todas GIT_TR2*
as variáveis de ambiente para GIT_TRACE2*
, antes que elas cheguem a um release estável.
O Git 2.24 (terceiro trimestre de 2019) melhora a inicialização do repositório Git.
Consulte commit 22932d9 , commit 5732f2b , commit 58ebccb (06 ago 2019) por Jeff King ( peff
) .
(Mesclado por Junio C Hamano - gitster
- in commit b4a1eec , 09 set 2019)
common-main: atraso na inicialização do trace2
Inicializamos o trace2
sistema na função main () comum, para que todos os programas (mesmo aqueles que não sejam integrados) habilitem o rastreio.
Mas a trace2
inicialização é relativamente pesada, pois precisamos ler a configuração do disco para decidir se devemos rastrear.
Isso pode causar interações inesperadas com outra inicialização principal comum. Por exemplo, terminaremos no código de configuração antes de chamar initialize_the_repository()
, e a invariante usual que the_repository
nunca é NULL não será mantida.
Vamos empurrar a trace2
inicialização ainda mais para baixo no common-main, antes de executar cmd_main()
.
O Git 2.24 (quarto trimestre de 2019) também garante que a saída do trace2
subsistema seja formatada com mais beleza agora.
Consulte commit 742ed63 , commit e344305 , commit c2b890a (09 de agosto de 2019), commit ad43e37 , commit 04f10d3 , commit da4589c (08 ago 2019) e commit 371df1b (31 jul 2019) por Jeff Hostetler ( jeffhostetler
) .
(Incorporado por Junio C Hamano - gitster
- in commit 93fc876 , 30 set 2019)
E, ainda Git 2.24
Consulte commit 87db61a , commit 83e57b0 (04 out 2019) e commit 2254101 , commit 3d4548e (03 out 2019) por Josh Steadmon ( steadmon
) .
(Incorporado por Junio C Hamano - gitster
- in commit d0ce4d9 , 15 out 2019)
trace2
: descartar novos rastreamentos se o diretório de destino tiver muitos arquivos
Assinado por: Josh Steadmon
trace2
pode gravar arquivos em um diretório de destino.
Com uso intenso, esse diretório pode ser preenchido com arquivos, causando dificuldade para os sistemas de processamento de rastreamento.
Este patch adiciona uma opção de configuração ( trace2.maxFiles
) para definir um número máximo de arquivos que trace2
serão gravados em um diretório de destino.
O seguinte comportamento é ativado quando o maxFiles
é definido como um número inteiro positivo:
A suposição é que um sistema de processamento de rastreamento separado esteja lidando com os rastreamentos gerados; Depois de processar e remover o arquivo sentinela, deve ser seguro gerar novos arquivos de rastreamento novamente.
O valor padrão para trace2.maxFiles
é zero, o que desativa a verificação da contagem de arquivos.
A configuração também pode ser substituída por uma nova variável de ambiente: GIT_TRACE2_MAX_FILES
.
E o Git 2.24 (quarto trimestre de 2019) ensina o trace2 sobre os git push
estágios.
Veja commit 25e4b80 , commit 5fc3118 (02 out 2019) por Josh Steadmon ( steadmon
) .
(Incorporado por Junio C Hamano - gitster
- in commit 3b9ec27 , 15 out 2019)
push
: adicionar instrumentação trace2
Assinado por: Josh Steadmon
Adicione regiões trace2 transport.c
e builtin/push.c
para controlar melhor o tempo gasto em várias fases de envio:
- Listagens refs
- Verificando submódulos
- Empurrando submódulos
- Empurrando refs
Com o Git 2.25 (primeiro trimestre de 2020), alguns Documentation/technical
deles são movidos para os *.h
arquivos de cabeçalho .
Veja cometer 6c51cb5 , cometer d95a77d , cometer bbcfa30 , cometer f1ecbe0 , cometer 4c4066d , cometer 7db0305 , cometer f3b9055 , cometer 971b1f2 , cometer 13aa9c8 , cometer c0be43f , cometer 19ef3dd , cometer 301d595 , cometer 3a1b341 , cometer 126c1cc , cometer d27eb35 , cometer 405c6b1 , cometer d3d7172 , commit 3f1480b , commit 266f03e , confirmar 13c4d7e(17 Nov 2019) porHeba Waly ( HebaWaly
) .
(Incorporado por Junio C Hamano - gitster
- in commit 26c816a , 16 dez 2019)
trace2
: mover documento para trace2.h
Assinado por: Heba Waly
Mova a documentação das funções de Documentation/technical/api-trace2.txt
para trace2.h
, pois é mais fácil para os desenvolvedores encontrar as informações de uso ao lado do código, em vez de procurá-las em outro arquivo doc.
Somente a seção de documentação de funções é removida, Documentation/technical/api-trace2.txt
pois o arquivo está cheio de detalhes que pareciam mais apropriados em um arquivo doc separado, com um link para o arquivo doc adicionado no trace2.h. Além disso, o documento de funções é removido para evitar informações redundantes, que dificilmente serão sincronizadas com a documentação no arquivo de cabeçalho.
(embora essa reorganização tenha tido um efeito colateral em outro comando, explicado e corrigido no Git 2.25.2 (março de 2020) no commit cc4f2eb (14 de fevereiro de 2020) por Jeff King ( peff
) .
(Mesclado por Junio C Hamano - gitster
- no commit 1235384 , 17 de fevereiro de 2020) )
Com Git 2.27 (Q2 2020): aprimoramento do Trace2 para permitir o registro de variáveis de ambiente .
Veja commit 3d3adaa (20 de março de 2020) de Josh Steadmon ( steadmon
) .
(Mesclado por Junio C Hamano - gitster
- no commit 810dc64 , 22 de abril de 2020)
trace2
: ensine o Git a registrar variáveis de ambiente
Assinado por: Josh Steadmon
Aceita por: Jeff Hostetler
Através do trace2, o Git já pode registrar parâmetros interessantes de configuração (consulte o trace2_cmd_list_config()
função). No entanto, isso pode fornecer uma imagem incompleta, porque muitos parâmetros de configuração também permitem substituições por meio de variáveis de ambiente.
Para permitir logs mais completos, adicionamos uma nova trace2_cmd_list_env_vars()
função e implementação de suporte, modelada após a implementação de log de parâmetros de configuração preexistente.
Com o Git 2.27 (Q2 2020), ensine caminhos de código que mostram o medidor de progresso a também usar start_progress()
as stop_progress()
chamadas e como um "region
" a ser rastreado.
Veja commit 98a1364 (12 de maio de 2020) de Emily Shaffer ( nasamuffin
) .
(Incorporado por Junio C Hamano - gitster
- in commit d98abce , 14 de maio de 2020)
trace2
: registrar o tempo e a taxa de transferência
Assinado por: Emily Shaffer
Em vez de ensinar apenas uma operação, como ' git fetch
', como escrever a taxa de transferência em rastreamentos, podemos aprender sobre uma ampla gama de operações do usuário que podem parecer lentas, adicionando ferramentas à própria biblioteca de progresso .
As operações que exibem o progresso provavelmente serão de execução lenta e, de qualquer maneira, o tipo de coisa que queremos monitorar o desempenho.
Ao mostrar a contagem de objetos e o tamanho da transferência de dados, poderemos fazer algumas medições derivadas para garantir que as operações estejam escalando da maneira esperada.
E:
Com o Git 2.27 (Q2 2020), correção de última hora para nossas alterações recentes para permitir o uso da API de progresso como uma região rastreável.
Veja commit 3af029c (15 de maio de 2020) por Derrick Stolee ( derrickstolee
) .
(Mesclado por Junio C Hamano - gitster
- na confirmação 85d6e28 , 20 de maio de 2020)
progress
: ligar trace2_region_leave()
somente depois de ligar_enter()
Assinado por: Derrick Stolee
Um usuário da API de progresso chama start_progress()
condicionalmente e depende das funções display_progress()
e stop_progress()
para se tornar não operacional quando start_progress()
não tiver sido chamado.
Como nós adicionamos uma chamada para trace2_region_enter()
a start_progress()
, as chamadas para outras chamadas de API trace2 das funções progresso API deve certificar-se de que essas chamadas trace2 são ignorados quandostart_progress()
não foi chamado na struct progresso.
Especificamente, não chame trace2_region_leave()
a partir de stop_progress()
quando não têm chamado start_progress()
, que teria chamado a correspondência trace2_region_enter()
.
GIT_CURL_VERBOSE
, você terá com o Git 2.9.x / 2.10GIT_TRACE_CURL
. Veja minha resposta abaixo .