मैं git / git-shell संबंधित समस्याओं को कैसे डिबग कर सकता हूं?


148

मुझे git / git-shell के बारे में कुछ डीबग जानकारी कैसे हो सकती है?

मेरे पास एक समस्या थी, जो user1समस्या के बिना एक रिपॉजिटरी को user2क्लोन कर सकती थी , जबकि केवल एक खाली को क्लोन कर सकती थी। मैंने सेट किया था GIT_TRACE=1, लेकिन कुछ भी उपयोगी नहीं बताया गया था।

अंत में, लंबे परीक्षण और त्रुटि के बाद, यह पता चला कि यह एक फ़ाइल पर एक अनुमति समस्या थी। एक उपयुक्त त्रुटि संदेश इस समस्या को शॉर्ट-सर्किट कर सकता है।


नोट: इसके अलावा GIT_CURL_VERBOSE, आपके पास Git 2.9.x / 2.10 होगा GIT_TRACE_CURL। देखें नीचे मेरा उत्तर
वॉनसी

और (Q2 2019, तीन साल बाद GIT_TRACE_CURL), अब आपके पास है trace2। उदाहरण: git config --global trace2.normalTarget ~/log.normal। नीचे मेरा (नया) उत्तर देखें
वॉनसी

जवाबों:


212

निम्नलिखित के लिए और भी अधिक वर्बोज़ आउटपुट का उपयोग करें:

GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master


53
कोर एक से परे कुछ GIT_TRACE विकल्प हैं। यहाँ über-verbose का विकल्प दिया गया है: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
पॉल आयरिश

2
इस चर को कैसे और कहां सेट करें?
हांसु

यह सिर्फ एक पूरी लाइन है जिसे आप अपने टर्मिनल में पेस्ट कर सकते हैं। आपको उस git pull origin masterभाग को प्रतिस्थापित करना चाहिए जिसे आप निष्पादित करना चाहते हैं।
ऐयोलुन

1
यह किस प्लेटफार्म पर काम करता है? निश्चित रूप से विंडोज नहीं।
सहकर्मी

8
विंडोज पर आप इन चरों को सेट कर सकते हैं, एक बार (एक प्रति पंक्ति), इस तरह:set GIT_CURL_VERBOSE=1 set GIT_TRACE=1 git pull origin master
काउलवेटर

85

डिबगिंग

Git में अंतर्निहित निशान का काफी पूरा सेट होता है जिसका उपयोग आप अपनी git समस्याओं को डीबग करने के लिए कर सकते हैं।

उन्हें चालू करने के लिए, आप निम्नलिखित चर को परिभाषित कर सकते हैं:

  • GIT_TRACE सामान्य निशान के लिए,
  • GIT_TRACE_PACK_ACCESS पैकटाइल पहुंच के अनुरेखण के लिए,
  • GIT_TRACE_PACKET नेटवर्क संचालन के लिए पैकेट-स्तरीय अनुरेखण के लिए,
  • GIT_TRACE_PERFORMANCE प्रदर्शन डेटा लॉग करने के लिए,
  • GIT_TRACE_SETUP इसके साथ बातचीत कर रहे भंडार और पर्यावरण की खोज के बारे में जानकारी के लिए,
  • GIT_MERGE_VERBOSITY पुनरावर्ती विलय की रणनीति डिबगिंग के लिए (मान: 0-5),
  • GIT_CURL_VERBOSEसभी कर्ल संदेशों को लॉग करने के लिए (समतुल्य curl -v),
  • GIT_TRACE_SHALLOW डिबोइंग भ्रूण / उथले रिपॉजिटरी के क्लोनिंग के लिए।

संभावित मूल्यों में शामिल हो सकते हैं:

  • true, 1या 2stderr को लिखने के लिए,
  • एक निरपेक्ष पथ /निर्दिष्ट फ़ाइल के लिए आउटपुट का पता लगाने के साथ शुरू होता है।

अधिक जानकारी के लिए, देखें: गिट इंटर्नल्स - पर्यावरण चर


SSH

SSH समस्याओं के लिए, निम्न आदेशों को आज़माएँ:

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

या sshअपने क्रेडेंशियल्स को मान्य करने के लिए उपयोग करें, जैसे

ssh -vvvT git@github.com

या HTTPS पोर्ट पर:

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

नोट: -vक्रिया के स्तर को कम करने के लिए संख्या को कम करें।


उदाहरण

