Git को उतना विकसित नहीं बनाया गया था ।
खुद ही देख लो। आधिकारिक गिट रिपॉजिटरी को क्लोन करें , इसे gitk
(या अपने पसंदीदा ग्राफिकल गिट लॉग दर्शक) में खोलें , और इसके कानों में संशोधन देखें।
आप देखेंगे कि यह मूल रूप से केवल बहुत मुख्य कार्यक्षमता (ऑब्जेक्ट डेटाबेस और इंडेक्स) था। बाकी सब कुछ हाथ से किया जाता था । हालांकि, इस छोटे से कोर को आसानी से शेल स्क्रिप्टिंग के माध्यम से स्वचालित रूप से डिजाइन किया गया था। Git के शुरुआती उपयोगकर्ताओं ने सामान्य कार्यों को स्वचालित करने के लिए अपनी स्वयं की शेल स्क्रिप्ट लिखीं; बहुत कम, इन लिपियों को गिट वितरण में शामिल किया गया था (एक प्रारंभिक उदाहरण के लिए देखें 839a7a0 )। हर बार एक नई आवश्यकता के लिए, लिपियों को इसके लिए अनुमति देने के लिए अनुकूलित किया गया था। बहुत बाद में, इनमें से कई लिपियों को सी में फिर से लिखा जाएगा।
एक स्वच्छ, ओर्थोगोनल कोर का संयोजन (जिसे आप अभी भी ज़रूरत पड़ने पर सीधे उपयोग कर सकते हैं), एक ऊपरी परत के साथ जो उस पर व्यवस्थित रूप से बढ़ी है, वही है जो अपनी शक्ति प्रदान करता है। बेशक, यह भी है कि यह अजीब तरह से नामित आदेशों और विकल्पों की बड़ी मात्रा देता है।
संपीड़न, रेखांकन, रिवीजन नंबरों से छुटकारा, ब्रांचिंग, स्टैशिंग, रीमोट्स पर जोर देना ... यह सब कहां से आया?
शुरुआत में बहुत कुछ ऐसा नहीं था।
जबकि प्रत्येक ऑब्जेक्ट को व्यक्तिगत रूप से संपीड़ित किया गया था, और डुप्लिकेट को उनके नामकरण से बचा गया था, "पैक" फाइलें जो उच्च संपीड़न के लिए ज़िम्मेदार हैं जिन्हें हम गिट में देखने के लिए उपयोग करते हैं, मौजूद नहीं थे। शुरुआत में दर्शन "डिस्क स्थान सस्ता है" था।
यदि "ग्राफ्स" से आपका मतलब ग्राफिकल दर्शकों की तरह है gitk
, तो वे बाद में दिखाई दिए (AFAIK, पहला वाला था gitk
)। AFAIK, BitKeeper का ग्राफिकल हिस्ट्री व्यूअर भी था।
वास्तव में संस्करण संख्या से छुटकारा पाना, वास्तव में वस्तुओं को संग्रहीत करने के लिए एक सामग्री-संबोधित फाइलसिस्टम का उपयोग करने की मुख्य अवधारणा के लिए, ज्यादातर मोनोनोन से आया था । उस समय, मोनोटोन धीमा था; यदि ऐसा नहीं होता, तो यह संभव है कि लिनस ने गिट बनाने के बजाय इसका इस्तेमाल किया होगा।
ब्रांचिंग पर जोर देना एक वितरित संस्करण नियंत्रण प्रणाली पर कुछ अपरिहार्य है, क्योंकि प्रत्येक क्लोन एक अलग शाखा के रूप में कार्य करता है।
स्टैशिंग ( git stash
), IIRC है, हाल ही में। रिफ्लेक्स, जो इसका उपयोग करता है, शुरुआत में नहीं थे।
यहां तक कि रीमोट भी शुरू में नहीं थे। मूल रूप से, आपने वस्तुओं का उपयोग करके हाथ की नकल की rsync
।
एक के बाद एक, इन विशेषताओं में से प्रत्येक को किसी ने जोड़ा था। उनमें से सभी नहीं - शायद उनमें से अधिकांश भी नहीं - लिनुस द्वारा लिखे गए थे। हर बार किसी को यह महसूस होता है कि कौन सी जरूरत पूरी नहीं होती है, कोई भी गिट की कोर "प्लंबिंग" परत पर एक नई सुविधा बना सकता है, और इसे शामिल करने का प्रस्ताव कर सकता है। यदि यह अच्छा है, तो संभवतः इसे स्वीकार किया जाएगा, आगे भी गिट की उपयोगिता (और इसकी कमांड लाइन जटिलता) को बढ़ाया जाएगा।