सबफ़ोल्डर को इंगित करने के लिए git सबमॉड्यूल कैसे बदलें?


103

SubModule ट्यूटोरियल के माध्यम से स्किमिंग करते हुए , मैंने बोटो प्रोजेक्ट से एक सबमॉड्यूल बनाया । फिर, मुझे पता चला कि मुझे वास्तव में इस परियोजना के केवल सबसेट की आवश्यकता है - विशेष रूप से, बोटो फ़ोल्डर।

मैं इस फ़ोल्डर को इंगित करने के लिए अपना सबमॉड्यूल बदलना चाहूंगा। जब मैं .gitmules में देखता हूं, तो मैं देखता हूं

[submodule "backup/src/boto"]
    path = backup/src/boto
    url = https://github.com/boto/boto.git

Https://github.com/boto/boto.git के बजाय मुझे किस URL का उपयोग करना चाहिए ? URL बदलने के बाद, क्या मुझे स्थानीय रूप से बोटो फ़ोल्डर को हटा देना चाहिए और फिर से खींचना चाहिए?


3
यह ठीक नहीं है कि आप क्या चाहते हैं - एक सबमॉड्यूल नहीं - लेकिन आप पर एक नज़र डाल सकते हैंgit subtree
Cascabel

1
मैंने जो किया, वह पूरा सबमॉड्यूल कर रहा है, और इंटेलीजे को बता रहा है कि बोटो फ़ोल्डर एक 'सोर्स फ़ोल्डर' है, इसलिए इसमें पैकेज मिल सकते हैं।
ripper234

15
मैं विश्वास नहीं कर सकता git यह मूल रूप से नहीं करता है ... yikes।
रॉगरडैक

2
इसी तरह का एक प्रश्न मिला - stackoverflow.com/questions/1121227/…
sashoalm

जवाबों:


66

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

यदि आप एक सबमॉड्यूल के रूप में पूरे रिपॉजिटरी के साथ नहीं रह सकते हैं, तो आप हमेशा एक नया रिपॉजिटरी बना सकते हैं जिसे बोटो से क्लोन किया जाता है और फिर एक क्रॉन जॉब सेट किया जाता है:

  1. git fetch एक निर्देशिका में उस भंडार
  2. git filter-branchएक शाखा को अद्यतन करने के लिए उपयोग करें जहां शीर्ष स्तर पर उपनिर्देशिका है।
  3. सबमॉड्यूल के रूप में रिपॉजिटरी की उस शाखा को जोड़ें। हालाँकि, यह सब थोड़ा सा है और मेरी प्राथमिकता सिर्फ एक पूरे उप-संग्रह के रूप में रहने के साथ रहना होगा।

24

आप केवल एक भंडार का एक हिस्सा क्लोन नहीं कर सकते। ऐसा इसलिए है क्योंकि git रिपॉजिटरी को संपूर्ण वस्तु मानता है: जब आप इसे प्राप्त करते हैं, तो आपको यह सब मिल जाता है ।

तो, यहाँ समाधान एक और निर्देशिका में सबमॉडल लाने के लिए होगा, फिर अपने लक्ष्य को प्राप्त करने के लिए एक सिम्लिंक का उपयोग करें।


मुझे विंडोज़ में सहानुभूति है ... अच्छा काम भी करता है। (ऐसा इसलिए है क्योंकि मैं अपनी मशीन पर ln -s
एमएसवाई

7
विस्टा और एमकेलिंक के साथ आते हैं। मैं उस का उपयोग करें। Howtogeek.com/howto/windows-vista/…
एंजेल एस। मोरेनो

1
आप इसके बजाय हार्ड लिंक का उपयोग कर सकते हैं
KindDragon

15

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

उम्मीद है की यह मदद करेगा।


"बैक मर्ज" क्या है? क्या आप एक उदाहरण प्रस्तुत कर सकते हैं?
सुकिमा

एक मर्ज जो "अपस्ट्रीम" जाता है - एक उच्च क्रम शाखा से एक निचले क्रम एक तक। लिनुस उन लोगों से नफरत करता है। वे अन्य शाखाओं से इतिहास में बंधे हैं जो पहले से ही विलय हो चुके हैं।
एडम डाइमिट्रुक

क्या आप इस स्थिति में "बैक मर्ज" के बारे में कुछ उदाहरण जोड़ सकते हैं?
जिओ

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

दिलचस्प विचार, किसी को भी यह कोशिश की है? मैं जल्द ही कोशिश करने जा रहा हूं, लेकिन अभी भी यकीन नहीं है कि "बैक मर्ज" स्पष्ट और स्वचालित हो सकता है ...
मौडरिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.