Git अपने आप सूचनाओं को दूर नहीं फेंकता है । हर फ़ाइल के सभी पिछले संस्करण हमेशा श्रद्धा, अंतर, निरीक्षण, एट वगैरह के लिए उपलब्ध होते हैं।
पूरे पेड़ बनाम व्यक्तिगत-फाइलें
आप जो सामंजस्य स्थापित करने की कोशिश कर रहे हैं, वह एक व्यक्तिगत फ़ाइल के पुराने संस्करण को एक्सेस करने का विचार है। इस तथ्य के अनुसार कि गिट का इतिहास मॉडल पूरे पेड़ पर केंद्रित है। पूरे ट्री-वर्जनिंग को देखने के लिए थोड़ा और अधिक काम करने की आवश्यकता होती है (उदाहरण के लिए) foo.c
जैसा कि यह संस्करण foo.c
पहले से मौजूद था, यह दस -चेंज पहले बनाम पूरे दस-ट्री-परिवर्तन पहले था:
# 10 foo.c-changes ago
git show $(git rev-list -n 10 --reverse HEAD -- foo.c | head -1):foo.c
# 10 whole-tree-changes ago
git show HEAD~10:foo.c
पेड़-उन्मुखीकरण के लाभ, मुख्य रूप से देखने की क्षमता पूरे पेड़ के विभिन्न हिस्सों में किए गए अन्योन्याश्रित परिवर्तनों की एक इकाई के रूप में होती है, सामान्य रूप से अतिरिक्त टाइपिंग (जो उपनाम, स्क्रिप्ट, एट कैशेरा) और सीपीयू समय के साथ कम हो सकती है पिछले कामों के माध्यम से खुदाई का खर्च।
भंडारण क्षमता
जब कोई नई वस्तु (उदाहरण के लिए पहले अनदेखी सामग्री वाली फ़ाइल) सिस्टम में प्रवेश करती है, तो इसे "ढीली वस्तु" के रूप में सादे (zlib) संपीड़न के साथ संग्रहित किया जाता है। जब पर्याप्त ढीली वस्तुएं जमा होती हैं ( gc.auto
कॉन्फ़िगरेशन विकल्प के आधार पर ; या जब उपयोगकर्ता git gc या निम्न-स्तरीय पैकिंग कमांड में से एक चलाता है ), Git कई ढीली वस्तुओं को एक "पैक फ़ाइल" में एकत्रित करेगा।
एक पैक फ़ाइल में वस्तुओं को या तो सादे संपीड़ित डेटा के रूप में संग्रहीत किया जा सकता है (एक ढीली वस्तु के रूप में, बस दूसरों की वस्तुओं के साथ बंडल), या किसी अन्य वस्तु के खिलाफ संकुचित डेल्टा के रूप में। डेल्टास को कॉन्फ़िगर करने योग्य गहराई ( pack.depth
) के साथ एक साथ जंजीर किया जा सकता है और किसी भी उपयुक्त वस्तु के खिलाफ बनाया जा सकता है ( pack.window
सबसे अच्छा डेल्टा आधार के लिए व्यापक रूप से गिट खोज कैसे नियंत्रित करता है; एक ऐतिहासिक रूप से असंबंधित फ़ाइल के एक संस्करण का उपयोग आधार के रूप में किया जा सकता है, अगर ऐसा होगा तो अच्छा डेल्टा संपीड़न)। अक्षांश और गहराई के आकार का विन्यास डेल्टा संपीड़न इंजन देता है जिसके परिणामस्वरूप अक्सर सीवीएस-शैली सरल एक-संस्करण-विरुद्ध-अगले-पिछले-संस्करण "भिन्न" संपीड़न की तुलना में बेहतर डेल्टा संपीड़न होता है।
यह इस आक्रामक डेल्टा संपीड़न (सामान्य zlib संपीड़न के साथ संयुक्त) है जो अक्सर एक Git रिपॉजिटरी (पूर्ण इतिहास और एक असम्पीडित कार्यशील पेड़ के साथ) को एक एकल SVN चेकआउट की तुलना में कम जगह ले सकता है (असम्पीडित कार्यशील पेड़ और प्राचीन प्रतिलिपि के साथ)।
कैसे Git स्टोर ऑब्जेक्ट और Git कम्युनिटी बुक के Packfile अनुभाग देखें । इसके अलावा git पैक-ऑब्जेक्ट्स मैनपेज ।
* आप बता सकते हैं कि "इतिहास को फिर से लिखना" और git रीसेट जैसे आदेशों के साथ Git थ्रो कमिट करता है , लेकिन इन मामलों में भी Git "हैंग हो जाता है" कुछ समय के लिए नए डिस्क्लेमर कमिट हो जाते हैं, बस अगर आप तय करते हैं कि आपको उनकी ज़रूरत है। Git reflog और git prune देखें ।