$ 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
परिवर्तन echo 'ssh -vvv $*' > ssh && chmod +x sshको echo 'ssh -vvv "$@"' > ssh && chmod +x sshकिनारे के मामले में सुरक्षित होना चाहिए जहां एक एकल पैरामीटर में एक जगह है।
अलेक्जेंडर बर्ड


40

यदि इसकी SSH से अधिक है, तो आप निम्नलिखित का उपयोग कर सकते हैं:

डीबग स्तर 2 और 3 के लिए क्रमशः -vv या -vv के लिए एक उच्च डिबग स्तर के लिए:

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

यह सर्वर के साथ सार्वजनिक और निजी प्रमुख समस्याओं को संभालने के लिए मुख्य रूप से उपयोगी है। आप इस कमांड का उपयोग किसी भी git कमांड के लिए कर सकते हैं, केवल 'git क्लोन' ही नहीं।


हां, यह सही काम करता है। दूसरों से बेहतर। हां, यह सही काम करता है। दूसरों से बेहतर।
बीएमडब्ल्यू

यह सबसे उपयोगी होगा क्योंकि मुझे अब एक प्रमुख समस्या का समाधान करना है, लेकिन यह मेरे लिए git 1.8.3.1 और OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 फरवरी 2013 को CentOS Linux रिलीज़ 7.2.1511 पर काम नहीं करता है (कोर)। :(
ग्रेग डबकी

@GregDubicki अजीब। मुझे पता है कि आपके लिए क्या काम करता है ताकि मैं जवाब को अपडेट कर सकूं।
तुलसी मूसा

1
विंडोज के उपयोग पर set GIT_SSH_COMMAND=ssh -v(कोई उद्धरण नहीं)।
जनाशो

18

Git 2.9.x / 2.10 (Q3 2016) एक और डिबग विकल्प जोड़ता है GIT_TRACE_CURL:।

एलिया पिंटो ( ) द्वारा 73e57aa , 74c682d (23 मई 2016) के लिए प्रतिबद्ध देखें । हेल्प -बाय: टॉरस्टेन बॉजर्सहॉसन ( ) , रामसे जोन्स, जूनियो सी हैमनो ( ) , एरिक सनशाइन ( ) , और जेफ किंग ( )( जूनियो सी हमानो द्वारा विलय - - 2f84df2 , 06 जुलाई 2016 को प्रतिबद्ध )devzero2000
tboegigitstersunshinecopeff
gitster

http.c: GIT_TRACE_CURLपर्यावरण चर लागू करें

विशेष रूप से पूर्ण परिवहन हेडर और एक्सचेंज किए गए सभी डेटा पेलोड GIT_TRACE_CURLके विवरण की अधिक से अधिक डिग्री की अनुमति देने के लिए पर्यावरण चर को लागू करें GIT_CURL_VERBOSE
यह उपयोगी हो सकता है यदि किसी विशेष स्थिति को अधिक गहन डीबगिंग विश्लेषण की आवश्यकता हो सकती है।

प्रलेखन राज्य होगा:

GIT_TRACE_CURL

गिट ट्रांसपोर्ट प्रोटोकॉल की वर्णनात्मक जानकारी सहित सभी इनकमिंग और आउटगोइंग डेटा के कर्ल फुल ट्रेस डंप को सक्षम करता है।
यह curl --trace-asciiकमांड लाइन पर करने के समान है ।

यह विकल्प GIT_CURL_VERBOSEपर्यावरण चर को सेट करता है।


आप इस उत्तर में प्रयुक्त नया विकल्प देख सकते हैं , लेकिन Git 2.11 (Q4 2016) परीक्षणों में भी:

देखें प्रतिबद्ध 14e2411 , 81590bf प्रतिबद्ध , 4527aa1 प्रतिबद्ध , प्रतिबद्ध 4eee6c6 (07 सितं, 2016) द्वारा एलिया पिंटो ( devzero2000)
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध 930b67e , 12 सितं, 2016)

पदावनत केGIT_TRACE_CURL बजाय नए पर्यावरण चर का उपयोग करें । GIT_CURL_VERBOSE

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

यह सुविधा अच्छी है! एकमात्र बिंदु ASCII आउटपुट है (जहां वे सभी प्रिंट करते हैं जो (ch >= 0x20) && (ch < 0x80)डॉट के रूप में नहीं है .) और http डेटा के लिए हेक्स आउटपुट का कोई तरीका नहीं है।
किन्नोरनिरवाना

