एक सबमॉड्यूल (नेस्टेड सबमॉड्यूल्स) के अंदर सबमॉड्यूल


137

क्या एक गिट सबमॉडल के लिए कई अन्य गिट सबमॉडल्स से बना होना संभव है, और प्रत्येक सबमॉड्यूल के लिए सामग्री लाने के लिए सुपर गिट रेपो?

मैंने कई सबमॉडल्स धारण करने वाले गिट रेपो बनाने के स्पष्ट / भोले दृष्टिकोण का उपयोग करके ऐसा करने की कोशिश की है।

फिर इस git रेपो को दूसरे git रेपो में सबमॉडल के रूप में जोड़ते हैं।

फिर सुपर गिट रेपो के मूल निर्देशिका से git submodule initऔर फिर खींचने का प्रयास git submodule update। लेकिन यह उप-सबमॉड्यूल लाने में विफल रहता है।


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

जवाबों:


211

जैसा कि रिट्रोस्पेक्टिवली में उल्लेख किया गया है - एक git रेपो के लिए संक्षिप्त

git submodule update --init --recursive

कार्य करना चाहिए।


13
इसने मेरे लिए काम किया। ध्यान दें कि मैंने गलती से सोचा था कि git submodule init; git submodule update --recursiveउपरोक्त का पर्याय था, लेकिन ऐसा नहीं है।
jsdalton

+1 मुझे यह बहुत पसंद है कि मैं क्या उपयोग कर रहा था: git सबमॉड्यूल foreach git सबमॉड्यूल init ... उसके बाद git सबमॉड्यूल अपडेट --recursive
जोसेफ

दुर्भाग्य से यह मेरे लिए काम नहीं किया। कोई इरोस नहीं, कोई संदेश नहीं, कुछ भी नहीं।
लुइस डी सूसा

हालांकि आप थ्रेड्स को पूरी तरह से नेस्टेड रेपो कैसे अपडेट करते हैं? जब मैं --initझंडे में गुजरता हूं , तो मेरे सबमॉडल्स में से एक के भीतर मौजूद सबमॉड्यूल्स, बस पुराने वर्जन के लिए इनिशियलाइज़ हो जाते हैं, सबसे करंट वाले नहीं।
योआकीम

मैं करता हूं git submodule foreach git pull origin master, और यह आंशिक रूप से काम करता है: सबमॉड्यूल्स अपडेट किए जाते हैं, लेकिन कभी-कभी HEADअलग हो जाते हैं और सबमॉड्यूल्स के भीतर सबमॉड्यूल्स के लिए, मैं अपने डायरेक्ट सबमॉड्यूल के बदलावों को नहीं कर सकता, क्योंकि इसमें "संशोधित सामग्री" नहीं है "नए कमिट्स (क्योंकि इसके अपने सबमॉडुल्स हैं) "नए कमिट" और अपडेट किए गए हैं)।
योकेमिम

55

नीचे Git1.6.5 + से श्रीधर टिप्पणी के रूप में , git clone --recursiveअब आधिकारिक विकल्प है:

inamiy कमांड को सही ढंग से इंगित करता है git submodule update --init --recursive, प्रतिबद्ध b13fd5c में पेश किया , फिर से git1.6.5 में, जोहान हेरलैंड ( jherland) द्वारा

और IceFire टिप्पणियों में जोड़ता है :

यदि आप एक सबमॉड्यूल के केवल एक सबमॉड्यूल की जांच करना चाहते हैं, तो
git submodule update --init <submoduleName>जाने का रास्ता है।


(पुराना मूल उत्तर)

मैनुअल पेज के अनुसार

 git submodule update --recursive

किसी भी नेस्टेड सबमॉडल्स को अपडेट करना चाहिए। लेकिन इनिट भाग पुनरावर्ती नहीं हो सकता है।

Git के आपके संस्करण के आधार पर, आप अधिक "स्क्रिप्टिंग" दृष्टिकोण पर वापस आ सकते हैं, इस लेख के साथ पुनरावर्ती अद्यतन Git सबमॉड्यूल्स जो पुनरावर्ती init और अद्यतन के लिए अनुमति देता है:

#!/usr/bin/perl

use strict;
use Cwd;

init_and_update();

exit;

sub init_and_update
{
    my $start_path = cwd();

    my %paths;
    my $updated;

    do
    {
        my $data = `find . -name '.gitmodules'`;
        chomp($data);

        $data =~ s/\/\.gitmodules//g;

        foreach my $path (split(/\n/, $data))
        {
            $paths{$path} = '' if($paths{$path} eq '');
        }

        $updated = 0;

        foreach my $path (sort keys %paths)
        {
            if($paths{$path} eq '')
            {
                chdir($path);
                `git submodule init 2>&1`;
                `git submodule update 2>&1`;
                chdir($start_path);

                if($ARGV[0] eq '--remove-gitmodules')
                {
                    unlink("$path/.gitmodules");
                }

                $paths{$path} = 1;

                $updated++;
            }
        }
    } while($updated);
}

1
git clone --recursiveपर्याप्त नहीं है ?
श्रीधर रत्नाकुमार

@ श्रीधर: यह क्लोनिंग के लिए है, जैसा कि G1.1.6.5 से और बाद में stackoverflow.com/questions/3796927/git-clone-submodule और stackoverflow.com/questions/4251940/…… में बताया गया है। मैंने अपना उत्तर संपादित कर दिया है।
VonC

नोट: यदि आप एक सबमॉड्यूल के केवल एक सबमॉड्यूल की जांच करना चाहते हैं, तो git submodule update --init <submoduleName>जाने का रास्ता है; इस उत्तर की खोज करते हुए मैं यहाँ आया
IceFire

1
@IceFire धन्यवाद। अधिक दृश्यता के उत्तर में मैंने आपकी टिप्पणी शामिल की है।
VonC
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.