Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

GIT_TRACE 환경변수로 git 명령어 실행 추적하기

Git을 사용하는데 유용한 정도까지는 아니지만 얼마전에 트위터에서 알게된 환경변수를 적어봅니다. git에서는 GIT_TRACE라는 환경변수를 제공하고 있고 이 환경변수에 1을 할당하면 git 명령어가 실행되는 과정을 추적해 줍니다. 그냥 명령어를 어떻게 파싱하고 처리해주는지를 추적해 주는 정도이고 내부 진행과정을 추적해 주는 것은 아닙니다.

$ 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 환경변수를 사용하시면 됩니다.
2012/08/02 23:44 2012/08/02 23:44