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.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()
GIT_CURL_VERBOSE
, आपके पास Git 2.9.x / 2.10 होगाGIT_TRACE_CURL
। देखें नीचे मेरा उत्तर ।