git / git-shell 관련 문제를 어떻게 디버깅 할 수 있습니까?


148

git / git-shell에 관한 디버그 정보를 어떻게 얻을 수 있습니까?

문제 user1없이 저장소를 user2복제 할 수 있지만 빈 저장소 만 복제 할 수 있는 문제가 있었습니다 . 나는 설정 GIT_TRACE=1했지만 유용한 것은 없다.

마지막으로 오랜 시행 착오 끝에 파일에 대한 권한 문제인 것으로 나타났습니다. 적절한 오류 메시지가이 문제를 단락시킬 수 있습니다.


참고 : 이외에도 GIT_CURL_VERBOSEGit 2.9.x / 2.10이 GIT_TRACE_CURL있습니다. 아래 내 답변을 참조하십시오 .
VonC

그리고 (3 년 후 2019 년 2 분기 GIT_TRACE_CURL) 이제 trace2. 예 : git config --global trace2.normalTarget ~/log.normal. 참조 아래에있는 내 (새) 답을 .
VonC

답변:


212

더 자세한 출력을 위해 다음을 사용하십시오.

GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master


53
핵심 옵션 외에 몇 가지 GIT_TRACE 옵션이 있습니다. über-verbose 옵션은 다음과 같습니다.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
이 변수를 어떻게 그리고 어디에 설정합니까?
Hunsu 2012 년

그것은 터미널에 붙여 넣을 수있는 전체 줄입니다. git pull origin master실행하려는 명령으로 부품을 교체해야합니다 .
Aeolun

1
어떤 플랫폼에서 작동합니까? 확실히 Windows는 아닙니다.
cowlinator

8
Windows에서는 이러한 변수를 한 번에 하나씩 (한 줄에 하나씩) 다음과 같이 설정할 수 있습니다.set GIT_CURL_VERBOSE=1 set GIT_TRACE=1 git pull origin master
cowlinator

85

디버깅

Git에는 git 문제를 디버깅하는 데 사용할 수있는 상당히 완전한 추적 세트가 포함되어 있습니다.

이를 켜려면 다음 변수를 정의 할 수 있습니다.

  • GIT_TRACE 일반적인 흔적의 경우
  • GIT_TRACE_PACK_ACCESS 팩 파일 액세스 추적
  • GIT_TRACE_PACKET 네트워크 운영을위한 패킷 레벨 추적
  • GIT_TRACE_PERFORMANCE 성능 데이터를 기록하기 위해
  • GIT_TRACE_SETUP 상호 작용하는 저장소 및 환경 발견에 대한 정보는
  • GIT_MERGE_VERBOSITY 재귀 병합 전략 디버깅 (값 : 0-5)
  • GIT_CURL_VERBOSE모든 curl 메시지 (와 동등한 curl -v) 를 로깅하기 위해
  • GIT_TRACE_SHALLOW 얕은 리포지토리의 페치 / 클로닝 디버깅 용.

가능한 값은 다음과 같습니다.

  • true, 1또는 2stderr에 쓰고,
  • /지정된 파일에 대한 출력을 추적하기 위해 시작하는 절대 경로

자세한 내용은 Git 내부-환경 변수를 참조하십시오.


SSH

SSH 문제의 경우 다음 명령을 시도하십시오.

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

