একটি সাবমোডিয়ুলের ভিতরে গিট সাবমডিউল (নেস্টেড সাবমডিউল)


137

গিট সাবমোডুলের পক্ষে কি আরও বেশ কয়েকটি গিট সাবমোডিয়াল তৈরি করা সম্ভব হয় এবং সুপার গিট রেপো প্রতিটি সাবমোডিয়ুলের জন্য সামগ্রী আনতে পারে?

আমি বেশ কয়েকটি সাবমডিউল ধারণ করে একটি গিট রেপো তৈরির স্পষ্ট / নিষ্পাপ পদ্ধতির সাহায্যে এটি করার চেষ্টা করেছি।

তারপরে এই গিট রেপোকে অন্য গিট রেপোতে সাবমোডুল হিসাবে যুক্ত করুন।

তারপর দ্বারা সুপার Git রেপো রুট ডিরেক্টরিটি থেকে টান প্রয়াস git submodule initএবং তারপর git submodule update। তবে এটি সাব-সাবমডিউলগুলি আনতে ব্যর্থ।


আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি টার্টোজাইজিট ব্যবহার করুন - এটি আপনার মূলের মধ্যে ব্যবহার করুন এবং তারপরে এটি ইনিশিয়েল, রিকার্সিভ, ফোর্স চেক সহ সমস্ত সাবমোডিয়ুল আপডেট করতে বলুন!
serup

উত্তর:


211

যেমন পূর্ববর্তী ক্ষেত্রে উল্লিখিত হয়েছে গিট রেপোতে --recursive যুক্ত করুন

git submodule update --init --recursive

কাজ করা উচিত.


13
এটি আমার পক্ষে কাজ করেছে। নোট করুন যে আমি ভ্রান্তভাবে ভেবেছিলাম যে git submodule init; git submodule update --recursiveউপরেরটির সমার্থক, তবে তা নয়।
jsdalton

+1 আমি যা ব্যবহার করছিলাম তার থেকে আমি এটি আরও ভাল পছন্দ করি: git submodule foreach git submodule init ... তারপরে git submodule update --recursive
জোসেফ DeCarlo

দুর্ভাগ্যক্রমে এটি আমার পক্ষে কার্যকর হয়নি। কোনও এরোস নেই, কোনও বার্তা নেই, কিছুই নেই।
Luís de Sousa

আপনি কীভাবে সম্পূর্ণরূপে নেস্টেড রেপো আপডেট করবেন? আমি যখন --initপতাকাটিতে পাস করি তখন আমার সাবমোডিয়ুলগুলির মধ্যে একটির মধ্যে সাবমডিউলগুলি সর্বাধিক বর্তমানগুলি নয়, কেবল পুরানো সংস্করণে সূচনা হবে।
ইয়াওকুইম

আমি করি git submodule foreach git pull origin master, এবং এটি আংশিকভাবে কাজ করে: সাবমডিউলগুলি আপডেট হয়, তবে কখনও কখনও HEADবিচ্ছিন্ন হয়ে যায় এবং সাবমোডিয়ুলের মধ্যে সাবমডিউলগুলির জন্য, আমি আমার সরাসরি সাবমডিউলের পরিবর্তনগুলি সম্পাদন করতে পারি না কারণ এতে "পরিবর্তিত সামগ্রী রয়েছে" "নতুন কমিটস" নয় (যেহেতু নিজস্ব সাবমোডিয়ুলগুলি রয়েছে "নতুন কমিট" এবং আপডেট করা হয়)।
ইয়াওকুইম

55

শ্রীধর নীচে মন্তব্য হিসাবে , গিট ১..5.৫ + থেকে git clone --recursiveএখন সরকারী বিকল্প হিসাবে বর্ণিত:

inamiy সঠিকভাবে তুলে ধরেgit submodule update --init --recursive কমান্ড চালু b13fd5c কমিট , git1.6.5 মধ্যে আবার দ্বারা জোহান Herland ( jherland)

আর IceFire যোগ মন্তব্য :

আপনি যদি কোনও সাবমডিউলের কেবলমাত্র একটি সাবমডিউল চেকআউট করতে চান, তবে
git submodule update --init <submoduleName>যাওয়ার উপায়।


(পুরানো মূল উত্তর)

মতে ম্যানুয়েল পৃষ্ঠা

 git submodule update --recursive

কোনও নেস্টেড সাবমডিউলগুলি আপডেট করা উচিত। তবে 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যথেষ্ট না ?
শ্রীধর রত্নকুমার

@Sridhar: এটা ক্লোনিং, যেমন উল্লেখ জন্য, হয় stackoverflow.com/questions/3796927/git-clone-submodule এবং stackoverflow.com/questions/4251940/... , Git1.6.5 থেকে এবং পরে। আমি প্রতিফলিত করতে আমার উত্তর সম্পাদনা করেছি।
ভোনসি

দ্রষ্টব্য: আপনি যদি কোনও সাবমডিউলের কেবলমাত্র একটি সাবমডিউল চেকআউট করতে চান, তবে git submodule update --init <submoduleName>যাওয়ার উপায়; এই উত্তরটি অনুসন্ধান করতে গিয়ে আমি এখানে এসেছি
আইসফায়ার

1
@ আইসফায়ার আপনাকে ধন্যবাদ আরও দৃশ্যমানতার জন্য আমি আপনার মন্তব্যে উত্তরে অন্তর্ভুক্ত করেছি।
ভোনসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.