गिट सबमॉडल हटाने का वर्तमान तरीका क्या है?


91

के रूप में git संस्करण 1.9.3 (Apple git-50) मैक पर मैं git सबमॉड्यूल कैसे निकालूं? मैं कई डेवलपर्स के साथ पुरानी जानकारी का एक बहुत कुछ पढ़ रहा हूं, मुझे बता रहा है कि वे काम नहीं करेंगे। वर्तमान तरीका क्या है? git deinit pathToSubModule चाल चलेगा ?

मैंने सोचा था कि कदम यहाँ काम करेंगे, लेकिन टिप्पणियों का कहना है कि वे अभ्यस्त नहीं हैं।

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

अद्यतन: मैंने पढ़ा है कि निम्नलिखित नवीनतम गिट संस्करण पर सही तरीका है कृपया पुष्टि करें?

To remove a submodule added using:

git submodule add blah@blah.com:repos/blah.git lib/blah
Run:

git rm lib/blah
That's it.

For old versions of git (circa ~1.8.5) use:

git submodule deinit lib/blah
git rm lib/blah
git config -f .gitmodules --remove-section submodule.lib/blah

मैंने दो दिनों के लिए सबमॉडल की समस्याओं का मुकाबला किया है। सफलता तब मिली जब मुझे यह पता चला: forum.developer.apple.com/thread/13102 । मूल रूप से, Xcode, और शायद अन्य ऐप्स, url वाले '~' का विस्तार करने के लिए संघर्ष करते हैं। एक बार मैंने ssh बदल दिया: //username@server.remoteHost.com/~/git/MyRepo.it to ssh: //username@server.remoteHost.com/home/username/git/MRRepo.git (वास्तविक पथ देखें) अपने सर्वर पर), दस मिनट के साथ सभी विचित्रता गायब हो गई।
एलिस वैन लोईज

जवाबों:


193

आपके पास है git submodule deinit

git submodule deinit <asubmodule>    
git rm <asubmodule>
# Note: asubmodule (no trailing slash)
# or, if you want to leave it in your working tree
git rm --cached <asubmodule>
rm -rf .git/modules/<asubmodule>

deinit

दिए गए सबमॉड्यूल्स को अन-रजिस्टर करें, यानी पूरेsubmodule.$name
अनुभाग को .git/configउनके काम के पेड़ से एक साथ हटा दें

फिर से कॉल करें git submodule update, git submodule foreachऔर किसी भी अपंजीकृत सबमॉड्यूल को तब तक छोड़git submodule sync देंगे , जब तक वे फिर से शुरू नहीं हो जाते हैं, इसलिए यदि आप अपने काम के पेड़ में अब सबमॉड्यूल का स्थानीय चेकआउट नहीं चाहते हैं तो इस कमांड का उपयोग करें।

यदि आप वास्तव में रिपॉजिटरी से एक सबमॉड्यूल हटाना चाहते हैं और git rmइसके बजाय इसका उपयोग करना चाहते हैं।

यदि --forceनिर्दिष्ट किया जाता है, तो सबमॉड्यूल का कार्य पेड़ हटा दिया जाएगा, भले ही उसमें स्थानीय संशोधन हों।


8
मैं पूरी तरह से मेरे लिए और साथ ही अन्य उपयोगकर्ताओं के लिए सबमॉड्यूल मिटा देना चाहता हूं। तो सब मुझे जरूरत है सबमॉड्यूल deinit asubmodule; और गिट आरएम asubmodule ?? इसके अलावा क्या अन्य उपयोगकर्ताओं ने सबमॉड्यूल को कैश किया, क्या उन्हें नीचे खींचने के बाद इसे हटाना होगा?
j2emanue

1
मैं सबमॉड्यूल की लोकल कॉपी को डिलीट करना चाहता था और यह एकदम सही था, सबडिडर की सभी फाइलें चली गई हैं।
मल्हल

1
तुम भी आवश्यकता हो सकती है rm -rf <asubmodule>अगर आप पहले से आधार भंडार जो submodule अ-पंजीकृत है के एक संस्करण की जाँच की है।
सारा संदेशवाहक

6

मैं २.१६.२ संस्करण का उपयोग कर रहा हूं और git rmयह काम ज्यादातर अच्छी तरह करता है:

git rm path-to-submodule

आप इसके साथ सत्यापित कर सकते हैं git statusऔर git diff --cachedयह सबमॉड्यूले को विचलित करता है और .gitmodulesस्वचालित रूप से संशोधित करता है । हमेशा की तरह, आपको बदलाव करने की जरूरत है।

