Git komutlarını çalıştırdığınızda arka planda neler olduğunu merak ettiniz mi? Yada daha önemlisi bir şekilde hata alıp neden çalışmadığını bulmaya uğraştınız oldu mu?
Bunun kolay bir yöntemi var. git
herzaman bash
shell içinde çalışır ve birçok shell environment variable
kullanır. Bunların hepsinden bahsetmiycem detaylarına buradan bakılabilir. Git Internals - Environment Variables
Özellikle networking ve debugging bölümleri benim çok işime yarıyor. En fazla kullandığım ise GIT_TRACE
.
Kullanmak için herhangi bir git komutunun önüne aşağıdaki gibi yazmanız yeterli.
GIT_TRACE=1 git pull
Örneğin git pull
komutu normalde az output üretirir.
$ git pull
Already up-to-date.
Aynı komutu GIT_TRACE
ile çalıştırdığımızda ise birçok işlem yaptığını ve farklı komutlar çalıştırdığını görürüz.
$ GIT_TRACE=1 git pull
trace: exec: 'git-pull'
trace: run_command: 'git-pull'
trace: built-in: git 'rev-parse' '--git-dir'
trace: built-in: git 'rev-parse' '--is-bare-repository'
trace: built-in: git 'rev-parse' '--show-toplevel'
trace: built-in: git 'ls-files' '-u'
trace: built-in: git 'symbolic-ref' '-q' 'HEAD'
trace: built-in: git 'config' '--bool' 'branch.master.rebase'
trace: built-in: git 'config' '--bool' 'pull.rebase'
trace: built-in: git 'rev-parse' '-q' '--verify' 'HEAD'
trace: built-in: git 'fetch' '--update-head-ok'
trace: run_command: 'git-remote-https' 'origin' 'https://github.com/TryGhost/Ghost.git'
trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet'
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'
trace: run_command: 'gc' '--auto'
trace: exec: 'git' 'gc' '--auto'
trace: built-in: git 'gc' '--auto'
trace: built-in: git 'rev-parse' '-q' '--verify' 'HEAD'
trace: built-in: git 'fmt-merge-msg'
trace: built-in: git 'merge' 'Merge branch '\''master'\'' of https://github.com/TryGhost/Ghost' 'HEAD' '7f753acff179e7f6393126b1e45c1c84277b0f1f'
Already up-to-date.
GIT_TRACE
iki farklı değer seti ile çalışır.
- "1", "2" ve "true" değerleri, sonucun
stderr'a
yazılmasını sağlar /
ile başlayan tam dosya adresi ise verilen dosyaya yazılmasını sağlar
GIT_TRACE_PERFORMANCE
da performansı ölçmek için faydalı bir environment variable
. Tek tek bütün git işlemlerinin ne kadar sürdüğünü logluyor.
git
HTTP üzerinden yaptığı network operasyonları için curl
kütüphanesini kullanır. GIT_CURL_VERBOSE
ile çalıştırdığımız git komutları da aynı curl -v
çıktısını gösterir
$ GIT_CURL_VERBOSE=1 git pull
* Couldn't find host github.com in the .netrc file; using defaults
* Adding handle: conn: 0x7f9b79003000
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7f9b79003000) send_pipe: 1, recv_pipe: 0
* About to connect() to github.com port 443 (#0)
* Trying 192.30.252.128...
* Connected to github.com (192.30.252.128) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
* Server certificate: github.com
* Server certificate: DigiCert SHA2 Extended Validation Server CA
* Server certificate: DigiCert High Assurance EV Root CA
> GET /TryGhost/Ghost.git/info/refs?service=git-upload-pack HTTP/1.1
User-Agent: git/1.8.3.4 (Apple Git-47)
Host: github.com
Accept: */*
Accept-Encoding: gzip
Pragma: no-cache
< HTTP/1.1 200 OK
* Server GitHub Babel 2.0 is not blacklisted
< Server: GitHub Babel 2.0
< Content-Type: application/x-git-upload-pack-advertisement
< Transfer-Encoding: chunked
< Expires: Fri, 01 Jan 1980 00:00:00 GMT
< Pragma: no-cache
< Cache-Control: no-cache, max-age=0, must-revalidate
< Vary: Accept-Encoding
<
* Connection #0 to host github.com left intact
Already up-to-date.
Environment variables
git kullananların kesin olarak gözatması gereken bir referans bilgiler içeriyor. Daha bir çok kullanılacak değer mevcut. İşinize yarayacak bir tane mutlaka vardır.
Alternatif
*nix
kullanıcıları için alternatif olarak tam aynı şey olmasa da aşağıdaki yöntem de kullanılabilir.
~/.ssh/config
dosyasına asağıdakini yazarsanız en azından ssh
seviyesinden log alabilirsiniz.
Host <git-server-hostname>
LogLevel (QUIET|FATAL|ERROR|INFO|VERBOSE|DEBUG|DEBUG1|DEBUG2|DEBUG3)
Seçtiğiniz LogLevel
seviyesine göre output almanız mümkün.