Git रिपॉजिटरी — प्रोजेक्ट के सोर्स कोड का भंडार है, जिसमें Git डेवलपमेंट के दौरान फ़ाइलों में हर बदलाव को ट्रैक करता है। रिपॉजिटरी में कमिट, ब्रांच और टैग का पूरा इतिहास होता है, जो डेवलपर्स को कोड पर एक साथ काम करने की अनुमति देता है। Git, 2024 के अनुसार, रिपॉजिटरी किसी भी वर्जन कंट्रोल सिस्टम की नींव है और दुनिया भर के लाखों प्रोजेक्ट्स में उपयोग होती है।
मुख्य बातें
Git रिपॉजिटरी — एक डेटा संरचना है जिसमें वर्जन कंट्रोल सिस्टम प्रोजेक्ट फ़ाइलों में बदलावों के इतिहास का वर्णन करने वाले मेटाडेटा और ऑब्जेक्ट संग्रहीत करता है। जब डेवलपर git init कमांड से रिपॉजिटरी को इनिशियलाइज़ करता है, Git प्रोजेक्ट रूट में एक छिपा हुआ फ़ोल्डर .git बनाता है।
इस फ़ोल्डर के अंदर सिस्टम के संचालन के लिए आवश्यक सभी ऑब्जेक्ट, संदर्भ और कॉन्फ़िगरेशन फ़ाइलें होती हैं। रिपॉजिटरी किसी विशिष्ट स्थान से बंधी नहीं होती — डेवलपर इसे स्थानीय रूप से बना सकता है और फिर किसी दूरस्थ सर्वर से जोड़ सकता है।
Git वितरित रिपॉजिटरी मॉडल का उपयोग करता है: प्रोजेक्ट का प्रत्येक सदस्य अपने कंप्यूटर पर इतिहास की पूरी प्रतिलिपि रखता है। इसका मतलब है कि अधिकांश संचालन — कमिट, इतिहास देखना, ब्रांच बनाना — सर्वर से संपर्क किए बिना स्थानीय रूप से निष्पादित होते हैं।
Git दस्तावेज़ीकरण के अनुसार, वितरित आर्किटेक्चर सिस्टम को खराबी के प्रति प्रतिरोधी बनाता है: यदि सर्वर डाउन हो जाता है, तो कोई भी स्थानीय रिपॉजिटरी प्रोजेक्ट के पूरे इतिहास को पुनर्स्थापित करने का स्रोत बन सकती है।
स्थानीय रिपॉजिटरी — डेवलपर के कंप्यूटर पर प्रोजेक्ट की प्रतिलिपि है। इसमें कमिट, ब्रांच और टैग का पूरा इतिहास होता है और यह नेटवर्क कनेक्शन के बिना commit, branch, merge और rebase संचालन करने देती है।
दूरस्थ रिपॉजिटरी — सर्वर पर होस्ट की जाती है और टीम के सभी सदस्यों के लिए सिंक्रनाइज़ेशन बिंदु के रूप में काम करती है। डेवलपर git push कमांड से अपने बदलाव भेजते हैं और git pull कमांड से दूसरों के बदलाव लेते हैं।
स्थानीय और दूरस्थ रिपॉजिटरी के बीच कनेक्शन remote origin — Git कॉन्फ़िगरेशन में संग्रहीत सर्वर URL — के माध्यम से कॉन्फ़िगर किया जाता है। एक स्थानीय रिपॉजिटरी कई दूरस्थ रिपॉजिटरी से जुड़ सकती है, जो फ़ोर्क के साथ काम करते समय उपयोगी है।
इस मॉडल का मुख्य लाभ यह है कि डेवलपर ऑफ़लाइन मोड में कोड पर काम कर सकता है और केवल परिणाम भेजने के लिए तैयार होने पर बदलावों को सिंक्रनाइज़ कर सकता है।
| विशेषता | स्थानीय | दूरस्थ |
|---|---|---|
| स्थान | डेवलपर के कंप्यूटर पर | सर्वर पर (GitHub, GitLab) |
| नेटवर्क के बिना पहुँच | सभी संचालनों तक पूर्ण पहुँच | कनेक्शन के बिना उपलब्ध नहीं |
| सिंक्रनाइज़ेशन | दूरस्थ के साथ Push/Pull | स्थानीय से push स्वीकार करता है |
| बैकअप | डेटा हानि से सुरक्षित नहीं | बैकअप के साथ सर्वर पर संग्रहीत |
Git का संग्रहण मॉडल अन्य वर्जन कंट्रोल सिस्टम से मौलिक रूप से भिन्न है। संस्करणों के बीच बदलावों (डेल्टा) की सूची संग्रहीत करने के बजाय, Git प्रत्येक कमिट के समय सभी प्रोजेक्ट फ़ाइलों के पूर्ण स्नैपशॉट संग्रहीत करता है।
रिपॉजिटरी में प्रत्येक ऑब्जेक्ट एक अद्वितीय 40-अक्षर SHA-1 हैश द्वारा पहचाना जाता है। यदि फ़ाइल सामग्री कमिट के बीच नहीं बदली है, Git नया ऑब्जेक्ट नहीं बनाता बल्कि मौजूदा का पुनः उपयोग करता है — इससे जगह बचती है।
Git चार प्रकार के ऑब्जेक्ट का उपयोग करता है: blob (फ़ाइल सामग्री), tree (डायरेक्टरी संरचना), commit (मेटाडेटा के साथ स्नैपशॉट) और tag (कमिट का नामित संदर्भ)। सभी ऑब्जेक्ट .git/objects फ़ोल्डर में संग्रहीत होते हैं।
Git Internals के अनुसार, Git का ऑब्जेक्ट मॉडल डेटा अखंडता सुनिश्चित करता है: फ़ाइल सामग्री में कोई भी बदलाव नया हैश उत्पन्न करता है, जिससे इतिहास में बिना पकड़े बदलाव करना असंभव हो जाता है।
.git फ़ोल्डर रिपॉजिटरी का हृदय है। इसके बिना Git बदलावों को ट्रैक नहीं कर सकता, और सामान्य डायरेक्टरी केवल फ़ाइलों का एक संग्रह बनी रहती है। इस फ़ोल्डर की संरचना को समझने से रिपॉजिटरी समस्याओं का निदान करने में मदद मिलती है।
HEAD फ़ाइल विशेष ध्यान देने योग्य है। सामान्य स्थिति में इसमें ब्रांच का प्रतीकात्मक संदर्भ होता है, उदाहरण के लिए ref: refs/heads/main. detached HEAD स्थिति में यह सीधे कमिट को इंगित करता है — इसका मतलब है कि नए कमिट किसी भी ब्रांच से संलग्न नहीं होंगे।
Git रिपॉजिटरी के साथ काम करने में बुनियादी संचालन का एक सेट शामिल है जो डेवलपर प्रतिदिन करता है। प्रत्येक संचालन नए ऑब्जेक्ट जोड़कर या संदर्भों को स्थानांतरित करके रिपॉजिटरी की स्थिति बदलता है।
push और pull संचालन एकमात्र ऐसे हैं जिनके लिए दूरस्थ सर्वर से कनेक्शन आवश्यक है। अन्य सभी संचालन पूरी तरह से स्थानीय रूप से निष्पादित होते हैं, जो बड़े इतिहास मात्रा में भी उच्च गति सुनिश्चित करते हैं।
रिपॉजिटरी में प्रत्येक फ़ाइल चार अवस्थाओं से गुज़रती है: untracked (ट्रैक नहीं की गई), modified (संशोधित), staged (तैयार) और committed (कमिट की गई)। Git केवल उन फ़ाइलों को ट्रैक करता है जिन्हें git add के माध्यम से स्पष्ट रूप से जोड़ा गया है या जो पहले से कमिट इतिहास में हैं।
इस मॉडल को समझना Git के साथ प्रभावी ढंग से काम करने की कुंजी है। डेवलपर चुनिंदा रूप से केवल संशोधित फ़ाइलों के एक भाग को कमिट के लिए तैयार कर सकता है, स्पष्ट विवरण के साथ तार्किक रूप से पूर्ण कमिट बना सकता है।
दूरस्थ रिपॉजिटरी आमतौर पर विशेष प्लेटफ़ॉर्म पर होस्ट की जाती हैं जो वेब इंटरफ़ेस, एक्सेस प्रबंधन प्रणाली और सहयोगी विकास के लिए अतिरिक्त उपकरण प्रदान करते हैं।
प्लेटफ़ॉर्म का चुनाव टीम के आकार, गोपनीयता आवश्यकताओं और आवश्यक एकीकरण पर निर्भर करता है। मोबाइल डेवलपमेंट के लिए अक्सर GitHub को चुना जाता है क्योंकि इसका व्यापक सामुदायिक समर्थन और iOS और Android के लिए CI/CD उपकरणों के साथ एकीकरण है।
एक व्यावहारिक परिदृश्य पर विचार करें: एक डेवलपर मौजूदा रिपॉजिटरी को क्लोन करता है, एक नई ब्रांच बनाता है, बदलाव करता है और उन्हें सर्वर पर भेजता है। प्रत्येक कमांड रिपॉजिटरी के विभिन्न घटकों के साथ काम करने का प्रदर्शन करता है।
# दूरस्थ रिपॉजिटरी को क्लोन करना
git clone https://github.com/user/mobile-app.git
# प्रोजेक्ट डायरेक्टरी में जाना
cd mobile-app
# नई फ़ीचर ब्रांच बनाना और उस पर स्विच करना
git checkout -b feature/auth
# संशोधित फ़ाइलों की स्थिति जाँचना
git status
# सभी बदलावों को स्टेजिंग एरिया में जोड़ना
git add .
# विवरण के साथ कमिट बनाना
git commit -m "Add authentication module"
# दूरस्थ रिपॉजिटरी में बदलाव भेजना
git push origin feature/auth
git status कमांड दैनिक कार्य में सबसे उपयोगी कमांड में से एक है। यह दिखाता है कि कौन सी फ़ाइलें संशोधित हैं, कौन सी कमिट के लिए तैयार हैं और कौन सी Git द्वारा बिल्कुल ट्रैक नहीं की जा रही हैं।
रिपॉजिटरी इतिहास का विश्लेषण करने के लिए git log कमांड का विभिन्न फ़ॉर्मेटिंग फ़्लैग के साथ उपयोग किया जाता है। यह कमिट का कालक्रम, उनके लेखक, तिथियाँ और SHA-1 पहचानकर्ता प्रदर्शित करता है।
# ब्रांच ग्राफ़ विज़ुअलाइज़ेशन के साथ इतिहास देखना
git log --oneline --graph --all
# किसी विशिष्ट कमिट में बदलाव देखना
git show a1b2c3d
# वर्तमान स्थिति की अंतिम कमिट से तुलना करना
git diff HEAD
# किसी विशिष्ट फ़ाइल का इतिहास देखना
git log --follow src/MainActivity.kt
--graph फ़्लैग ब्रांचिंग का ASCII ग्राफ़ प्रदर्शित करता है, जो कई ब्रांच पर सक्रिय कार्य वाली रिपॉजिटरी में विशेष रूप से उपयोगी है। बार-बार रिलीज़ वाले मोबाइल प्रोजेक्ट के लिए, विज़ुअल ग्राफ़ डेवलपमेंट संरचना का तुरंत आकलन करने में मदद करता है।
अक्सर पूछे जाने वाले प्रश्न
रिपॉजिटरी बदलावों के इतिहास के साथ कोड का तकनीकी भंडार है। प्रोजेक्ट एक व्यापक अवधारणा है जिसमें रिपॉजिटरी, कार्य प्रबंधन प्रणाली, दस्तावेज़ीकरण और विकास प्रक्रियाएँ शामिल हैं। एक प्रोजेक्ट में कई रिपॉजिटरी हो सकती हैं।
New बटन पर क्लिक करके GitHub वेब इंटरफ़ेस के माध्यम से एक नई रिपॉजिटरी बनाएँ। नाम, विवरण और एक्सेस स्तर निर्दिष्ट करें। फिर रिपॉजिटरी को स्थानीय मशीन पर क्लोन करें या git remote add origin के माध्यम से मौजूदा स्थानीय रिपॉजिटरी से लिंक करें।
यदि दूरस्थ रिपॉजिटरी सर्वर से हटा दी गई है लेकिन कम से कम एक डेवलपर के पास स्थानीय प्रतिलिपि है, तो रिपॉजिटरी को पुनर्स्थापित किया जा सकता है। बस एक नई दूरस्थ रिपॉजिटरी बनाएँ और पूरे इतिहास के साथ स्थानीय प्रतिलिपि से git push --force निष्पादित करें।
फ़ोर्क आपके खाते पर किसी और की रिपॉजिटरी की प्रतिलिपि है। आपको इतिहास की पूरी प्रतिलिपि मिलती है और आप मूल को प्रभावित किए बिना कोई भी बदलाव कर सकते हैं। फ़ोर्क का उपयोग Pull Request के माध्यम से ओपन-सोर्स प्रोजेक्ट में भाग लेने के लिए किया जाता है।
ऑब्जेक्ट को संपीड़ित करने और अप्राप्य डेटा को हटाने के लिए git gc का उपयोग करें। git filter-branch या git filter-repo के माध्यम से इतिहास से बड़ी फ़ाइलें हटाएँ। बाइनरी फ़ाइलों वाले प्रोजेक्ट के लिए Git LFS (Large File Storage) पर विचार करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।