8

Git 2.22 (Q2 2019) जेफ होस्टेटलर द्वारा प्रतिबद्ध ee4512e केtrace2 साथ पेश करता है :

trace2: नई संयुक्त ट्रेस सुविधा बनाएँ

गिट के लिए एक नई एकीकृत ट्रेसिंग सुविधा बनाएँ।
अंतिम इरादे वर्तमान trace_printf*और trace_performance*दिनचर्या को रूटीन के एकीकृत सेट के साथ बदलना है git_trace2*

सामान्य प्रिंटफ-स्टाइल एपीआई के अलावा, trace2फिक्स्ड-फ़ील्ड्स के साथ हाइगर-स्तरीय ईवेंट क्रिया प्रदान करता है , जो संरचित डेटा को लिखने की अनुमति देता है।
यह बाहरी उपकरणों के लिए पोस्ट-प्रोसेसिंग और विश्लेषण को आसान बनाता है।

ट्रेस 2 3 आउटपुट लक्ष्य को परिभाषित करता है।
ये पर्यावरण चर " GIT_TR2", " GIT_TR2_PERF", और " GIT_TR2_EVENT" का उपयोग करके सेट किए गए हैं ।
ये "1" या पूर्ण पथनाम (वर्तमान की तरह GIT_TRACE) पर सेट हो सकते हैं ।

नोट: पर्यावरण चर नाम के बारे में, हमेशा उपयोग करें GIT_TRACExxx, नहीं GIT_TRxxx
तो वास्तव में GIT_TRACE2, GIT_TRACE2_PERFया GIT_TRACE2_EVENT
नीचे दिए गए Git 2.22 का नाम बाद में देखें।

पुराने पर्यावरण चर नामों के साथ इस नई अनुरेखण सुविधा पर प्रारंभिक कार्य क्या है :

  • GIT_TR2के लिए एक प्रतिस्थापन होने का इरादा है GIT_TRACEऔर कमांड सारांश डेटा लॉग करता है।

  • GIT_TR2_PERFके लिए एक प्रतिस्थापन के रूप में इरादा है GIT_TRACE_PERFORMANCE
    यह कमांड प्रोसेस, थ्रेड, रेपो, निरपेक्ष और सापेक्ष समय के लिए कॉलम के साथ आउटपुट को बढ़ाता है। यह चाइल्ड प्रोसेस स्टार्ट / स्टॉप, थ्रेड स्टार्ट / स्टॉप और प्रति थ्रेड फंक्शन नेस्टिंग की घटनाओं की रिपोर्ट करता है।

  • GIT_TR2_EVENTएक नया संरचित प्रारूप है। यह JSON रिकॉर्ड्स की एक श्रृंखला के रूप में ईवेंट डेटा लिखता है।

ट्रेस 2 फ़ंक्शंस पर कॉल किसी भी 3 आउटपुट लक्ष्यों में से किसी एक को लॉग इन करने की आवश्यकता के बिना अलग trace_printf*या trace_performance*रूटीन को कॉल करने के लिए सक्षम है ।

जोश स्टेडमन ( ) द्वारा a4d3a28 (21 मार्च 2019) देखें । (द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 1b40314 , 08 मई 2019)steadmon
gitster

trace2: निर्देशिका के लक्ष्यों को लिखें

जब ट्रेस 2 पर्यावरण चर का मान किसी मौजूदा निर्देशिका का जिक्र करने वाला एक निरपेक्ष मार्ग होता है, तो दिए गए निर्देशिका के नीचे फाइलों (एक प्रति प्रक्रिया) के लिए आउटपुट लिखें।
ट्रेस 2 SID के अंतिम घटक के अनुसार फाइलों का नाम दिया जाएगा, इसके बाद संभावित टकरावों से बचने के लिए एक काउंटर बनाया जाएगा।

यह बिना trace2किसी निरंतर निर्देशिका नाम के संबंधित envvar को निर्धारित करके प्रत्येक गिट आह्वान के लिए निशान एकत्र करना अधिक सुविधाजनक बनाता है ।


यह भी देखें f672dee प्रतिबद्ध (29 अप्रैल 2019), और 81567ca प्रतिबद्ध , 08881b9 प्रतिबद्ध , bad229a प्रतिबद्ध , 26c6f25 प्रतिबद्ध , bce9db6 प्रतिबद्ध , 800a7f9 प्रतिबद्ध , a7bc01e प्रतिबद्ध , 39f4317 प्रतिबद्ध , a089724 प्रतिबद्ध , प्रतिबद्ध 1,703,751 (15 अप्रैल 2019) से जेफ़ होस्टेटलर ( jeffhostetler)
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध 5b2d1c0 , 13 मई 2019)

