इसके नाम का पता लगाने के लिए git समान फ़ाइलों का पता कैसे लगाता है?


91

विकिपीडिया ने स्वत: नाम का पता लगाने की व्याख्या की:

संक्षेप में, संशोधन एन में एक फ़ाइल दी गई है, संशोधन एन is 1 में उसी नाम की एक फ़ाइल इसका डिफ़ॉल्ट पूर्वज है। हालाँकि, जब संशोधन N G 1 में कोई समान नाम वाली फ़ाइल नहीं है, तो Git एक फ़ाइल की खोज करता है जो केवल संशोधन N vision 1 में मौजूद थी और नई फ़ाइल के समान है।

नाम पहचान स्पष्ट रूप से इसी तरह की फ़ाइल का पता लगाने के लिए नीचे फोड़े। क्या वह एल्गोरिथम कहीं भी प्रलेखित है? यह जानना अच्छा होगा कि स्वचालित रूप से किस प्रकार के परिवर्तनों का पता लगाया जाता है।


जवाबों:


92

Git फ़ाइल सामग्री ट्रैक करता है, फ़ाइल नाम नहीं। तो इसकी सामग्री को बदलने के बिना किसी फ़ाइल का नाम बदलने से गिट का पता लगाना आसान है। (Git ट्रैक नहीं है, लेकिन प्रदर्शन का पता लगाने ; का उपयोग कर git mvया git rmऔर git add। प्रभावी रूप से एक ही है)

जब एक फ़ाइल रिपॉजिटरी में जोड़ दी जाती है, तो फ़ाइल नाम ट्री ऑब्जेक्ट में होता है। वास्तविक फ़ाइल सामग्री को रिपॉजिटरी में एक द्विआधारी बड़ी वस्तु ( बूँद ) के रूप में जोड़ा जाता है। Git अतिरिक्त फ़ाइलों के लिए एक और बूँद नहीं जोड़ेगा जिसमें समान सामग्री हो। वास्तव में, Git नहीं कर सकता क्योंकि सामग्री फ़ाइल सिस्टम में हैश के पहले दो वर्णों में संग्रहीत की जाती है जिसमें निर्देशिका का नाम और शेष इसके भीतर फ़ाइल का नाम है। तो नाम बदलने के लिए हैश की तुलना करने का मामला है।

पुनर्नामित फ़ाइल में छोटे परिवर्तनों का पता लगाने के लिए, Git कुछ एल्गोरिदम और एक सीमा सीमा का उपयोग करता है यह देखने के लिए कि क्या यह नाम है। उदाहरण के लिए, -Mझंडे के लिए एक नज़र है git diff। कॉन्फ़िगरेशन मान भी होते हैं जैसे merge.renameLimit(मर्ज के दौरान नाम का पता लगाने के लिए विचार करने के लिए फ़ाइलों की संख्या)।

यह समझने के लिए कि गिट समान फ़ाइलों को कैसे व्यवहार करता है (यानी, क्या फ़ाइल परिवर्तनों को नाम दिया जाता है), ऊपर उपलब्ध कॉन्फ़िगरेशन विकल्पों और झंडों का पता लगाएं। आप कैसे के साथ विचार नहीं किया जाना चाहिए। यह समझने के लिए कि वास्तव में git इन कार्यों को कैसे पूरा करता है, पाठ में अंतर खोजने के लिए एल्गोरिदम देखें, और git स्रोत कोड पढ़ें।

एल्गोरिदम केवल अंतर, मर्ज और लॉग उद्देश्यों के लिए लागू होते हैं - वे प्रभावित नहीं करते हैं कि गिट उन्हें कैसे स्टोर करते हैं। फ़ाइल सामग्री में किसी भी छोटे परिवर्तन का मतलब है कि इसके लिए एक नई वस्तु जोड़ी गई है। उस स्तर पर कोई डेल्टा या अंतर नहीं हो रहा है। बेशक, बाद में, उन वस्तुओं को पैक किया जा सकता है जहां डेल्टास को पैकफाइल्स में संग्रहीत किया जाता है, लेकिन यह नाम बदलने का पता लगाने से संबंधित नहीं है।


57
"आप की जरूरत नहीं है कि कैसे के साथ विचार किया जाना चाहिए।" - मुझे लगा कि यही सवाल था?
बैन

2

कई एल्गोरिदम हैं जो ग्रंथों के बीच समानता का पता लगाते हैं, और संस्करण नियंत्रण प्रणाली अक्सर इनका उपयोग पहले से ही दो संस्करणों के बीच के अंतर को संग्रहीत करने के लिए करते हैं। WinMerge जैसे उपकरण लाइनों के भीतर भी अंतर का पता लगाने के लिए काफी स्मार्ट हैं, इसलिए मुझे इस नाम का पता लगाने के लिए इन एल्गोरिदम का उपयोग नहीं करने का एक कारण नहीं दिखता है।

यहां समान पाठों का पता लगाने के लिए एल्गोरिदम के बारे में चर्चा की गई है । इनमें से कुछ एल्गोरिदम प्राकृतिक भाषाओं के लिए अनुकूलित हो सकते हैं, जबकि अन्य स्रोत कोड के लिए बेहतर काम कर सकते हैं, लेकिन संक्षेप में वे बहुत समान हैं।

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