$ GIT_TRACE=1 git init
trace: built-in: git 'init'
Initialized empty Git repository in /Users/outsider/projects/git-trace/.git/
위처럼 git 명령어를 실행할 때 GIT_TRACE=1를 앞에 붙혀서 git 명령어가 환경변수를 사용하도록 하면 추적이 됩니다. 환경변수에 등록해도 동일하겠지만 굳이 그럴 정도로 유용해 보이지는 않습니다. 위 실행결과에서 보듯이 trace: 라는 접두사가 붙으면서 내장 명령어인 git 'init'이 실행된 것을 볼 수 있습니다.(당연한거죠.)
$ GIT_TRACE=1 git st
trace: exec: 'git-st'
trace: run_command: 'git-st'
trace: alias expansion: st => 'status'
trace: built-in: git 'status'
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# test
nothing added to commit but untracked files present (use "git add" to track)
저는 status 명령어에 st라는 별칭을 주어서 사용하기 때문에 git st를 실행하자 명령어가 없음을 확인하고 st를 status로 변환해서 실행하고 있습니다.
$ GIT_TRACE=1 git push
trace: built-in: git 'push'
trace: run_command: 'ssh' 'git@github.com' 'git-receive-pack '\''outsideris/curlybrace.git'\'''
trace: run_command: 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
trace: exec: 'git' 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
trace: built-in: git 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
Counting objects: 99, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (78/78), done.
Writing objects: 100% (83/83), 304.26 KiB, done.
Total 83 (delta 29), reused 0 (delta 0)
To git@github.com:outsideris/curlybrace.git
a64ae07..439ec67 master -> master
좀 더 복잡한 실행과정의 git push를 실행해 봤습니다. 명령어를 다 이해는 못하지만 푸쉬를 실행하는 과정이 적나라하게 나오고 있습니다.(실해오가정중 git-receive-pack부터 시작하는 과정은 ProGit의 내부동작을 설명한 챕터에서 본 기억이 나는군요.)
이처럼 git 명령어가 실행되는 것을 확인해 보고 싶으시면 GIT_TRACE 환경변수를 사용하시면 됩니다.
Comments