नई प्रलेखन अब भी शामिल है config सेटिंग्स जो केवल प्रणाली और वैश्विक config फ़ाइलों से पढ़ने कर रहे हैं (जिसका अर्थ भंडार स्थानीय और worktree config फाइल और -cआदेश पंक्ति तर्क का सम्मान नहीं कर रहे हैं।)

उदाहरण :

$ git config --global trace2.normalTarget ~/log.normal
$ git version
git version 2.20.1.155.g426c96fcdb

पैदावार

$ 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

और प्रदर्शन के उपाय के लिए :

$ git config --global trace2.perfTarget ~/log.perf
$ git version
git version 2.20.1.155.g426c96fcdb

पैदावार

$ 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 (Q3 2019) में प्रलेखित है, उपयोग करने के लिए पर्यावरण चर है GIT_TRACE2

Carlo Marcelo Arenas Belón ( ) द्वारा प्रतिबद्ध 6114a40 (26 जून 2019) देखें । देखें 3efa1c6 प्रतिबद्ध (12 जून 2019) द्वारा Ævar Arnfjörð Bjarmason ( )( जूनियो सी हमानो द्वारा विलय - - in प्रतिबद्ध e9eaaa4 , 09 Jul 2019)carenas
avar
gitster

यह Git 2.22 में किए गए कार्य का अनुसरण करता है: SZEDER Gäbor () द्वारा 4e0d3aaszeder , प्रतिबद्ध e4b75d6 (19 मई 2019 )
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध 463dca6 , 30 मई 2019)

trace2: GIT_TRACE2 * के लिए पर्यावरण चर नाम बदलें

उपयोगकर्ताओं द्वारा निर्धारित किया जाने वाला पर्यावरण चर के लिए, GIT_TR2*env var अभी बहुत अस्पष्ट, असंगत और बदसूरत हैं।

स्थापित के अधिकांश GIT_*वातावरण चर-रूपों का उपयोग नहीं है, और कुछ ऐसा कर (के मामले में GIT_DIR, GIT_COMMON_DIR, GIT_DIFF_OPTS) यह काफी स्पष्ट है क्या संक्षिप्त रूपों (है DIRऔर OPTS) के लिए खड़े हैं।
लेकिन इसके लिए क्या TRखड़ा है? ट्रैक, पारंपरिक, ट्रेलर, लेनदेन, स्थानांतरण, परिवर्तन, संक्रमण, अनुवाद, प्रत्यारोपण, परिवहन, ट्रैवर्सल, ट्री, ट्रिगर, ट्रंकट, ट्रस्ट, या ...?

ट्रेस 2 की सुविधा, जैसा कि इसके नाम से पता चलता है कि '2' प्रत्यय, अंततः गिट की मूल ट्रेस सुविधा के लिए माना जाता है।
यह अपेक्षा करना उचित है कि संबंधित परिवेश चर सूट का पालन करें, और मूल GIT_TRACEचर के बाद उन्हें कहा जाता है GIT_TRACE2; ऐसी कोई बात नहीं है ' GIT_TR'।

सभी ट्रेस2-विशिष्ट कॉन्फिग वेरिएबल बहुत ही समझदारी से ' trace2' सेक्शन में होते हैं, ' tr2' में नहीं ।

OTOH, हम इन पर्यावरण चर के नामों से "ट्रेस" के अंतिम तीन अक्षरों को छोड़ कर कुछ भी हासिल नहीं करते हैं

इससे पहले कि वे एक स्थिर रिलीज में अपना रास्ता बनाने से पहले सभी GIT_TR2*पर्यावरण चर का नाम बदल दें GIT_TRACE2*


Git 2.24 (Q3 2019) Git रिपॉजिटरी आरंभीकरण में सुधार करता है।

देखें प्रतिबद्ध 22932d9 , 5732f2b प्रतिबद्ध , 58ebccb प्रतिबद्ध (06 अगस्त 2019) द्वारा जेफ राजा ( peff)
( जूनियो सी gitsterहमानो द्वारा विलय - - प्रतिबद्ध बी ४ एसी में , 09 सितंबर 2019)

