Git / git-shell ile ilgili problemlerde nasıl hata ayıklayabilirim?


158

Git / git-shell ile ilgili bazı hata ayıklama bilgilerine nasıl sahip olabilirim?

user1Bir depoyu sorunsuz klonlarken, user2yalnızca boş olanı klonlayabilen bir sorunum vardı . Ayarlamıştım GIT_TRACE=1ama yararlı hiçbir şey söylenmedi.

Nihayet uzun bir deneme yanılma sonrasında bir dosya üzerindeki izin sorunu olduğu ortaya çıktı. Uygun bir hata mesajı bu sorunu kısa devre yapabilir.


Not: Ek olarak GIT_CURL_VERBOSE, Git 2.9.x / 2.10 ile sahip olacaksınız GIT_TRACE_CURL. Bkz aşağıda Cevabımı .
VonC

Ve (Q2 2019, üç yıl sonra GIT_TRACE_CURL), artık var trace2. Örnek: git config --global trace2.normalTarget ~/log.normal. Aşağıdaki (yeni) cevabıma bakın .
VonC

Yanıtlar:


221

Daha ayrıntılı çıktı için aşağıdakileri kullanın:

GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master


56
Çekirdeğin ötesinde birkaç GIT_TRACE seçeneği vardır. İşte aşırı ayrıntılı seçenek: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
Bu değişkenler nasıl ve nerede ayarlanır?
Hunsu

1
Bu hangi platformlarda çalışıyor? Kesinlikle Windows değil.
cowlinator

8
Windows'ta bu değişkenleri birer birer (satır başına bir) şu şekilde ayarlayabilirsiniz:set GIT_CURL_VERBOSE=1 set GIT_TRACE=1 git pull origin master
cowlinator

1
Ve powershell'de bunları şu şekilde ayarlayabilirsiniz:$Env:GIT_CURL_VERBOSE=1
Jon

91

Hata ayıklama

Git, git problemlerinizin hatalarını ayıklamak için kullanabileceğiniz, gömülü oldukça eksiksiz bir iz kümesine sahiptir.

Bunları açmak için aşağıdaki değişkenleri tanımlayabilirsiniz:

  • GIT_TRACE genel izler için
  • GIT_TRACE_PACK_ACCESS paket dosyası erişiminin izlenmesi için,
  • GIT_TRACE_PACKET ağ işlemleri için paket düzeyinde izleme için,
  • GIT_TRACE_PERFORMANCE performans verilerini kaydetmek için,
  • GIT_TRACE_SETUP etkileşime girdiği depoyu ve ortamı keşfetme hakkında bilgi için,
  • GIT_MERGE_VERBOSITY yinelemeli birleştirme stratejisinde hata ayıklamak için (değerler: 0-5),
  • GIT_CURL_VERBOSEtüm curl mesajlarını günlüğe kaydetmek için (eşdeğer curl -v),
  • GIT_TRACE_SHALLOW sığ depoların getirilmesi / klonlanmasında hata ayıklama için.

Olası değerler şunları içerebilir:

  • true, 1Ya 2stderr'e yazmak için,
  • /çıkışı belirtilen dosyaya izlemek için ile başlayan mutlak bir yol .

Daha fazla ayrıntı için bkz .: Git Internals - Ortam Değişkenleri


SSH

SSH sorunları için aşağıdaki komutları deneyin:

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

veya sshkimlik bilgilerinizi doğrulamak için kullanın , örn.

ssh -vvvT git@github.com

veya HTTPS bağlantı noktası üzerinden:

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

Not: -vAyrıntı düzeyini azaltmak için sayısını azaltın .


Örnekler

$ 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
Değiştirilmesi echo 'ssh -vvv $*' > ssh && chmod +x sshiçin echo 'ssh -vvv "$@"' > ssh && chmod +x ssh, tek bir parametre içinde bir boşluk kenarı durumunda daha güvenli olmalıdır.
Alexander Bird

47

bunu dene:

GIT_TRACE=1 git pull origin master

41

SSH'nin üzerinde ise, aşağıdakileri kullanabilirsiniz:

Sırasıyla hata ayıklama düzeyi 2 ve 3 için -vv veya -vvv türünde daha yüksek bir hata ayıklama düzeyi için:

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

Bu, esas olarak sunucuyla ilgili genel ve özel anahtar sorunlarını çözmek için kullanışlıdır. Bu komutu sadece 'git clone' değil, herhangi bir git komutu için kullanabilirsiniz.


Evet, bu harika çalışıyor. Diğerlerinden daha iyi. Evet, bu harika çalışıyor. Diğerlerinden daha iyi.
BMW

