힘내 2.22 (Q2 2019) 출시 trace2
와 ee4512e 커밋 으로 제프 호 스테 틀러 :
trace2
: 새로운 결합 추적 기능 작성
자식에 대한 새로운 통합 추적 기능을 만듭니다.
최종 의도는 현재 trace_printf*
및 trace_performance*
루틴을 통합 된 세트 로 대체하는 것 입니다.git_trace2*
루틴 입니다.
일반적인 printf 스타일 API 외에도 trace2
구조화 된 데이터를 쓸 수있는 고정 필드가있는 더 높은 수준의 이벤트 동사를 제공합니다.
따라서 외부 툴에 대한 후 처리 및 분석이 쉬워집니다.
Trace2는 3 개의 출력 대상을 정의합니다.
환경 변수 " GIT_TR2
", " GIT_TR2_PERF
"및 " GIT_TR2_EVENT
"를 사용하여 설정됩니다 .
이것들은 "1"또는 절대 경로명으로 설정 될 수 있습니다 (current와 동일 GIT_TRACE
).
참고 : 환경 변수 이름에 대해 항상 사용 GIT_TRACExxx
하지 GIT_TRxxx
.
실제로 GIT_TRACE2
, GIT_TRACE2_PERF
또는 GIT_TRACE2_EVENT
.
아래에 언급 된 Git 2.22 이름 변경을 참조하십시오.
다음은 이전 환경 변수 이름 을 사용하여이 새로운 추적 기능에 대한 초기 작업입니다 .
GIT_TR2
GIT_TRACE
명령 요약 데이터를 대체 하고 기록합니다.
GIT_TR2_PERF
의 대체 용으로 고안되었습니다 GIT_TRACE_PERFORMANCE
.
명령 프로세스, 스레드, 저장소, 절대 및 상대 경과 시간에 대한 열로 출력을 확장합니다. 하위 프로세스 시작 / 중지, 스레드 시작 / 중지 및 스레드 별 함수 중첩에 대한 이벤트를보고합니다.
GIT_TR2_EVENT
새로운 구조화 된 형식입니다. 이벤트 데이터를 일련의 JSON 레코드로 작성합니다.
trace2 함수에 대한 호출은 다른 루틴 trace_printf*
이나 trace_performance*
루틴 을 호출 할 필요없이 활성화 된 3 개의 출력 대상 중 하나에 기록 합니다.
Josh Steadmon ( )의 commit a4d3a28 (2019 년 3 월 21 일)을 참조하십시오 . ( Junio C Hamano 에 의해 병합 -- 커밋 1b40314 , 2019 년 5 월 08 일)steadmon
gitster
trace2
: 디렉토리 대상에 쓰기
trace2 환경 변수의 값이 기존 디렉토리를 참조하는 절대 경로 인 경우 지정된 디렉토리 아래의 파일 (프로세스 당 하나)에 출력을 쓰십시오.
파일은 trace2 SID의 최종 구성 요소에 따라 이름이 지정되고 잠재적 충돌을 피하기위한 카운터가 뒤 따릅니다.
따라서 관련 trace2
envvar를 상수 디렉토리 이름 으로 무조건 설정하여 모든 git 호출에 대한 추적을 수집하는 것이 더 편리합니다 .
참조 f672dee 커밋 (2019년 4월 29일을), 및 81567ca 커밋 , 08881b9 커밋 , bad229a 커밋 , 26c6f25 커밋 , bce9db6 커밋 , 800a7f9 커밋 , a7bc01e 커밋 , 39f4317 커밋 , a089724 커밋 , 1,703,751 커밋 에 의해 (2019 4월 15일) (제프 호 스테 틀러를 jeffhostetler
) .
( Junio C gitster
Hamano 에 의해 병합 -- 커밋 5b2d1c0 , 2019 년 5 월 13 일)
새 문서는 이제 포함 에만 시스템 및 글로벌 설정 파일에서 읽어 구성 설정 (의미 저장소 로컬 및 worktree 설정 파일과-c
존중하지 않는 명령 줄 인수를.)
예 :
$ git config --global trace2.normalTarget ~/log.normal
$ git version
git version 2.20.1.155.g426c96fcdb
수확량
$ 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
그리고 성능 측정을 위해 :
$ git config --global trace2.perfTarget ~/log.perf
$ git version
git version 2.20.1.155.g426c96fcdb
수확량
$ 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
Git 2.23 (Q3 2019)에 설명 된대로 사용할 환경 변수는 다음과 같습니다. GIT_TRACE2
입니다.
Carlo Marcelo Arenas Belón ( )의 commit 6114a40 (2019 년 6 월 26 일)을 참조하십시오 .
참조 3efa1c6 커밋 에 의해 (2019년 6월 12일를) 라고 Ævar Arnfjörð Bjarmason ( ) . ( Junio C Hamano 에 의해 병합 - 커밋 e9eaaa4 , 2019 년 7 월 9 일)carenas
avar
gitster
이는 Git 2.22 : commit 4e0d3aa , commit e4b75d6 (2019 년 5 월 19 일) SZEDER Gábor ( szeder
)의 작업 을 따릅니다 .
( Junio C gitster
Hamano 에 의해 병합 -- 커밋 463dca6 , 2019 년 5 월 30 일)
trace2
: 환경 변수 이름을 GIT_TRACE2 *로 바꿉니다.
사용자가 설정해야하는 환경 변수의 경우 GIT_TR2*
너무 불분명하고 일관성이 추악합니다.
확립 된 GIT_*
환경 변수의 대부분은 약어를 사용하지 않으며 GIT_DIR
, ( GIT_COMMON_DIR
, GIT_DIFF_OPTS
) 를 사용하는 소수의 경우 약어 ( DIR
및 OPTS
)가 무엇을 의미하는지가 분명 합니다.
그러나 무엇 TR
을 의미합니까? 트랙, 전통, 트레일러, 트랜잭션, 전송, 변환, 전환, 번역, 이식, 운송, 통과, 트리, 트리거, 자르기, 신뢰 또는 ...?!
이름에서 '2'접미사에서 알 수 있듯이 trace2 기능은 결국 Git의 원래 추적 기능을 대체해야합니다.
해당 환경 변수가 적합하고 원래 GIT_TRACE
변수 다음에 호출 될 것으로 예상하는 것이 합리적입니다 GIT_TRACE2
. 그런 것은 없습니다 'GIT_TR
' .
모든 trace2 특정 구성 변수는 ' trace2
'가 아닌 ' '섹션 에있는 것이 현명 tr2
합니다.
OTOH, 우리는이 환경 변수의 이름에서 "추적"의 마지막 세 문자를 생략해도 아무것도 얻지 못합니다 .
따라서 모든 GIT_TR2*
환경 변수 의 이름을로 변경 GIT_TRACE2*
하여 안정적인 릴리스로 전환하십시오.
Git 2.24 (Q3 2019)는 Git 리포지토리 초기화를 개선합니다.
참조 22932d9 커밋 , 5732f2b 커밋 , 58ebccb 커밋 에 의해 (2019년 8월 6일) 제프 킹 ( peff
) .
( Junio C gitster
Hamano 에 의해 병합 - 커밋 b4a1eec , 2019 년 9 월 09 일)
공통-주 : 지연 추적 2 초기화
우리 trace2
는 공통 main () 함수에서 시스템을 초기화하여 모든 프로그램 (내장되지 않은 프로그램조차도)이 추적을 가능하게합니다.
그러나 trace2
실제로 디스크상의 구성을 읽어 추적 여부를 결정해야하기 때문에 시작은 상대적으로 무겁습니다.
이로 인해 다른 공통 기본 초기화와 예기치 않은 상호 작용이 발생할 수 있습니다. 예를 들어,을 호출하기 전에 구성 코드로 끝나고 initialize_the_repository()
일반적으로 변하지 않는the_repository
NULL이 아닌 은 유지되지 않습니다.
trace2
우리가 실행하기 직전까지 common-main에서 초기화를 아래로 밀어 봅시다 cmd_main()
.
Git 2.24 (Q4 2019)는 또한 trace2
서브 시스템의 출력 이보다 예쁘게 포맷되도록합니다.
참조 742ed63 커밋 , e344305 커밋 , c2b890a 커밋 (2019년 8월 9일)를 ad43e37 커밋 , 04f10d3 커밋 , da4589c 커밋 (08 년 8 월 2019), 및 371df1b 커밋 에 의해 (2019 7월 31일) 제프 호 스테 틀러를 ( jeffhostetler
) .
(의해 병합 - Junio C 하마노 gitster
- 에 93fc876 커밋 2,019 30 구월)
그리고 여전히 Git 2.24
참조 87db61a 커밋 , 83e57b0 커밋 (2019 10월 4일를) 및 2,254,101을 투입 , 3d4548e 커밋 으로 (03 년 10 월 2019) 조쉬 Steadmon ( steadmon
) .
( Junio C gitster
Hamano 에 의해 병합 -- 커밋 d0ce4d9 , 2019 년 10 월 15 일)
trace2
: 대상 디렉토리에 파일이 너무 많은 경우 새 추적을 삭제하십시오.
서명자 : Josh Steadmon
trace2
대상 디렉토리에 파일을 쓸 수 있습니다.
사용량이 많으면이 디렉토리가 파일로 채워 져서 추적 처리 시스템에 어려움을 줄 수 있습니다.
이 패치는 구성 옵션 ( trace2.maxFiles
)을 추가 trace2
하여 대상 디렉토리에 쓸 최대 파일 수를 설정합니다 .
maxFiles
가 양의 정수로 설정 되면 다음 동작이 활성화됩니다 .
별도의 추적 처리 시스템이 생성 된 추적을 처리한다고 가정합니다. 센티넬 파일을 처리하고 제거한 후에는 새 추적 파일을 다시 생성하는 것이 안전해야합니다.
의 기본값 trace2.maxFiles
은 0이며 파일 수 확인을 비활성화합니다.
새 환경 변수로 구성을 재정의 할 수도 있습니다 GIT_TRACE2_MAX_FILES
.
그리고 Git 2.24 (2019 년 4 분기)는 trace2에 git push
단계 에 대해 가르칩니다 .
Josh Steadmon ( )의 commit 25e4b80 , commit 5fc3118 (2019 년 10 월 02 일)을 참조하십시오 . ( Junio C Hamano 에 의해 병합 - 커밋 3b9ec27 , 2019 년 10 월 15 일)steadmon
gitster
push
: trace2 계측 추가
서명자 : Josh Steadmon
다양한 푸시 단계에서 소요 된 시간을 추적 transport.c
하고 builtin/push.c
추적 2 영역을 추가하고 다음을 수행하십시오 .
- 심판 나열
- 서브 모듈 점검
- 서브 모듈 푸시
- 심판을 밀어
Git 2.25 (Q1 2020)에서 일부는 Documentation/technical
헤더 *.h
파일 로 이동되었습니다 .
참조 6c51cb5 커밋 , d95a77d 커밋 , bbcfa30 커밋 , f1ecbe0 커밋 , 4c4066d 커밋 , 7db0305 커밋 , f3b9055 커밋 , 971b1f2 커밋 , 13aa9c8 커밋 , c0be43f 커밋 , 19ef3dd 커밋 , 301d595 커밋 , 3a1b341 커밋 , 126c1cc 커밋 , d27eb35 커밋 , 405c6b1 커밋 , 커밋 d3d7172 , commit 3f1480b , commit 266f03e , 커밋 13c4d7e그래피 (17 십일 2019)Heba Waly ( HebaWaly
) .
( Junio C gitster
Hamano 에 의해 병합 -- 커밋 26c816a , 2019 년 12 월 16 일)
trace2
: 문서를로 이동 trace2.h
서명자 : Heba Waly
개발자가 다른 문서 파일에서 코드를 찾는 대신 코드 옆에서 사용 정보를 쉽게 찾을 수 있으므로 함수 문서를에서 Documentation/technical/api-trace2.txt
로 이동 trace2.h
하십시오.
Documentation/technical/api-trace2.txt
파일에 trace2.h에 추가 된 doc 파일에 대한 링크와 함께 별도의 doc 파일에있는 것이 더 적절 해 보였으 므로 함수 문서 섹션 만 제거됩니다 . 또한 doc 함수는 중복 정보를 피하기 위해 제거되어 헤더 파일의 문서와 동기화하기가 어렵습니다.
그 개편 다른 명령에 부작용이 있었더라도 (설명과에서 힘내 2.25.2 (2020 월) 고정 cc4f2eb을 커밋 (기준 2020년 2월 14일) 제프 킹 ( peff
) .
(가 합병 Junio C 하마노는 - gitster
- 에에게 커밋 1235384 , 2020 년 2 월 17 일) )
Git 2.27 (Q2 2020) 사용 : 환경 변수의 로깅 을 허용하는 Trace2 향상 .
Josh Steadmon ( )의 commit 3d3adaa (2020 년 3 월 20 일)를 참조하십시오 . (의해 병합 - Junio C 하마노 - 에 810dc64 커밋 2,020 22 사월)steadmon
gitster
trace2
: Git에게 환경 변수를 기록하도록 지시
작성자 : Josh Steadmon
Acked-by : Jeff Hostetler
trace2를 통해 Git은 이미 흥미로운 구성 매개 변수를 기록 할 수 있습니다 ( trace2_cmd_list_config()
기능 참조 ). 그러나 많은 구성 매개 변수가 환경 변수를 통한 재정의를 허용하기 때문에 불완전한 그림을 제공 할 수 있습니다.
보다 완전한 로그를 허용하기 위해 trace2_cmd_list_env_vars()
기존의 구성 매개 변수 로깅 구현을 모델링 한 새 기능 및 지원 구현을 추가합니다 .
Git 2.27 (Q2 2020)을 사용하여 진행률 표시기를 보여주는 코드 경로에 추적 start_progress()
및 stop_progress()
호출을 " region
" 로 사용하도록 진행률 미터를 표시 하십시오 .
Emily Shaffer ( )의 commit 98a1364 (2020 년 5 월 12 일)를 참조하십시오 . (가 합병 Junio C 하마노 - - 에 d98abce을 투입 , 2020 (14) 월)nasamuffin
gitster
trace2
: 로그 진행 시간 및 처리량
에 의해 서명 : 에밀리 셰퍼
git fetch
트레이스에 처리량을 기록하는 방법 과 같은 하나의 작업 만 가르치는 대신 진행 라이브러리 자체에 툴링을 추가하여 느리게 보일 수있는 광범위한 사용자 작업에 대해 배울 수 있습니다 .
진행 상황을 표시하는 작업은 느리게 실행되고 성능에 대해 모니터링하려는 것입니다.
객체 수와 데이터 전송 크기를 보여줌으로써 우리는 몇 가지 파생 된 측정을 수행하여 작업이 예상대로 확장되는지 확인할 수 있어야합니다.
과:
Git 2.27 (Q2 2020)을 사용하면 진행률 API를 추적 가능한 영역으로 사용할 수 있도록 최근 변경 사항을 최종 수정했습니다.
Derrick Stolee ( )의 commit 3af029c (2020 년 5 월 15 일)를 참조하십시오 . (가 합병 - Junio C 하마노 - 에 85d6e28 커밋 2020 20 월)derrickstolee
gitster
progress
: 전화 trace2_region_leave()
한 후에 만 전화_enter()
사인 : Derrick Stolee
progress API 사용자는 start_progress()
조건부 로 호출하며 호출되지 않았을 때 작동하지 않는 display_progress()
및 stop_progress()
기능 에 의존합니다 start_progress()
.
우리가 전화를 추가로 trace2_region_enter()
에 start_progress()
, 진행 API 함수에서 다른 trace2 API 호출에 대한 호출이 확실 할 때 이러한 trace2 호출이 생략 된 것을 확인해야 start_progress()
진행 구조체 호출되지 않았습니다.
특히, 호출하지 않는 trace2_region_leave()
에서 stop_progress()
우리가 호출되지 않은 경우 start_progress()
일치라고 한 것이다, trace2_region_enter()
.
GIT_CURL_VERBOSE
Git 2.9.x / 2.10이GIT_TRACE_CURL
있습니다. 아래 내 답변을 참조하십시오 .