आम-मुख्य: देरी ट्रेस 2 आरंभीकरण

हम trace2सिस्टम को आम मुख्य () फ़ंक्शन में आरंभीकृत करते हैं ताकि सभी प्रोग्राम (यहां तक ​​कि जो बिलियन नहीं हैं) ट्रेसिंग को सक्षम कर सकें।

लेकिन trace2स्टार्टअप अपेक्षाकृत भारी-भरकम होता है, क्योंकि हमें यह तय करने के लिए डिस्क-डिस्क को वास्तव में पढ़ना है या नहीं।
यह अन्य सामान्य-मुख्य आरंभीकरण के साथ अप्रत्याशित बातचीत का कारण बन सकता है। उदाहरण के लिए, हम कॉल करने से पहले कॉन्फिग कोड में समाप्त हो जाएंगे initialize_the_repository(), और सामान्य इनवैलेंट जो the_repositoryकभी भी NULL नहीं होगा।

चलिए, trace2आरंभ से पहले हम आम-मुख्य में आरंभीकरण को और नीचे ले जाते हैं cmd_main()


Git 2.24 (Q4 2019) यह भी सुनिश्चित करता है कि trace2सबसिस्टम से आउटपुट अब और अधिक पूर्व स्वरूपित हो।

प्रतिबद्ध देखें 742ed63 , प्रतिबद्ध e344305 , प्रतिबद्ध c2b890a (09 अगस्त 2019), कमिटमेंट ad43e37 , कमिटमेंट 04f10d3 , कमिटमेंट da4589c (08 अगस्त 2019), और जेफ होस्टेटलर () द्वारा 371.11b (31 जुलाई 2019 )(द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 93fc876 , 30 सितं, 2019)jeffhostetler
gitster

और, फिर भी २.२४

प्रतिबद्ध देखें 87db61a , 83e57b0 (04 अक्टूबर 2019), और 2254101 के लिए प्रतिबद्ध , जोश स्टेडमोन ( steadmon) द्वारा 3D4548e (03 अक्टूबर 2019 )
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध d0ce4d9 , 15 अक्टू 2019)

trace2: यदि नई निर्देशिका में बहुत सी फाइलें हैं, तो नए निशान छोड़ दें

साइन-ऑफ-बाय: जोश स्टीडमन

trace2फ़ाइलों को लक्ष्य निर्देशिका में लिख सकते हैं।
भारी उपयोग के साथ, यह निर्देशिका फ़ाइलों से भर सकती है, जिससे ट्रेस-प्रोसेसिंग सिस्टम के लिए कठिनाई हो सकती है।

यह पैच trace2.maxFilesअधिकतम संख्या में फ़ाइलों को सेट करने के लिए एक विन्यास विकल्प ( ) जोड़ता trace2है जो लक्ष्य निर्देशिका में लिखेंगे।

maxFilesसकारात्मक पूर्णांक पर सेट होने पर निम्न व्यवहार सक्षम होता है:

  • trace2किसी टार्गेट डाइरेक्टरी में फाइल कब लिखेंगे, पहले यह देख लें कि निशान छोड़े जाने चाहिए या नहीं। निशान को छोड़ दिया जाना चाहिए यदि:

    • एक संतरी फ़ाइल है जो घोषणा करती है कि बहुत सारी फाइलें हैं
    • या, फ़ाइलों की संख्या से अधिक है trace2.maxFiles
      बाद के मामले में, हम git-trace2-discardभविष्य की जाँच को गति देने के लिए एक प्रहरी फ़ाइल बनाते हैं ।

धारणा यह है कि एक अलग ट्रेस-प्रोसेसिंग सिस्टम उत्पन्न निशान से निपट रहा है; एक बार जब यह प्रहरी फ़ाइल को संसाधित और हटा देता है, तो नए ट्रेस फ़ाइलों को फिर से उत्पन्न करने के लिए सुरक्षित होना चाहिए।

डिफ़ॉल्ट मान trace2.maxFilesशून्य है, जो फ़ाइल गणना की जांच को अक्षम करता है।

कॉन्फ़िगरेशन को नए परिवेश चर के साथ भी ओवरराइड किया जा सकता है GIT_TRACE2_MAX_FILES:।


और Git 2.24 (Q4 2019) git pushचरणों के बारे में ट्रेस 2 सिखाएं ।