Şu anda önemli bir sorunu çözmem gerektiği için bu en faydalı olacaktır, ancak CentOS Linux sürüm 7.2.1511 üzerinde git 1.8.3.1 ve OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Şubat 2013 ile benim için çalışmıyor (Çekirdek). :(
Greg Dubicki

@GregDubicki Garip. Cevabı güncelleyebilmem için neyin işe yaradığını bana bildirin.
Basil Musa

1
Windows kullanımında set GIT_SSH_COMMAND=ssh -v(tırnak işareti yok).
jansohn

18

Git 2.9.x / 2.10 (Q3 2016) Başka bir hata ayıklama seçeneği ekler: GIT_TRACE_CURL.

Bkz 73e57aa işlemek , 74c682d taahhüt tarafından (2016 23 Mayıs) Elia Pinto ( devzero2000) . Yardımcı
: Torsten Bögershausen ( tboegi) , Ramsay Jones, Junio ​​C Hamano ( gitster) , Eric Sunshine ( sunshineco) ve Jeff King ( peff) .
( Junio ​​C Hamano ile birleştirildi - gitster- in commit 2f84df2 , 06 Tem 2016)

http.c: GIT_TRACE_CURLortam değişkenini uygulayın

Uygulama GIT_TRACE_CURLdetayın daha büyük bir ölçüde sağlamak için ortam değişkeni GIT_CURL_VERBOSEtam taşıma başlık ve veri yükü, değiş tokuş, özellikle.
Belirli bir durum daha kapsamlı bir hata ayıklama analizi gerektiriyorsa faydalı olabilir.

Belgelerde şunlar belirtilecektir:

GIT_TRACE_CURL

Git taşıma protokolünün açıklayıcı bilgiler dahil olmak üzere tüm gelen ve giden verilerin curl tam izleme dökümünü etkinleştirir.
Bu, curl --trace-asciikomut satırında yapmaya benzer .

Bu seçenek, GIT_CURL_VERBOSEortam değişkenini ayarlamayı geçersiz kılar .


Bu yanıtta kullanılan yeni seçeneğin yanı sıra Git 2.11 (Q4 2016) testlerinde de görebilirsiniz:

Bkz 14e2411 işlemek , 81590bf işlemek , 4527aa1 taahhüt , 4eee6c6 taahhüt tarafından (07 Eyl 2016) (Elia Pinto devzero2000) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 930b67e tamamlama 2016, 12 Eyl)

Kullanımdan kaldırılanGIT_TRACE_CURL yerine yeni ortam değişkenini kullanın . GIT_CURL_VERBOSE

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

Bu özellik harika! Tek nokta ASCII çıktısıdır ( (ch >= 0x20) && (ch < 0x80)nokta olmayan her şeyi yazdırdıkları yer .) ve http verileri için onaltılık çıktı yolu yoktur.
kinORnirvana

9

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, trace2yapı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_PERFya 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_TR2GIT_TRACEkomut özet verilerinin yerine geçmesi ve bunları günlüğe kaydetmesi amaçlanmıştır .
  • GIT_TR2_PERFyerine 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_EVENTyeni 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 trace2envvar'ı 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 -csaygı 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 DIRve 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_TRACEdeğ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

trace2Sistemi 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_repositoryasla NULL olmayan normal değişmez tutmaz.

Diyelim itmek trace2biz yürütmek hemen önce için, ortak-ana başlatma ileri aşağı cmd_main().


Git 2.24 (Q4 2019), trace2alt 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

trace2dosyaları 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.maxFilesmaksimum dosya sayısını ayarlamak için bir yapılandırma seçeneği ( ) ekler trace2.

maxFilesPozitif bir tam sayıya ayarlandığında aşağıdaki davranış etkinleştirilir :

  • Bir trace2hedef 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-discardgelecekteki 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.maxFilessı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 pushaş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.cve builtin/push.ciçine trace2 bölgeleri ekleyin :

  • Listeleme referansları
  • Alt modülleri kontrol etme
  • Alt modülleri itme
  • Referansları itme

Git 2.25 (Q1 2020) ile bunların bir Documentation/technicalkısmı başlık *.hdosyaları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.txtiçin trace2.hgeliş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.txtDosya, 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ı regionizlenecek 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 fetchaktarı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_progressreferansı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ı NULLgayet iyi idare eder , ancak bu *p_progress, örneğin ile çalışırken, NULL-lüksüdür --no-progress.
Eğer p_progressolduğ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_REFShata ayıklama mekanizması ekle

İmza: Han-Wen Nienhuys

Ortama ayarlandığında GIT_TRACE_REFS, gitbaskı 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)

gitartık man sayfasında şunları içeriyor :

GIT_TRACE_REFS

Ref veritabanındaki işlemler için izleme mesajlarını etkinleştirir. GIT_TRACEKullanılabilir izleme çıktı seçenekleri için bakın .


4

Klonlarken verbose ( -v) operatörünü eklemeyi denediniz mi?

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


2

Daha eski git sürümleri için (1.8 ve öncesi)

Daha eski bir git ve ssh sürümlerinde SSH hata ayıklamasını etkinleştirmenin uygun bir yolunu bulamadım . Kullanarak ortam değişkenlerini aradım ltrace -e getenv ...ve işe yarayacak herhangi bir GIT_TRACE veya SSH_DEBUG değişken kombinasyonu bulamadım.

Bunun yerine, git-> ssh dizisine geçici olarak 'ssh -v'yi enjekte etmek için bir tarif:

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

Dan Burada çıkış git sürümü 1.8.3 ssh sürümü ile OpenSSH_5.3p1, OpenSSL 11 Şubat 2013 1.0.1e-FIPS bir github repo klonlama:

$ (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'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.