또는 ssh자격 증명을 확인 하는 데 사용 합니다 (예 :

ssh -vvvT git@github.com

또는 HTTPS 포트를 통해 :

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

참고 : -v상세 수준을 줄이려면 수를 줄이십시오 .


$ 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
변경 echo 'ssh -vvv $*' > ssh && chmod +x ssh하려면 echo 'ssh -vvv "$@"' > ssh && chmod +x ssh단일 매개 변수에 공백이 가장자리의 경우에 안전해야한다.
Alexander Bird

46

이거 한번 해봐:

GIT_TRACE=1 git pull origin master

40

over SSH 인 경우 다음을 사용할 수 있습니다.

디버그 레벨 2 및 3에 각각 -vv 또는 -vvv 유형의 디버그 레벨이 높을 경우 :

# 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>

이것은 주로 서버의 공개 및 개인 키 문제를 처리하는 데 유용합니다. 'git clone'뿐만 아니라 모든 git 명령 에이 명령을 사용할 수 있습니다.


예, 이것은 완벽하게 작동합니다. 다른 사람보다 낫습니다. 예, 이것은 완벽하게 작동합니다. 다른 사람보다 낫습니다.
BMW

이것은 지금 주요 문제를 해결해야하기 때문에 가장 유용하지만 CentOS Linux 릴리스 7.2.1511의 git 1.8.3.1 및 OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 2013 년 2 월 11 일에서는 작동하지 않습니다. (핵심). :(
Greg Dubicki 2016

@GregDubicki 이상한. 답변을 업데이트 할 수 있도록 도움이되는 사항을 알려주십시오.
Basil Musa

1
Windows에서는 set GIT_SSH_COMMAND=ssh -v따옴표없이 사용하십시오 .
jansohn

18

Git 2.9.x / 2.10 (2016 년 3 분기)에는 또 다른 디버그 옵션이 추가되었습니다 GIT_TRACE_CURL.

Elia Pinto ( )의 commit 73e57aa , commit 74c682d (2016 년 5 월 23 일)를 참조하십시오 . 도움 : Torsten Bögershausen ( ) , Ramsay Jones, Junio ​​C Hamano ( ) , Eric Sunshine ( )Jeff King ( ) . ( Junio ​​C Hamano의해 병합 -- 커밋 2f84df2 , 2016 년 7 월 6 일)devzero2000
tboegigitstersunshinecopeff
gitster

http.c: 구현 GIT_TRACE_CURL 환경 변수

GIT_TRACE_CURL환경 변수를 구현하여 GIT_CURL_VERBOSE특히 전체 전송 헤더와 교환 된 모든 데이터 페이로드에 대해보다 자세하게 설명 하십시오.
특정 상황에서보다 철저한 디버깅 분석이 필요한 경우 유용 할 수 있습니다.

설명서 에는 다음이 명시되어 있습니다.

GIT_TRACE_CURL

설명 정보를 포함하여 git 전송 프로토콜의 모든 수신 및 발신 데이터에 대한 컬 전체 추적 덤프를 사용합니다.
이것은하는 것과 비슷합니다curl --trace-ascii 명령 행에서하는 .

이 옵션은 GIT_CURL_VERBOSE환경 변수 설정을 재정의합니다 .


이 답변에 사용 된 새로운 옵션을 볼 수 있습니다 에서뿐만 아니라 Git 2.11 (Q4 2016) 테스트에서 .

참조 14e2411 커밋 , 81590bf 커밋 , 4527aa1 커밋 , 4eee6c6 커밋 에 의해 (2016년 9월 7일) (엘리아 핀토을 devzero2000) .
( Junio ​​C gitsterHamano 에 의해 합병 -- 커밋 930b67e , 2016 년 9 월 12 일)

더 이상 사용되지 않는GIT_TRACE_CURL환경 변수를 사용하십시오 GIT_CURL_VERBOSE .

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

이 기능은 멋지다! 유일한 점은 ASCII 출력 ( (ch >= 0x20) && (ch < 0x80)점 으로 표시되지 않는 모든 것을 인쇄하는 곳 .)이며 http 데이터의 16 진수 출력 방법은 없습니다.
kinORnirvana

8

힘내 2.22 (Q2 2019) 출시 trace2ee4512e 커밋 으로 제프 호 스테 틀러 :

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_TR2GIT_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의 최종 구성 요소에 따라 이름이 지정되고 잠재적 충돌을 피하기위한 카운터가 뒤 따릅니다.

따라서 관련 trace2envvar를 상수 디렉토리 이름 으로 무조건 설정하여 모든 git 호출에 대한 추적을 수집하는 것이 더 편리합니다 .


참조 f672dee 커밋 (2019년 4월 29일을), 및 81567ca 커밋 , 08881b9 커밋 , bad229a 커밋 , 26c6f25 커밋 , bce9db6 커밋 , 800a7f9 커밋 , a7bc01e 커밋 , 39f4317 커밋 , a089724 커밋 , 1,703,751 커밋 에 의해 (2019 4월 15일) (제프 호 스테 틀러를 jeffhostetler) .
( Junio ​​C gitsterHamano 에 의해 병합 -- 커밋 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 gitsterHamano 에 의해 병합 -- 커밋 463dca6 , 2019 년 5 월 30 일)

trace2: 환경 변수 이름을 GIT_TRACE2 *로 바꿉니다.

사용자가 설정해야하는 환경 변수의 경우 GIT_TR2* 너무 불분명하고 일관성이 추악합니다.

확립 된 GIT_*환경 변수의 대부분은 약어를 사용하지 않으며 GIT_DIR, ( GIT_COMMON_DIR, GIT_DIFF_OPTS) 를 사용하는 소수의 경우 약어 ( DIROPTS)가 무엇을 의미하는지가 분명 합니다.
그러나 무엇 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 gitsterHamano 에 의해 병합 - 커밋 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 gitsterHamano 에 의해 병합 -- 커밋 d0ce4d9 , 2019 년 10 월 15 일)

trace2: 대상 디렉토리에 파일이 너무 많은 경우 새 추적을 삭제하십시오.

서명자 : Josh Steadmon

trace2대상 디렉토리에 파일을 쓸 수 있습니다.
사용량이 많으면이 디렉토리가 파일로 채워 져서 추적 처리 시스템에 어려움을 줄 수 있습니다.

이 패치는 구성 옵션 ( trace2.maxFiles)을 추가 trace2하여 대상 디렉토리에 쓸 최대 파일 수를 설정합니다 .

maxFiles가 양의 정수로 설정 되면 다음 동작이 활성화됩니다 .

  • trace2파일을 대상 디렉토리에 쓸 때는 먼저 추적을 폐기해야하는지 여부를 확인하십시오. 다음과 같은 경우 추적을 삭제해야합니다.

    • 너무 많은 파일이 있음을 선언하는 센티넬 파일이 있습니다.
    • 또는 파일 수가을 (를) 초과 trace2.maxFiles합니다.
      후자의 경우 git-trace2-discard향후 검사 속도를 높이기 위해 이름이 지정된 센티넬 파일을 만듭니다 .

별도의 추적 처리 시스템이 생성 된 추적을 처리한다고 가정합니다. 센티넬 파일을 처리하고 제거한 후에는 새 추적 파일을 다시 생성하는 것이 안전해야합니다.

의 기본값 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 gitsterHamano 에 의해 병합 -- 커밋 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().


4

-v복제 할 때 verbose ( ) 연산자를 추가해 보셨습니까 ?

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


2

이전 자식 버전 (1.8 이전)

이전 git 및 ssh 버전에서 SSH 디버깅을 활성화하는 적절한 방법을 찾을 수 없습니다 . 나는 사용하는 환경 변수를 ltrace -e getenv ...찾았고 작동하는 GIT_TRACE 또는 SSH_DEBUG 변수의 조합을 찾을 수 없습니다.

대신 git-> ssh 시퀀스에 'ssh -v'를 임시로 주입하는 방법이 있습니다.

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

다음 은 ssh 버전 OpenSSH_5.3p1, OpenSSL 1.0.1e-fips가 포함git 버전 1.8.3 의 출력입니다. 2013 년 2 월 11 일 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'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.