देखें प्रतिबद्ध 25e4b80 , प्रतिबद्ध 5fc3118 (02 अक्टू 2019) द्वारा जोश Steadmon ( steadmon)
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध 3b9ec27 , 15 अक्टू 2019)

push: ट्रेस 2 इंस्ट्रूमेंटेशन जोड़ें

साइन-ऑफ-बाय: जोश स्टीडमन

में trace2 क्षेत्रों जोड़े transport.cऔर builtin/push.cबेहतर ट्रैक समय धक्का के विभिन्न चरणों में खर्च करने के लिए:

  • लिस्टिंग रेफरी
  • सबमॉडल्स की जाँच
  • सबमॉडल्स को धक्का देना
  • पुशिंग रेफरी

Git 2.25 (Q1 2020) के साथ, कुछ Documentation/technicalको हेडर *.hफ़ाइलों में ले जाया जाता है।

देखें प्रतिबद्ध 6c51cb5 , d95a77d प्रतिबद्ध , bbcfa30 प्रतिबद्ध , f1ecbe0 प्रतिबद्ध , 4c4066d प्रतिबद्ध , 7db0305 प्रतिबद्ध , f3b9055 प्रतिबद्ध , 971b1f2 प्रतिबद्ध , 13aa9c8 प्रतिबद्ध , c0be43f प्रतिबद्ध , 19ef3dd प्रतिबद्ध , 301d595 प्रतिबद्ध , 3a1b341 प्रतिबद्ध , 126c1cc प्रतिबद्ध , d27eb35 प्रतिबद्ध , 405c6b1 प्रतिबद्ध , प्रतिबद्ध d3d7172 , 3f1480b कमिट करें , 266f03e , 13c4d7e कमिट करें(17 नवंबर 2019) हेबा वालि ( HebaWaly) द्वारा
(द्वारा विलय Junio सी Hamano - gitster- में 26c816a प्रतिबद्ध , 16 दिसंबर 2019)

trace2: डॉक्टर को स्थानांतरित करें trace2.h

साइन-ऑफ-बाय: हेबा वाली

से कार्यों प्रलेखन ले जाएँ Documentation/technical/api-trace2.txtकरने के लिए trace2.hके रूप में यह डेवलपर्स के बजाय एक और दस्तावेज़ फ़ाइल में की तलाश की कोड के पास में उपयोग की जानकारी को खोजने के लिए आसान है।

केवल फ़ंक्शंस डॉक्यूमेंटेशन सेक्शन को हटा दिया Documentation/technical/api-trace2.txtजाता है क्योंकि फ़ाइल विवरणों से भरी होती है जो ट्रेस 2 में जोड़े गए डॉक फ़ाइल में लिंक के साथ एक अलग डॉक फ़ाइल में होना अधिक उचित लगता है। इसके अलावा फंक्शंस डॉक को हटा दिया जाता है ताकि वे अनावश्यक जानकारी से बच सकें, जो हेडर फाइल में डॉक्यूमेंटेशन के साथ सिंक करना मुश्किल होगा।

(हालांकि कि पुनर्गठन एक और आदेश पर एक पक्ष प्रभाव था, के बारे में बताया और में Git 2.25.2 (मार्च 2020) के साथ तय हो गई cc4f2eb प्रतिबद्ध (14 फरवरी 2020) द्वारा जेफ राजा ( peff)
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध 1235384 , 17 फरवरी 2020) )


2.27 Git (Q2 2020) के साथ: ट्रेस 2 एन्हांसमेंट एनवायरनमेंट वेरिएबल्स की लॉगिंग की अनुमति देने के लिए

जोश स्टेडमोन ( ) द्वारा 3D3adaa (20 मार्च 2020) के लिए प्रतिबद्ध देखें । ( जूनियो सी हमानो द्वारा विलय - - में 810dc64 , 22 अप्रैल 2020)steadmon
gitster

trace2: पर्यावरण चर को लॉग करने के लिए Git सिखाएं

साइन-ऑफ-बाय: जोश स्टैडमैन
एकेड-बाय: जेफ होस्टेटलर

ट्रेस 2 के माध्यम से, Git पहले से ही दिलचस्प कॉन्फिग पैरामीटर ( trace2_cmd_list_config()फ़ंक्शन देखें ) लॉग कर सकता है । हालाँकि, यह एक अपूर्ण चित्र प्रदान कर सकता है क्योंकि कई विन्यास पैरामीटर पर्यावरण चर के माध्यम से ओवरराइड की भी अनुमति देते हैं।

