गिट पुश करते समय "diff.renamelimit वैरिएबल" पर चेतावनी


86

मैं स्थानीय लोगों को दूरस्थ git सर्वर पर धकेल रहा हूं और निम्नलिखित चेतावनी संदेश मिला है:

remote: warning: only found copies from modified paths due to too many files.
remote: warning: you may want to set your diff.renamelimit variable to at least 19824 and retry the command.

लेकिन वास्तव में मैं पहले से 0 में diff.renamelimit सेट कर चुका हूं (मुझे लगता है कि शून्य का मतलब असीमित है, ठीक है?)।

$ git config --list
...
diff.renamelimit=0

तो इस चेतावनी से बचने के लिए मुझे क्या करना चाहिए? धन्यवाद।

जवाबों:


67

प्रलेखन के लिए एक विशेष मूल्य के रूप में 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), renameLimit32767. से संबद्ध कर दिया गया था
यह प्रकट होता है बस निम्नलिखित गणना में अतिप्रवाह पूर्णांक से बचने के लिए किया गया है:

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.

79
git config merge.renameLimit 999999

मर्ज क्या है ।renameLimit का मतलब है

मर्ज के दौरान नाम का पता लगाने पर विचार करने के लिए फ़ाइलों की संख्या; यदि निर्दिष्ट नहीं है, तो diff.renameLimit के मान को डिफॉल्ट करता है

स्रोत: https://git-scm.com/docs/git-merge


34
merge.renameLimitइसके बजाय ऐसा क्यों है diff.renameLimit?
pgpb.padilla

@ pgpb.padilla बहुत ही समान
सैंड्रा के

4
git config diff .renameLimit 999999 (अपना नंबर डालें) मेरे लिए काम करता है।
एलारकोइरिस

1
क्या कोई कारण है कि कोई इसे अधिकतम नहीं करना चाहता है? पहले स्थान पर सीमा क्यों है? बस अपने सीपीयू को पागलपन से बड़े मर्ज से बचाने के लिए?
इलेक्ट्रोविर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.