हालाँकि, भले ही सबमॉड्यूल को स्रोत नियंत्रण से हटा दिया गया हो, फिर .git/modules/path-to-submoduleभी इसमें सबमॉड्यूल रिपॉजिटरी होती है और .git/configइसका URL समाहित होता है, इसलिए आपको अभी भी इसे मैन्युअल रूप से निकालना होगा:

git config --remove-section submodule.path-to-submodule
rm -rf .git/modules/path-to-submodule

सबमॉड्यूल रिपॉजिटरी और कॉन्फ़िगरेशन को जानबूझकर रखना ताकि आप उदाहरण के साथ हटाने को पूर्ववत कर सकें git reset --hard


1
सबसे हाल ही में जवाब और सबसे छोटा समाधान
TurboGuma

3

एक सबमॉड्यूल को सुरक्षित रूप से कैसे हटाएं।

( https://stackoverflow.com/a/1260982/342794 पर जोड़ता है )

  1. .gitmodulesफ़ाइल में सबमॉड्यूल अनुभाग की सूची बनाएं और उसका पता लगाएं । टर्मिनल के माध्यम से कहें vi .gitmodules। उदाहरण:

    [submodule "submodules/afnetworking"]
        path = submodules/afnetworking
        url = https://github.com/CompanyName/afnetworking.git
    
  2. सबमोड्यूल्स का उपयोग स्थानीय कांटे के साथ किया जा सकता है। लंबी चलने वाली परियोजनाओं के लिए, कोड मूल रेपो से भिन्न हो सकता है और इसमें कुछ सुधार हो सकते हैं। यह सत्यापित करना अच्छा है कि यदि सबमॉडल कोड परियोजना के दौरान परिवर्तनों से गुजरा हो। उदाहरण: लॉग को देखें, यदि यह masterशाखा या किसी स्थानीय शाखा की ओर इशारा करता है । टर्मिनल के माध्यम से किए गए संशोधनों को खोजने के लिए गिट लॉग की खोज करना। आम तौर पर ये एक निर्देशिका, मेरे उदाहरण, निर्देशिका के अंतर्गत संग्रहीत किए जाते हैं submodules

    User$ cd submodules/afnetworking
    User$ git log
    
  3. .Itmodules से सबमॉड्यूल अनुभाग निकालें, फ़ाइल को सहेजें। उदाहरण: git statusकेवल संशोधित के रूप में निम्नलिखित दिखाना चाहिए

    modified:   .gitmodules
    
  4. के साथ परिवर्तनों को स्टेज करें git add .gitmodules

  5. .git/configफ़ाइलों में सबमॉड्यूल अनुभाग की सूची बनाएं और उसका पता लगाएं । टर्मिनल के माध्यम से कहें vi .git/config। उदाहरण:

    [submodule "submodules/afnetworking"]
        url = https://github.com/CompanyName/afnetworking.git
    
  6. Git cache sobmodule फाइलें निकालें। रनिंग git rm --cached submodules/afnetworking(कोई अनुगामी स्लैश) इसे सफलतापूर्वक हटा देगा। उदाहरण:

    User$ git rm --cached submodules/afnetworking
    rm 'submodules/afnetworking'    <-- terminal output
    
  7. के .gitसाथ निर्देशिका के तहत सबमॉड्यूल फ़ाइलों को निकालें rm -rf .git/modules/...git statusबाद में इसकी पुष्टि करें ।

    User$ rm -rf .git/modules/submodules/afnetworking/
    User$ git status
    On branch feature/replace-afnetworking-submodule-with-pod
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
        modified:   .gitmodules
        deleted:    submodules/afnetworking
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        submodules/afnetworking/
    
  8. परिवर्तन करें। git statusबाद में पुष्टि करें ।

    User$ git commit -m "Remove submodule afnetworking"
    [feature/replace-afnetworking-submodule-with-pod 70e239222] Remove submodule afnetworking
    2 files changed, 4 deletions(-)
      delete mode 160000 submodules/afnetworking
    User$ git status
    On branch feature/replace-afnetworking-submodule-with-pod
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        submodules/afnetworking/
    nothing added to commit but untracked files present (use "git add" to track)
    
  9. हटाए गए सबमॉड्यूल फ़ाइलों को हटाएँ।

    User$ rm -rf submodules/afnetworking
    
  10. Xcode प्रोजेक्ट से संदर्भ हटाएं। निर्माण, संकलन और रनटाइम मुद्दों को ठीक करें।

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