कैसे बनाया गया था गिट?


9

मेरा कार्यस्थल हाल ही में Git में बदल गया है और मैं इसे प्यार करता हूँ (और नफरत करता हूँ!)। मैं वास्तव में इसे प्यार करता हूं, और यह बहुत शक्तिशाली है। केवल एक ही चीज जिससे मैं नफरत करता हूं, वह यह है कि कभी-कभी यह बहुत शक्तिशाली होती है (और शायद थोड़ा सा उलझाने वाला / भ्रमित करने वाला)।

मेरा सवाल है ... कैसे डिजाइन किया गया था? बस थोड़े समय के लिए इसका उपयोग करने पर, आपको लगता है कि यह कई अस्पष्ट वर्कफ़्लो को संभाल सकता है जो अन्य संस्करण नियंत्रण प्रणाली नहीं कर सकती थी। लेकिन यह भी नीचे सुंदर लगता है। और तेज!

यह लिनुस की प्रतिभा के लिए कोई संदेह नहीं है। लेकिन मैं सोच रहा था, कुछ के आधार पर गिट के समग्र डिजाइन था? मैंने बिटकॉइन के बारे में पढ़ा है, लेकिन तकनीकी विवरणों के बारे में कुछ पता नहीं चल पाया है। संपीड़न, रेखांकन, रिवीजन नंबरों से छुटकारा, ब्रांचिंग, स्टैशिंग, रीमोट्स पर जोर देना ... यह सब कहां से आया?

लिनस ने वास्तव में इस एक को पार्क से बाहर खटखटाया और बहुत पहले प्रयास किया! सीखने की अवस्था को पार करने के बाद इसका उपयोग करना काफी अच्छा है।


