Git 2.22 (Q2 2019) , Jeff Hostetler tarafından commit ee4512etrace2
ile tanıtıldı :
trace2
: yeni birleşik izleme tesisi oluşturun
Git için yeni bir birleşik izleme tesisi oluşturun.
Nihai amaç, mevcut trace_printf*
ve trace_performance*
rutinleri birleşik bir dizi rutin ile değiştirmektir git_trace2*
.
Alışılmış printf tarzı API'ye ek olarak, trace2
yapılandırılmış verilerin yazılmasına izin veren sabit alanlara sahip yüksek düzeyde olay fiilleri sağlar.
Bu, harici araçlar için işlem sonrası ve analizi kolaylaştırır.
Trace2, 3 çıktı hedefi tanımlar.
Bunlar " GIT_TR2
", " GIT_TR2_PERF
" ve " GIT_TR2_EVENT
" ortam değişkenleri kullanılarak ayarlanır .
Bunlar "1" olarak veya mutlak bir yol adına (tıpkı şu anki gibi GIT_TRACE
) ayarlanabilir .
Not: ortam değişkeni adı ile ilgili olarak, her zaman kullanın GIT_TRACExxx
, değil GIT_TRxxx
.
Yani aslında GIT_TRACE2
, GIT_TRACE2_PERF
ya da GIT_TRACE2_EVENT
.
Aşağıda daha sonra bahsedilen Git 2.22 yeniden adlandırmasına bakın.
Aşağıda, eski ortam değişkeni adlarıyla bu yeni izleme özelliği üzerinde yapılan ilk çalışma yer almaktadır :
GIT_TR2
GIT_TRACE
komut özet verilerinin yerine geçmesi ve bunları günlüğe kaydetmesi amaçlanmıştır .
GIT_TR2_PERF
yerine geçmesi amaçlanmıştır GIT_TRACE_PERFORMANCE
.
Çıktıyı komut süreci, iş parçacığı, repo, mutlak ve göreceli geçen süreler için sütunlarla genişletir. Alt süreç başlatma / durdurma, iş parçacığı başlatma / durdurma ve iş parçacığı başına işlev yuvalama için olayları raporlar.
GIT_TR2_EVENT
yeni yapılandırılmış bir biçimdir. Olay verilerini bir dizi JSON kaydı olarak yazar.
Trace2 işlevlerine yapılan çağrılar, farklı trace_printf*
veya trace_performance*
rutinleri çağırmaya gerek kalmadan etkinleştirilen 3 çıktı hedefinden herhangi birine günlüğe kaydedilir .
Josh Steadmon ( ) tarafından yapılan commit a4d3a28 (21 Mart 2019) bölümüne bakın . (Göre Birleştirilmiş - Junio Cı Hamano - içinde 1b40314 tamamlama 2019 08 Mayıs)steadmon
gitster
trace2
: dizin hedeflerine yaz
Bir trace2 ortam değişkeninin değeri, var olan bir dizine atıfta bulunan mutlak bir yol olduğunda, çıktıyı verilen dizinin altındaki dosyalara (işlem başına bir tane) yazın.
Dosyalar, trace2 SID'nin son bileşenine göre adlandırılacak ve ardından olası çarpışmaları önlemek için bir sayaç verilecektir.
Bu, ilgili trace2
envvar'ı koşulsuz olarak sabit bir dizin adına ayarlayarak her git çağrısı için izleme toplamayı daha kolay hale getirir .
Ayrıca bkz. F672dee (29 Nisan 2019) ve 81567ca commit , commit 08881b9 , commit bad229a , commit 26c6f25 , commit bce9db6 , commit 800a7f9 , commit a7bc01e , commit 39f4317 , commit a089724 , commit 1703751 (15 Nis 2019) by Jeff Hostetler ( jeffhostetler
) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster
- içinde 5b2d1c0 tamamlama 2019 13 Mayıs)
Yeni belgeler şimdi içerir sadece sisteme ve küresel yapılandırma dosyalarından okunur yapılandırma ayarlarını (depo yerel ve worktree yapılandırma dosyaları ve anlam -c
saygı gösterilmediği komut satırı argümanları.)
Örnek :
$ git config --global trace2.normalTarget ~/log.normal
$ git version
git version 2.20.1.155.g426c96fcdb
verim
$ 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
Ve performans ölçüsü için :
$ git config --global trace2.perfTarget ~/log.perf
$ git version
git version 2.20.1.155.g426c96fcdb
verim
$ 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'te (Q3 2019) belgelendiği gibi, kullanılacak ortam değişkeni GIT_TRACE2
.
Carlo Marcelo Arenas Belón ( ) tarafından yapılan 6114a40 (26 Haz 2019) taahhüdüne bakın .
Bkz. Commit 3efa1c6 (12 Haz 2019), Ævar Arnfjörð Bjarmason ( ) . ( Junio C Hamano ile birleştirildi - - in commit e9eaaa4 , 09 Tem 2019)carenas
avar
gitster
Yani Git 2,22 çalışması yapılabileceğini şöyle: 4e0d3aa işlemek , e4b75d6 taahhüt tarafından (2019 19 Mayıs) SZEDER Gábor ( szeder
) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster
- içinde 463dca6 tamamlama 2019 30 Mayıs)
trace2
: ortam değişkenlerini GIT_TRACE2 olarak yeniden adlandırın *
Kullanıcılar tarafından ayarlanması gereken bir ortam değişkeni için, ortam değişkenleri GIT_TR2*
çok belirsiz, tutarsız ve çirkin.
Kurulan çoğu GIT_*
ortam değişkenleri kısaltmalar kullanın ve bunu (yani birkaç durumunda yok GIT_DIR
, GIT_COMMON_DIR
, GIT_DIFF_OPTS
) o kısaltmaları (Ne Oldukça açık DIR
ve OPTS
) simgeliyor.
Ama ne anlama geliyor TR
? Parça, geleneksel, treyler, işlem, aktarım, dönüştürme, geçiş, çeviri, nakil, nakil, geçiş, ağaç, tetik, kes, güven veya ...?!
Trace2 tesisinin, adındaki '2' sonekinden de anlaşılacağı gibi, sonunda Git'in orijinal izleme tesisinin yerini alması bekleniyor.
Karşılık gelen ortam değişkenlerinin uygun olmasını beklemek mantıklıdır ve orijinal GIT_TRACE
değişkenlerden sonra çağrılırlar GIT_TRACE2
; böyle bir şey yok ' GIT_TR
'.
Tüm trace2'ye özgü yapılandırma değişkenleri çok mantıklı bir şekilde ' trace2
' bölümünde, içinde değil ' ' içindedir tr2
.
OTOH, bu ortam değişkenlerinin adlarından "trace" in son üç karakterini çıkararak hiçbir şey kazanmayız .
Öyleyse , kararlı bir sürüme geçmeden önce tüm GIT_TR2*
ortam değişkenlerini olarak yeniden adlandıralım GIT_TRACE2*
.
Git 2.24 (2019'un 3. Çeyreği), Git kod deposunun başlatılmasını iyileştirir.
Bkz. Commit 22932d9 , commit 5732f2b , commit 58ebccb (06 Ağu 2019) by Jeff King ( peff
) .
( Junio C Hamano ile birleştirildi - gitster
- in commit b4a1eec , 09 Eyl 2019)
common-main: trace2 başlatma gecikmesi
trace2
Sistemi ortak main () işlevinde başlatırız, böylece tüm programlar (yerleşik olmayanlar bile) izlemeyi etkinleştirir.
Ancak trace2
, izlemeye karar vermek için disk üzerindeki yapılandırmayı gerçekten okumamız gerektiğinden, başlangıç nispeten ağırdır.
Bu, diğer ortak ana başlatmalarla beklenmedik etkileşimlere neden olabilir. Örneğin, aramadan önce yapılandırma kodunda son buluruz initialize_the_repository()
ve the_repository
asla NULL olmayan normal değişmez tutmaz.
Diyelim itmek trace2
biz yürütmek hemen önce için, ortak-ana başlatma ileri aşağı cmd_main()
.
Git 2.24 (Q4 2019), trace2
alt sistemdeki çıktının artık daha güzel biçimlendirilmesini de sağlıyor.
Bkz 742ed63 işlemek , e344305 taahhüt , c2b890a taahhüt (9 Ağustos 2019), ad43e37 işlemek , 04f10d3 taahhüt , da4589c taahhüt (8 Ağustos 2019) ve 371df1b taahhüt tarafından (2019 31 Tem) Jeff Hostetler ( jeffhostetler
) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster
- içinde 93fc876 tamamlama 2019 30 Eki)
Ve yine de Git 2.24
Bkz 87db61a işlemek , 83e57b0 taahhüt (2019 04 Eki) ve 2254101 taahhüt , 3d4548e taahhüt tarafından (3 Ekim 2019) Josh Steadmon ( steadmon
) .
( Junio C Hamano ile birleştirildi - gitster
- in commit d0ce4d9 , 15 Ekim 2019)
trace2
: hedef dizinde çok fazla dosya varsa yeni izleri atın
İmza: Josh Steadmon
trace2
dosyaları bir hedef dizine yazabilir.
Yoğun kullanımda, bu dizin dosyalarla dolabilir ve izleme işleme sistemleri için zorluklara neden olabilir.
Bu yama , bir hedef dizine yazacak trace2.maxFiles
maksimum dosya sayısını ayarlamak için bir yapılandırma seçeneği ( ) ekler trace2
.
maxFiles
Pozitif bir tam sayıya ayarlandığında aşağıdaki davranış etkinleştirilir :
- Bir
trace2
hedef dizine dosya ne zaman yazılırsa, önce izlerin atılıp atılmayacağını kontrol edin. Aşağıdaki durumlarda izler atılmalıdır:
- çok fazla dosya olduğunu bildiren bir nöbetçi dosya var
- VEYA, dosya sayısı aşıyor
trace2.maxFiles
.
İkinci durumda, git-trace2-discard
gelecekteki kontrolleri hızlandırmak için adlı bir nöbetçi dosyası oluştururuz .
Varsayım, ayrı bir izleme işleme sisteminin üretilen izlerle ilgilenmesidir; Sentinel dosyasını işleyip kaldırdığında, yeni izleme dosyalarının yeniden oluşturulması güvenli olmalıdır.
Varsayılan değer trace2.maxFiles
sıfırdır ve dosya sayısı kontrolünü devre dışı bırakır.
Yapılandırma ayrıca yeni bir ortam değişkeni ile geçersiz kılınan olabilir: GIT_TRACE2_MAX_FILES
.
Ve Git 2.24 (Q4 2019), git push
aşamalar hakkında trace2'yi öğretir .
Bkz. Commit 25e4b80 , commit 5fc3118 (02 Ekim 2019), Josh Steadmon ( steadmon
) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster
- içinde 3b9ec27 tamamlama 2019 15 Eki)
push
: trace2 enstrümantasyonu ekle
İmza: Josh Steadmon
İtme işleminin çeşitli aşamalarında harcanan zamanı daha iyi izlemek için transport.c
ve builtin/push.c
içine trace2 bölgeleri ekleyin :
- Alt modülleri kontrol etme
- Alt modülleri itme
- Referansları itme
Git 2.25 (Q1 2020) ile bunların bir Documentation/technical
kısmı başlık *.h
dosyalarına taşınır .
Bkz 6c51cb5 işlemek , d95a77d işlemek , bbcfa30 taahhüt , f1ecbe0 işlemek , 4c4066d işlemek , 7db0305 taahhüt , f3b9055 taahhüt , 971b1f2 taahhüt , 13aa9c8 taahhüt , c0be43f işlemek , 19ef3dd işlemek , 301d595 taahhüt , 3a1b341 taahhüt , 126c1cc işlemek , d27eb35 işlemek , 405c6b1 işlemek , işlemek d3d7172 , 3f1480b işlemek , 266f03e işlemek , 13c4d7e taahhüt(17 Kasım 2019), Heba Waly ( HebaWaly
) tarafından .
(Göre Birleştirilmiş Junio Cı Hamano - gitster
- içinde 26c816a tamamlama 2019 16 Ara)
trace2
: dokümanı şuraya taşı trace2.h
İmza: Heba Waly
Dan fonksiyonları belgeleri taşı Documentation/technical/api-trace2.txt
için trace2.h
geliştiriciler yerine başka bir doc dosyasında onunla aramak kodun yanında kullanım bilgilerini bulmak daha kolay olacağı şekilde.
Documentation/technical/api-trace2.txt
Dosya, trace2.h'ye eklenen doc dosyasına bir bağlantıyla olduğu gibi ayrı bir doc dosyasında olması daha uygun görünen ayrıntılarla dolu olduğu için , yalnızca işlevler belgeleri bölümünden kaldırılır . Ayrıca, başlık dosyasındaki dokümantasyon ile senkronize tutulması zor olacak fazlalık bilgisine sahip olmaktan kaçınmak için fonksiyon dokümanı kaldırılır.
Bu yeniden yapılanma başka komuta bir yan etkisi vardı rağmen (, açıkladı ve içinde Git 2.25.2 (2020 Mart) ile sabit cc4f2eb taahhüt (tarafından 14 Şubat 2020) Jeff King ( peff
) .
(tarafından Birleştirilmiş Junio C Hamano - gitster
- içinde taahhüt 1235384 , 17 Şub 2020) )
Git 2.27 ile (Q2 2020): Ortam değişkenlerinin günlüğe kaydedilmesine izin veren Trace2 geliştirmesi .
Josh Steadmon ( ) tarafından yapılan commit 3d3adaa'ya (20 Mart 2020) bakın . (Göre Birleştirilmiş - Junio Cı Hamano - içinde 810dc64 tamamlama 2020 22 Apr)steadmon
gitster
trace2
: Git'e ortam değişkenlerini günlüğe kaydetmeyi öğret
İmza: Josh Steadmon
Onaylayan: Jeff Hostetler
Trace2 aracılığıyla Git, ilginç yapılandırma parametrelerini zaten günlüğe kaydedebilir ( trace2_cmd_list_config()
işleve bakın ). Ancak, birçok yapılandırma parametresi ortam değişkenleri aracılığıyla geçersiz kılmalara izin verdiğinden, bu eksik bir resim verebilir.
Daha eksiksiz günlüklere izin vermek için trace2_cmd_list_env_vars()
, önceden var olan yapılandırma parametresi günlüğü uygulamasından sonra modellenen yeni bir işlev ve destekleyici uygulama ekliyoruz .
Git 2.27 (Q2 2020) ile ilerleme ölçeri gösteren kod yollarına start_progress()
ve stop_progress()
çağrılarını region
izlenecek bir " " olarak kullanmayı öğretin .
Emily Shaffer'ın ( ) yazdığı 98a1364 (12 Mayıs 2020) taahhüdüne bakın . ( Junio C Hamano ile birleştirildi - - in commit d98abce , 14 Mayıs 2020)nasamuffin
gitster
trace2
: günlük ilerleme süresi ve işlem hacmi
İmza: Emily Shaffer
İzlere git fetch
aktarım hızının nasıl yazılacağı gibi tek bir işlemi öğretmek yerine , ilerleme kitaplığının kendisine takımlar ekleyerek yavaş görünebilecek çok çeşitli kullanıcı işlemleri hakkında bilgi edinebiliriz .
İlerlemeyi gösteren operasyonlar muhtemelen yavaş ilerliyor ve performans için zaten izlemek istediğimiz türden şeyler.
Nesne sayılarını ve veri aktarım boyutunu göstererek, işlemlerin beklediğimiz şekilde ölçeklenmesini sağlamak için bazı türetilmiş ölçümler yapabilmeliyiz.
Ve:
Git 2.27 (Q2 2020) ile, ilerleme API'sinin izlenebilir bir bölge olarak kullanılmasına izin veren son değişikliğimiz için son dakika düzeltmesi.
Derrick Stolee ( ) tarafından 3af029c (15 Mayıs 2020) taahhüdüne bakın . (Göre Birleştirilmiş - Junio Cı Hamano - içinde 85d6e28 tamamlama 2020 20 Mayıs)derrickstolee
gitster
progress
: trace2_region_leave()
sadece aradıktan sonra ara_enter()
İmza: Derrick Stolee
İlerleme API Bir kullanıcı çağırır start_progress()
şartlı ve bağlı display_progress()
ve stop_progress()
zaman fonksiyonları no-op olmaya start_progress()
çağırdı edilmemiştir.
Biz bir çağrı ilave olarak trace2_region_enter()
için start_progress()
, ilerleme API fonksiyonları diğer trace2 API çağrıları yapılan çağrılar emin olduğunda bu trace2 çağrıları Atlanan olduğunu yapmalıdır start_progress()
ilerleme yapı çağrıda edilmemiştir.
Özellikle, demiyorlar trace2_region_leave()
dan stop_progress()
biz denilen etmediğim halde start_progress()
eşleme denir olurdu ki, trace2_region_enter()
.
Bu son bölüm Git 2.29 (Q4 2020) ile daha sağlam:
Bakın commit ac900fd (10 Ağu 2020), Martin Ågren ( none
) .
( Junio C Hamanogitster
tarafından birleştirildi - - in commit e6ec620 , 17 Ağu 2020)
progress
: kontrol etmeden önce başvurmayın NULL
İmza: Martin Ågren
İçinde stop_progress()
, p_progress
referansını kaldırmadan önce bunun NULL olmadığını kontrol etmeye özen gösteriyoruz , ancak o zamana kadar arama sırasında zaten referansını kaldırmış olduk finish_if_sparse(*p_progress)
.
Ve değeri ne olursa olsun, içeride tekrar körü körüne başvurmaya devam edeceğiz stop_progress_msg()
.
Bir NULL işaretçisi alırsak erken dönebiliriz, ancak bir adım daha ileri gidelim ve yerine HATA yapalım.
İlerleme API'sı NULL
gayet iyi idare eder , ancak bu *p_progress
, örneğin ile çalışırken, NULL-lüksüdür --no-progress
.
Eğer p_progress
olduğunu NULL
, büyük ihtimalle bu bir hata vardır.
Simetri için de aynı kontrolü yapalım stop_progress_msg()
.
Git 2.29 (Q4 2020) ile, bu sefer Git geliştirme ortamında daha da fazla izleme var.
Han-Wen Nienhuys ( ) tarafından yapılan commit 4441f42'ye (09 Eyl 2020) bakın . ( Junio C Hamano ile birleştirildi - - in commit c9a04f0 , 22 Eyl 2020)hanwen
gitster
refs
: GIT_TRACE_REFS
hata ayıklama mekanizması ekle
İmza: Han-Wen Nienhuys
Ortama ayarlandığında GIT_TRACE_REFS
, git
baskı işlemlerini ve sonuçlarını, ref depolama arka ucundan akarken yapar. Bu, farklı ref arka uçları arasındaki tutarsızlıklarda hata ayıklamaya yardımcı olur.
Misal:
$ GIT_TRACE_REFS="1" ./git branch
15:42:09.769631 refs/debug.c:26 ref_store for .git
15:42:09.769681 refs/debug.c:249 read_raw_ref: HEAD: 0000000000000000000000000000000000000000 (=> refs/heads/ref-debug) type 1: 0
15:42:09.769695 refs/debug.c:249 read_raw_ref: refs/heads/ref-debug: 3a238e539bcdfe3f9eb5010fd218640c1b499f7a (=> refs/heads/ref-debug) type 0: 0
15:42:09.770282 refs/debug.c:233 ref_iterator_begin: refs/heads/ (0x1)
15:42:09.770290 refs/debug.c:189 iterator_advance: refs/heads/b4 (0)
15:42:09.770295 refs/debug.c:189 iterator_advance: refs/heads/branch3 (0)
git
artık man sayfasında şunları içeriyor :
GIT_TRACE_REFS
Ref veritabanındaki işlemler için izleme mesajlarını etkinleştirir. GIT_TRACE
Kullanılabilir izleme çıktı seçenekleri için bakın .
GIT_CURL_VERBOSE
, Git 2.9.x / 2.10 ile sahip olacaksınızGIT_TRACE_CURL
. Bkz aşağıda Cevabımı .