Git फ़ाइल सामग्री ट्रैक करता है, फ़ाइल नाम नहीं। तो इसकी सामग्री को बदलने के बिना किसी फ़ाइल का नाम बदलने से गिट का पता लगाना आसान है। (Git ट्रैक नहीं है, लेकिन प्रदर्शन का पता लगाने ; का उपयोग कर git mvया git rmऔर git add। प्रभावी रूप से एक ही है)
जब एक फ़ाइल रिपॉजिटरी में जोड़ दी जाती है, तो फ़ाइल नाम ट्री ऑब्जेक्ट में होता है। वास्तविक फ़ाइल सामग्री को रिपॉजिटरी में एक द्विआधारी बड़ी वस्तु ( बूँद ) के रूप में जोड़ा जाता है। Git अतिरिक्त फ़ाइलों के लिए एक और बूँद नहीं जोड़ेगा जिसमें समान सामग्री हो। वास्तव में, Git नहीं कर सकता क्योंकि सामग्री फ़ाइल सिस्टम में हैश के पहले दो वर्णों में संग्रहीत की जाती है जिसमें निर्देशिका का नाम और शेष इसके भीतर फ़ाइल का नाम है। तो नाम बदलने के लिए हैश की तुलना करने का मामला है।
पुनर्नामित फ़ाइल में छोटे परिवर्तनों का पता लगाने के लिए, Git कुछ एल्गोरिदम और एक सीमा सीमा का उपयोग करता है यह देखने के लिए कि क्या यह नाम है। उदाहरण के लिए, -Mझंडे के लिए एक नज़र है git diff। कॉन्फ़िगरेशन मान भी होते हैं जैसे merge.renameLimit(मर्ज के दौरान नाम का पता लगाने के लिए विचार करने के लिए फ़ाइलों की संख्या)।
यह समझने के लिए कि गिट समान फ़ाइलों को कैसे व्यवहार करता है (यानी, क्या फ़ाइल परिवर्तनों को नाम दिया जाता है), ऊपर उपलब्ध कॉन्फ़िगरेशन विकल्पों और झंडों का पता लगाएं। आप कैसे के साथ विचार नहीं किया जाना चाहिए। यह समझने के लिए कि वास्तव में git इन कार्यों को कैसे पूरा करता है, पाठ में अंतर खोजने के लिए एल्गोरिदम देखें, और git स्रोत कोड पढ़ें।
एल्गोरिदम केवल अंतर, मर्ज और लॉग उद्देश्यों के लिए लागू होते हैं - वे प्रभावित नहीं करते हैं कि गिट उन्हें कैसे स्टोर करते हैं। फ़ाइल सामग्री में किसी भी छोटे परिवर्तन का मतलब है कि इसके लिए एक नई वस्तु जोड़ी गई है। उस स्तर पर कोई डेल्टा या अंतर नहीं हो रहा है। बेशक, बाद में, उन वस्तुओं को पैक किया जा सकता है जहां डेल्टास को पैकफाइल्स में संग्रहीत किया जाता है, लेकिन यह नाम बदलने का पता लगाने से संबंधित नहीं है।