अधिक पूर्ण लॉग्स के लिए अनुमति देने के लिए, हम एक नया trace2_cmd_list_env_vars()फ़ंक्शन और सहायक कार्यान्वयन जोड़ते हैं , जो पहले से मौजूद कॉन्फिगर परम लॉगिंग कार्यान्वयन के बाद बनाया गया है।


Git 2.27 (Q2 2020) के साथ, कोडपाथ सिखाते हैं जो प्रगति मीटर को दिखाता है start_progress()और stop_progress()कॉल का regionपता लगाने के लिए " " के रूप में उपयोग करता है।

एमिली शफ़र ( ) द्वारा प्रतिबद्ध 98a1364 (12 मई 2020) देखें । (द्वारा विलय Junio सी Hamano - - में d98abce प्रतिबद्ध , 14 मई 2020)nasamuffin
gitster

trace2: लॉग प्रगति समय और थ्रूपुट

साइन-ऑफ-बाय: एमिली शफ़र

केवल एक ऑपरेशन, जैसे ' git fetch' को पढ़ाने के बजाय , थ्रूपुट को ट्रैस पर कैसे लिखें, हम उपयोगकर्ता के संचालन की एक विस्तृत श्रृंखला के बारे में जान सकते हैं , जो प्रगति पुस्तकालय में टूलिंग को जोड़कर धीमा लग सकता है

संचालन जो प्रगति को प्रदर्शित करते हैं, वे धीमी गति से चलने की संभावना रखते हैं और जिस तरह की चीज हम प्रदर्शन के लिए निगरानी करना चाहते हैं।

ऑब्जेक्ट काउंट्स और डेटा ट्रांसफर साइज़ दिखाकर, हमें यह सुनिश्चित करने के लिए कुछ व्युत्पन्न माप करने में सक्षम होना चाहिए कि ऑपरेशन्स हमारी अपेक्षा के अनुरूप हैं।

तथा:

Git 2.27 (Q2 2020) के साथ, हमारे हाल के बदलाव के लिए आखिरी मिनट में प्रगति के उपयोग को अनुमति देने योग्य क्षेत्र के रूप में एपीआई की अनुमति देता है।

डेरिक स्टोले ( ) द्वारा प्रतिबद्ध 3af029c (15 मई 2020) देखें । ( जूनियो सी हमानो द्वारा विलय - - में e५ डी20२io , २० मई २०२०)derrickstolee
gitster

progress: कॉल करने के trace2_region_leave()बाद ही कॉल करें_enter()

साइन-ऑफ-बाय: डेरिक स्टोले

प्रगति एपीआई का एक उपयोगकर्ता start_progress()सशर्त रूप से कॉल करता है और उस पर निर्भर करता है display_progress()और stop_progress()जब start_progress()कॉल नहीं किया जाता है, तो वह कार्य नहीं करता है।

हम के लिए एक कॉल जोड़ने पर trace2_region_enter()करने के लिए start_progress(), प्रगति एपीआई कार्यों से अन्य trace2 API कॉल करने के लिए कॉल सुनिश्चित करें कि इन trace2 कॉल को छोड़ दिया है जब बनाना चाहिए start_progress()प्रगति struct पर बुलाया नहीं गया है।

विशेष रूप से, जब हमने कॉल नहीं किया है, तब trace2_region_leave()से कॉल न करें , जो मेल खाता हो ।stop_progress()start_progress()trace2_region_enter()


4

क्या आपने -vक्लोन करते समय क्रिया ( ) ऑपरेटर को जोड़ने की कोशिश की है ?

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


2

पुराने git संस्करणों के लिए (1.8 और पहले)

मैं पुराने git और ssh संस्करणों में SSH डिबगिंग को सक्षम करने के लिए कोई उपयुक्त तरीका नहीं खोज सका । मैंने उपयोग किए जाने वाले पर्यावरण चर ltrace -e getenv ...की तलाश की और GIT_TRACE या SSH_DEBUG चर का कोई संयोजन नहीं पा सका, जो काम करेगा।

इसके बजाय यहाँ 'ssh -v' को अस्थायी रूप से git-> ssh अनुक्रम में इंजेक्ट करने का एक नुस्खा है:

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

यहां संस्करण संस्करण 1.8.3 से ssh संस्करण OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 फरवरी 2013 के साथ एक github रेपो क्लोनिंग का आउटपुट दिया गया है :

$ (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'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.