وحدة Git الفرعية داخل وحدة فرعية (وحدات فرعية متداخلة)

StackOverflow https://stackoverflow.com/questions/1535524

  •  20-09-2019
  •  | 
  •  

سؤال

هل من الممكن أن يتم إنشاء وحدة git الفرعية من عدة وحدات فرعية أخرى، وأن يقوم Super git repo بجلب محتويات كل وحدة فرعية؟

لقد حاولت القيام بذلك باستخدام النهج الواضح/الساذج لإنشاء git repo الذي يحتوي على عدة وحدات فرعية.

ثم قم بإضافة git repo هذا إلى git repo آخر كوحدة فرعية.

ثم حاول السحب من الدليل الجذر لـ super git repo بواسطة git submodule init وثم git submodule update.لكن هذا فشل في جلب الوحدات الفرعية.

هل كانت مفيدة؟

المحلول

كما ذكر في أضف بأثر رجعي --recursive إلى git repo

git submodule update --init --recursive

يجب أن تعمل.

نصائح أخرى

مثل سريدهار التعليقات أدناه، من Git1.6.5+، git clone --recursive هو الآن البديل الرسمي، الموصوف في:

com.inamiy بشكل صحيح يشير الى ال git submodule update --init --recursive الأمر، قدم في ارتكاب b13fd5c, ، مرة أخرى في git1.6.5، بواسطة يوهان هيرلاند (jherland).

و النار الجليد يضيف في التعليقات:

إذا كنت ترغب في الخروج من وحدة فرعية واحدة فقط من وحدة فرعية، إذن
git submodule update --init <submoduleName> هو الطريق للذهاب.


(الإجابة الأصلية الأقدم)

بحسب ال صفحة يدوية

 git submodule update --recursive

يجب تحديث أي وحدات فرعية متداخلة.لكن الجزء init قد لا يكون متكررًا.

اعتمادًا على إصدار Git الخاص بك، يمكنك الرجوع إلى نهج "البرمجة النصية" بشكل أكبر، من خلال هذه المقالة التحديث المتكرر للوحدات الفرعية لـ Git والذي يسمح بالبدء والتحديث العودي:

#!/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);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top