प्रलेखन के लिए एक विशेष मूल्य के रूप में 0 का उल्लेख नहीं है diff.renamelimit
।
इसलिए आपको उस सीमा को अनुशंसित मूल्य पर सेट करना चाहिए।
या आप पूरी तरह से नाम का पता लगाने को निष्क्रिय करने की कोशिश कर सकते हैं। ( git config diff.renames 0
)
आपको इस ब्लॉग पोस्ट में एक समान उदाहरण मिलेगा " संघर्ष, git, नाम बदलें, ओह मेरी ... ":
जैसा कि पहले ही उल्लेख किया गया है, गिट उस तथ्य के बाद फ़ाइल नाम का पता लगाने की कोशिश करता है, उदाहरण के लिए उपयोग करते समय git log
या git diff/merge
।
नाम का पता लगाने की कोशिश करते समय फ़ाइल की सामग्री को बदलने के बिना पूर्व नाम के साथ सटीक और अक्षम नाम के बीच अंतर होता है और बाद वाले का नाम फ़ाइल की सामग्री में परिवर्तन शामिल हो सकता है (जैसे नाम बदलना / जावा क्लास को स्थानांतरित करना)।
यह भेद महत्वपूर्ण है क्योंकि सटीक नाम का पता लगाने के लिए एल्गोरिथ्म रैखिक है और इसे हमेशा निष्पादित किया जाएगा, जबकि अक्षम नाम बदलने का पता लगाने के लिए एल्गोरिथ्म द्विघात ( O(n^2)
) है और गिट ऐसा करने का प्रयास नहीं करता है यदि परिवर्तित फ़ाइलों की संख्या एक निश्चित सीमा से अधिक है (1000 से 1000) चूक)।
जैसा कि हाल के पुनर्गठन से प्रभावित फाइलों की संख्या इस सीमा से अधिक है, गिट बस देता है और डेवलपर के लिए मर्ज रिज़ॉल्यूशन छोड़ देता है। हमारे मामले में हम थ्रेशोल्ड को बदलकर मैन्युअल मर्ज रिज़ॉल्यूशन करने से बच सकते हैं
नोट: Git 2.16 (Q1 2018) उस सीमा में संशोधन करेगा:
ऐतिहासिक रूप से, नाम का पता लगाने के लिए अलग मशीनरी में 32k रास्तों की हार्डकोड सीमा थी; यह (संभवतः) परिणाम पढ़ने के लिए आसान के साथ उपयोगकर्ताओं को व्यापार चक्र की अनुमति देने के लिए उठाया जा रहा है।
जोनाथन टैन ( ) द्वारा प्रतिबद्ध 8997355 (29 नवंबर 2017) देखें ।
देखें प्रतिबद्ध 9268cf4 , 9f7e4bf प्रतिबद्ध , d6861d0 प्रतिबद्ध , b520abf प्रतिबद्ध (13 नवंबर 2017) द्वारा एलिय्याह Newren ( ) । (द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 6,466,854 , 19 दिसंबर 2017)jhowtan
newren
gitster
diff
: के क्लैंप को हटा दें renameLimit
में प्रतिबद्ध 0024a54 (फिक्स नाम बदलने पता लगाने की सीमा की जाँच; सितम्बर 2007, Git v1.5.3.2), renameLimit
32767. से संबद्ध कर दिया गया था
यह प्रकट होता है बस निम्नलिखित गणना में अतिप्रवाह पूर्णांक से बचने के लिए किया गया है:
num_create * num_src <= rename_limit * rename_limit
हालाँकि इसे सीपीयू के समय के हिसाब से एक हार्ड-कोडेड बाउंड के रूप में भी देखा जा सकता है, हम उपयोगकर्ताओं को नाम बदलने से निपटने पर खर्च करने की अनुमति देने के लिए तैयार हैं।
एक ऊपरी बाध्य समझ में आता है, लेकिन दुर्भाग्य से इस ऊपरी बाध्य को न तो उपयोगकर्ताओं को सूचित किया गया था, न ही कहीं भी प्रलेखित किया गया था।
हालांकि बड़ी सीमाएं चीजों को धीमा कर सकती हैं, हमारे पास ऐसे उपयोगकर्ता हैं, जिनके पास एक छोटी सी पांच फ़ाइल परिवर्तन करने के लिए परमानंद होगा, चेरी को सही ढंग से चुना जाना चाहिए भले ही उन्हें मैन्युअल रूप से एक बड़ी सीमा निर्दिष्ट करनी पड़े और नाम बदलने के लिए दस मिनट इंतजार करना पड़े।
मौजूदा स्क्रिप्ट और उपकरण जो -l0
काम जारी रखने के लिए " " का उपयोग करते हैं, 0 को एक विशेष मान के रूप में यह दर्शाता है कि नाम बदलने की सीमा बहुत बड़ी संख्या है।
Git 2.17 (Q2 2018) " git diff
" आउटपुट की एक पंक्ति के बीच में चेतावनी संदेश दिखाने से बच जाएगा ।
Nguy Thn Thái Ngọc Duy ( pclouds
) द्वारा प्रतिबद्ध 4e056c9 (16 जनवरी 2018) देखें ।
(द्वारा विलय Junio सी Hamano - gitster
- में 17c8e0b प्रतिबद्ध , 13 फ़र 2018)
diff.c
: stdout
नाम बदलने की चेतावनी से पहले फ्लश करें
FILE
जब हम इन चेतावनियों (सीधे fd 2
) को प्रिंट करते हैं, तो आउटपुट एक ऑब्जेक्ट में बफर हो जाता है और फिर भी आंशिक रूप से बफर हो सकता है ।
आउटपुट इस तरह गड़बड़ है
worktree.c | 138 +-
worktree.h warning: inexact rename detection was skipped due to too many files.
| 12 +-
wrapper.c | 83 +-
यह और खराब हो जाता है अगर ग्राफ़ के हिस्से के लिए कलर कोड के बाद चेतावनी प्रिंट की जाती है। आपको हरे या लाल रंग में चेतावनी मिलेगी।
पहले फ्लशआउट करें, ताकि हम इसके बजाय ऐसा कुछ प्राप्त कर सकें:
xdiff/xutils.c | 42 +-
xdiff/xutils.h | 4 +-
1033 files changed, 150824 insertions(+), 69395 deletions(-)
warning: inexact rename detection was skipped due to too many files.
merge.renameLimit
इसके बजाय ऐसा क्यों हैdiff.renameLimit
?