2014-10-20 14 views
6

युक्त गिट रेपो को बनाए रखना मैं Sharelatex(github) का उपयोग कर वेबसाइट पर काम कर रहा हूं लेकिन इसमें अन्य रिपॉजिटरीज हैं जिनका उपयोग मुख्य प्रोजेक्ट बनाने के लिए किया जाता है। मैंने मुख्य भंडार क्लोन किया और grunt install किया जो कि उन भंडारों को डाउनलोड करने के लिए उपयोग किया जाता है।अन्य क्लोन गिट रेपो

लेकिन समस्या यह है कि मुझे कोड को मुख्य भंडार और डाउनलोड किए गए दोनों में बदलने की जरूरत है।

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

मैं गिट में submodules पर आया लेकिन चूंकि मुख्य प्रोजेक्ट में कोई सबमिशन प्रकार नहीं है, इसलिए मैं इसका उपयोग करने में असमर्थ हूं।

उदाहरण के लिए:

वहाँ एक रेपो web मुख्य परियोजना में इस्तेमाल होता है। मैं web में फ़ाइलों में कुछ संपादन के साथ शुरू करता हूं। मुझे अपने रिमोट रिपोजिटरी में प्रतिबिंबित करने के लिए इन परिवर्तनों की आवश्यकता है ताकि अन्य उनका उपयोग कर सकें।

अब मान लें कि web रेपो के लिए एक महत्वपूर्ण अपडेट उपलब्ध है, मुझे इसका उपयोग कैसे करना चाहिए?

मैं इस रेपो को डाउनलोड करने के लिए कमांड लाइन में grunt install दर्ज करता हूं। यह एक सबमिशन नहीं बनाता है लेकिन क्लोन जो मेरे फ़ोल्डर में दोहराता है, जिसे बाद में मेरे मुख्य गिट रेपो द्वारा अनदेखा किया जाता है।

प्रश्न अस्पष्ट प्रतीत हो सकता है लेकिन मैंने समस्या की व्याख्या करने के लिए अपनी पूरी कोशिश की।

नट खोल में:

  • मैं न केवल दोनों मुख्य और किसी भी अन्य रेपो कि शामिल है में परिवर्तन करने के लिए, लेकिन खींच सकते हैं और उन अन्य रेपोस विलय, साथ ही, जब उनके अद्यतन उपलब्ध नहीं है चाहता हूँ ।

  • मुझे अपनी परियोजना के रिमोट रेपो को भी बनाए रखने की आवश्यकता है।

उत्तर

6

मैं Sharelatex (GitHub) का उपयोग कर एक वेबसाइट पर काम कर रहा हूँ, लेकिन यह अन्य रिपोजिटरी कि मुख्य परियोजना के निर्माण के लिए उपयोग किया जाता है। [...] मैं गिट में सबोड्यूल्यूल में आया लेकिन चूंकि मुख्य प्रोजेक्ट में कोई सबमिशन प्रकार नहीं है, इसलिए मैं इसका उपयोग करने में असमर्थ हूं।

वास्तव में, आपके पास एक सबमिशन है। यही एक घोंसला भंडार है, और (मैं इसके बारे में गंभीर हूं) जहां तक ​​आपको ग्रोक सबोड्यूल को समझने की आवश्यकता है, सभी में सबोड्यूल्यूज़ हैं। Submodules को समझने के लिए, कल्पना करें कि आपके पास एक नेस्टेड रिपोजिटरी है (आप करते हैं) और प्रशासनिक आवश्यकताओं के बारे में सोचें, डीवीसी में उस सेटअप का समर्थन करने के लिए क्या करने की आवश्यकता है।

शुरुआत करने वालों के लिए, जब लोग किसी प्रोजेक्ट को क्लोन करते हैं जो कुछ रेपो से सबमिड्यूल का उपयोग करता है, तो आपने सभी ने तय किया है कि प्रकाशित काम करता है, क्लोन को स्पष्ट रूप से सबप्रोजेक्ट रिपोजिटरी भी नहीं मिलेगी (निश्चित रूप से इसे आपके निजी और ईश्वर- जानता है कि आपने क्या किया-संस्करण-संस्करण किया है)। इसलिए उन्हें अपने स्वयं के प्रकाशित भंडारों में से किसी एक से सबप्रोजेक्ट रेपो भी प्राप्त करना होगा।

आप लोगों को अपने कामों को लाने के लिए कहां बताते हैं कि आवश्यक सबप्रोजेक्ट कहां प्राप्त करें?निश्चित रूप से, आपको किसी प्रतिबद्ध फ़ाइल में कहीं भी एक नोट छोड़ना है, "यहां एक रेपो है जिसके पास कोई आवश्यक $ सबप्रोजेक्ट काम करना चाहिए"। git submodule इस तरह के नोट्स स्टोर करने के लिए पारंपरिक स्थान के रूप में .gitmodules पर बस गया है।