शायद आपको git IRC चैनल पर कुछ मदद मिल सकती है (# freenode पर #itit)
yati sagade


2
you get the feel that it can handle many obscure workflows that other version control systems could not: यह शायद इसलिए है क्योंकि यह लाइनक्स कर्नेल को संभालने के लिए डिज़ाइन किया गया था, एक कुख्यात हैकिश, बड़े और जटिल कोड का टुकड़ा।
यानिस

1
Git की 10 वीं वर्षगांठ पर, यहाँ Torvalds के साथ एक साक्षात्कार से एक लेख है: linux.com/news/featured-blogs/185-jennifer-cloer/…
श्रीधर सरनोबत

जवाबों:


17

Git को उतना विकसित नहीं बनाया गया था ।

खुद ही देख लो। आधिकारिक गिट रिपॉजिटरी को क्लोन करें , इसे gitk(या अपने पसंदीदा ग्राफिकल गिट लॉग दर्शक) में खोलें , और इसके कानों में संशोधन देखें।

आप देखेंगे कि यह मूल रूप से केवल बहुत मुख्य कार्यक्षमता (ऑब्जेक्ट डेटाबेस और इंडेक्स) था। बाकी सब कुछ हाथ से किया जाता था । हालांकि, इस छोटे से कोर को आसानी से शेल स्क्रिप्टिंग के माध्यम से स्वचालित रूप से डिजाइन किया गया था। Git के शुरुआती उपयोगकर्ताओं ने सामान्य कार्यों को स्वचालित करने के लिए अपनी स्वयं की शेल स्क्रिप्ट लिखीं; बहुत कम, इन लिपियों को गिट वितरण में शामिल किया गया था (एक प्रारंभिक उदाहरण के लिए देखें 839a7a0 )। हर बार एक नई आवश्यकता के लिए, लिपियों को इसके लिए अनुमति देने के लिए अनुकूलित किया गया था। बहुत बाद में, इनमें से कई लिपियों को सी में फिर से लिखा जाएगा।

एक स्वच्छ, ओर्थोगोनल कोर का संयोजन (जिसे आप अभी भी ज़रूरत पड़ने पर सीधे उपयोग कर सकते हैं), एक ऊपरी परत के साथ जो उस पर व्यवस्थित रूप से बढ़ी है, वही है जो अपनी शक्ति प्रदान करता है। बेशक, यह भी है कि यह अजीब तरह से नामित आदेशों और विकल्पों की बड़ी मात्रा देता है।


संपीड़न, रेखांकन, रिवीजन नंबरों से छुटकारा, ब्रांचिंग, स्टैशिंग, रीमोट्स पर जोर देना ... यह सब कहां से आया?

शुरुआत में बहुत कुछ ऐसा नहीं था।

जबकि प्रत्येक ऑब्जेक्ट को व्यक्तिगत रूप से संपीड़ित किया गया था, और डुप्लिकेट को उनके नामकरण से बचा गया था, "पैक" फाइलें जो उच्च संपीड़न के लिए ज़िम्मेदार हैं जिन्हें हम गिट में देखने के लिए उपयोग करते हैं, मौजूद नहीं थे। शुरुआत में दर्शन "डिस्क स्थान सस्ता है" था।

यदि "ग्राफ्स" से आपका मतलब ग्राफिकल दर्शकों की तरह है gitk, तो वे बाद में दिखाई दिए (AFAIK, पहला वाला था gitk)। AFAIK, BitKeeper का ग्राफिकल हिस्ट्री व्यूअर भी था।

वास्तव में संस्करण संख्या से छुटकारा पाना, वास्तव में वस्तुओं को संग्रहीत करने के लिए एक सामग्री-संबोधित फाइलसिस्टम का उपयोग करने की मुख्य अवधारणा के लिए, ज्यादातर मोनोनोन से आया था । उस समय, मोनोटोन धीमा था; यदि ऐसा नहीं होता, तो यह संभव है कि लिनस ने गिट बनाने के बजाय इसका इस्तेमाल किया होगा।

ब्रांचिंग पर जोर देना एक वितरित संस्करण नियंत्रण प्रणाली पर कुछ अपरिहार्य है, क्योंकि प्रत्येक क्लोन एक अलग शाखा के रूप में कार्य करता है।

स्टैशिंग ( git stash), IIRC है, हाल ही में। रिफ्लेक्स, जो इसका उपयोग करता है, शुरुआत में नहीं थे।

यहां तक ​​कि रीमोट भी शुरू में नहीं थे। मूल रूप से, आपने वस्तुओं का उपयोग करके हाथ की नकल की rsync

एक के बाद एक, इन विशेषताओं में से प्रत्येक को किसी ने जोड़ा था। उनमें से सभी नहीं - शायद उनमें से अधिकांश भी नहीं - लिनुस द्वारा लिखे गए थे। हर बार किसी को यह महसूस होता है कि कौन सी जरूरत पूरी नहीं होती है, कोई भी गिट की कोर "प्लंबिंग" परत पर एक नई सुविधा बना सकता है, और इसे शामिल करने का प्रस्ताव कर सकता है। यदि यह अच्छा है, तो संभवतः इसे स्वीकार किया जाएगा, आगे भी गिट की उपयोगिता (और इसकी कमांड लाइन जटिलता) को बढ़ाया जाएगा।


"AFAIK, बिटकीपर में एक ग्राफिकल हिस्ट्री व्यूअर भी था।" हाँ यह करता है। यह बिल्कुल सुंदर नहीं है, लेकिन यह अत्यधिक कार्यात्मक है। बिटकॉइटर देखें / देखिए। Using.Looking.html , हालांकि यह दर्शाता है कि यह कैसे प्रदर्शित करता है कि यह शाखाओं का खराब काम करता है।
ब्रायन ओकले

1
इसके अलावा एक दिलचस्प पढ़ा, git की शुरुआत से कुछ चुनिंदा ईमेल, जो इसके शुरुआती विकास को दर्शाते हैं
CesarB

क्या प्रोग्रामर cvs + rsync + httpd के साथ git की कुछ कार्यक्षमता का अनुकरण करते थे? मुझे यह सुनने में दिलचस्पी होगी कि घर के बने उपाय क्या संभव थे।
श्रीधर सरनोबत

8

मुझे लगता है कि मुख्य बिंदु यह है कि गिट को ऐसा करने के लिए ग्रह पर सबसे योग्य व्यक्ति द्वारा डिज़ाइन किया गया था। और मैं प्रतिभा के बारे में बात नहीं कर रहा हूं, मैं अनुभव के बारे में बात कर रहा हूं: मुझे संदेह है कि कोई और है जो कोडबेस के प्रभारी के रूप में लिनक्स कर्नेल के रूप में आकार और योगदानकर्ताओं की संख्या के साथ संयोजन कर रहा है और अभी भी वास्तव में अधिकांश एकीकरण से निपट रहा है खुद काम करो।

इसलिए लिनुस किसी और की तुलना में बेहतर तरीके से वितरित संस्करण नियंत्रण प्रणाली के लिए आवश्यकताओं और उपयोग के मामलों को जानता था। और निश्चित रूप से यह मदद करता है कि उस कोडिंग का अधिकांश वह सी में काम कर रहा था, और इसमें से अधिकांश प्रदर्शन महत्वपूर्ण था।

मूल रूप से यह अपने स्वयं के खुजली को खरोंचने का अंतिम उदाहरण है।


6
"एकल सबसे योग्य"? मुझे ऐसा नहीं लगता। कई स्मार्ट लोग हैं जो वितरित स्रोत नियंत्रण लिखने के लिए योग्य हैं। BitMover (BitKeeper के पीछे कंपनी) के लोग वास्तव में वास्तव में जानते हैं कि वे क्या कर रहे हैं। लिनुस मैकरी को यह दिखाने के लिए भी श्रेय देता है कि उसे सोर्स कोड कंट्रोल कैसे काम करना चाहिए । लैरी के बिना कोई गिट नहीं होता।
ब्रायन ओकले

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

2
@ ब्रायन: मुझे यकीन है कि बिटकॉइन का उपयोग करने में अनुभव ने लिनस को बहुत कुछ सिखाया और मुझे इसका उल्लेख करना चाहिए। और निश्चित रूप से, बहुत सारे अन्य स्मार्ट, योग्य लोग हैं जो जानते हैं कि वे क्या कर रहे हैं। लेकिन मैं अभी भी यह बताता हूं कि कर्नेल को बनाए रखने में लिनस का अनुभव उसे सबसे योग्य, अनुभव-वार बनाता है । मैं गलत हो सकता हूं, लेकिन क्या आप किसी अन्य प्रोजेक्ट को बड़े, कई योगदानकर्ताओं के साथ इंगित कर सकते हैं, और जहां इसके लिए जिम्मेदार व्यक्ति अभी भी उतना ही गहराई से शामिल है, उन सभी योगदानकर्ताओं का वास्तविक कोड एक साथ काम करने के लिए?
माइकल बोर्गवर्ड

@ पंकज उपाध्याय: मैं किसी को कोस नहीं रहा हूं, मैं बस यही समझा रहा था कि मैंने जवाब क्यों नहीं दिया। आपने "पहले एक समाधान प्रदान किया" के बारे में कुछ कहा था जो मुझे लगता है कि इसका मतलब है कि आप समझ रहे थे कि किसी न किसी संबंध में "पहला" था। आपको क्या लगता है कि यह पहले था? यह निश्चित रूप से एक लंबे शॉट द्वारा पहला वितरित एसएमसी उपकरण नहीं था।
ब्रायन ओकले

1
@DeadMG: उस बयान का अधिक महत्वपूर्ण हिस्सा "बाद में आता है ... और इसका प्रदर्शन महत्वपूर्ण है"। मुझे संदेह है कि आपको कई ऐसे लोग मिलेंगे जो तर्क देंगे कि यदि आप इसे अच्छी तरह से जानते हैं तो सी-लो-ओवरहेड उच्च-प्रदर्शन कोड को लागू करने के लिए बहुत अनुकूल नहीं है।
माइकल बोर्गवर्ड्ट

6

यह बहुत सटीक रूप से डिज़ाइन किया गया था जैसा कि द गिट पैरेबल में वर्णित है ।

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

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