अगला: ठीक है, अगर आप उन्हें भेजे गए यूआरएल को ऑफ़लाइन करते हैं तो दूसरों को क्या करना है? वे स्पष्ट रूप से एक और रेपो का उपयोग करने की आवश्यकता होगी। इसलिए, .gitmodules केवल सुझाव है, git submodule कमांड आपके .git/config में वर्तमान मानों का उपयोग करता है, जो git submodule init ने .gitmodules` में सुझाए गए लोगों से पॉप्युलेट किया है।

git submodule के ऑपरेशन सभी इस तरह हैं। इसके बारे में भूल जाओ। जब तक आपको पहले से ही जो कुछ मिल रहा है उसे करने में थोड़ी सी सहायता की आवश्यकता न हो, तब तक कमांड को देखने की भी परेशानी न करें। ज्ञान से शुरू करें, सरल तथ्य यह है कि एक सबमिशन एक नेस्टेड रेपो से ज्यादा कुछ नहीं है, और इसका उपयोग करने वाली परियोजना उस प्रतिबद्ध आईडी से कहीं ज्यादा कुछ नहीं करती है जो कि उस नेस्टेड रेपो में कहीं भी होने वाली है। बस। यह सब एक सबमिशन है।

जैसे ही आप काम करने की ज़रूरत वाले कठिन कार्यों में भाग लेते हैं, git submodule उप-आदेश देखें जो उन्हें आपके लिए करता है। आपको उप-आदेश का उपयोग करने की आवश्यकता नहीं है। वह सब सबमांडेंड सरल कार्य स्वचालित कर रहा है जो अन्यथा श्रमिक होगा। यह करने के लिए आपको जो कुछ भी करने की ज़रूरत है, वह करने के लिए यह टूलकिट है, और पृथ्वी पर कोई रास्ता नहीं है या यह कुछ मनमानी और पर्याप्त (< - यह कठिन हिस्सा है) को दुनिया में हर किसी पर अबास्ट्रक्शन लगा सकता है या लागू करना चाहिए। तो यह एक हथियार बैग है।

उस ने कहा, एक महत्वपूर्ण सुरक्षा खेल git submodule update और git submodule add आपके लिए git clone करते समय आपके लिए प्रदर्शन करता है। रिपोजिटरीज में पारंपरिक रूप से [उप] प्रोजेक्ट के तहत वास्तविक रेपो सामग्री .git को अपनाने के लिए होती है, लेकिन यदि आप ऐसी शाखा की जांच करते हैं जिसमें उस सबप्रोजेक्ट नहीं है या अन्यथा आवश्यकता है या उस सबप्रोजेक्ट की आवश्यकता है, तो इसके .git भी चले जाएंगे - नहीं आप चाहते हैं कि यह न केवल आपकी चेक आउट सामग्री बल्कि पूरे वास्तविक रेपो को न रखे। तो जब git submodule update इसका प्रारंभिक क्लोन करता है, तो यह प्रोजेक्ट के .git निर्देशिका को प्रोजेक्ट के रेपो में एक आसान (और मनमाने ढंग से) छोटे नुक्कड़ में उछालता है, और .git निर्देशिका को प्रतिस्थापित करता है, यह .git फ़ाइल के साथ संबंधित स्रोत से बस बाहर निकलता है स्थानांतरित निर्देशिका।

आपके पास वर्तमान में रेपो पर किए गए प्रारंभिक उत्थान को प्राप्त करने के लिए, इसे अपने वर्तमान रेपो से बाहर ले जाएं, जहां भी आप इसे डालते हैं वहां से जोड़ें और अपडेट करें, और फिर दूसरों की सुविधा के लिए .gitmodules में अपस्ट्रीम यूआरएल को ठीक करें।

वहां। अब आप गिट सबमिड्यूल को समझने के लिए आपको जो कुछ भी जानने की जरूरत है उसे जानते हैं और git submodule कमांड आपके लिए क्या कर रहा है, और यह समझने के लिए कि आपको वास्तव में प्रत्येक छोटे को समझने की परवाह क्यों नहीं है, आपको समझने के लिए केवल वही जानकारी प्राप्त होती है, इसके मैनपेज पर आगे की बात। कम से कम मुझे तो यही लगता है।

यदि मुझे कुछ भी महत्वपूर्ण याद आया है, तो मुझे टिप्पणियों में सुधार (सौम्य या बदमाश, मुझे वास्तव में परवाह नहीं है) में बहुत खुशी होगी।

संबंधित मुद्दे