Git Submodule
آخر تحديث
تُضمّن الوحدة الفرعية مستودع Git داخل مستودع آخر، مثبتة على commit محدد. يسجّل المستودع الأصل أي commit للوحدة الفرعية يعتمد عليه، بحيث يحصل الجميع على النسخة نفسها. إنها الطريقة التي تضمّن بها مكتبة أو مكوّنًا مشتركًا يعيش في مستودعه الخاص دون نسخ شيفرته.
جرّب هذه الأوامر في ساحة الطرفية - صدفة حقيقية في متصفحك، لا شيء لتثبيته.
الصيغة
| Command | What it does |
|---|---|
git submodule add <url> libs/x | إضافة مستودع كوحدة فرعية في libs/x |
git clone --recurse-submodules <url> | استنساخ مستودع ووحداته الفرعية |
git submodule update --init --recursive | تهيئة وجلب الوحدات الفرعية بعد استنساخ عادي |
git submodule update --remote | تحديث الوحدات الفرعية إلى أحدث commit لها |
git submodule status | عرض commit كل وحدة فرعية |
الحالات الشائعة
| Goal | Command |
|---|---|
| استنساخ مشروع يستخدم وحدات فرعية | git clone --recurse-submodules <url> |
| جلب الوحدات الفرعية بعد الاستنساخ | git submodule update --init --recursive |
| ترقية وحدة فرعية إلى أحدث نسخة | git submodule update --remote |
الأسئلة الشائعة حول git submodule
ما هي git submodule؟
الوحدة الفرعية هي مستودع Git مُضمَّن داخل مستودع Git آخر عند commit ثابت. يخزّن المستودع الأصل مؤشرًا إلى ذلك الـ commit بالتحديد بدلًا من ملفات الوحدة الفرعية، بحيث يستخرج المتعاونون النسخة نفسها. تُستخدم لتضمين تبعية أو مكوّن مشترك له مستودعه وسِجلّه الخاص.
كيف أستنسخ مستودعًا يحتوي على وحدات فرعية؟
استخدم
git clone --recurse-submodules <url> لاستنساخ المستودع الأصل وجميع وحداته الفرعية في خطوة واحدة. إذا استنسخت بالفعل بدون تلك الراية، فشغّل بعد ذلك git submodule update --init --recursive لملء مجلدات الوحدات الفرعية.كيف أحدّث وحدة فرعية إلى أحدث commit؟
شغّل
git submodule update --remote، الذي يجلب الفرع المتتبَّع لكل وحدة فرعية وينقلها إلى أحدث commit. ثم أودِع التغيير في المستودع الأصل، لأن الأصل يسجّل إلى أي commit للوحدة الفرعية يشير - لا يُحفظ التحديث حتى تُودِع ذلك المؤشر.لماذا مجلد الوحدة الفرعية فارغ بعد الاستنساخ؟
لأنك استنسخت بدون
--recurse-submodules، لذا أنشأ Git المجلدات لكنه لم يجلب محتواها. أصلح ذلك بـ git submodule update --init --recursive، الذي يهيّئ كل وحدة فرعية ويُنزّلها.هل يمكنني التدرّب على هذا عبر الإنترنت؟
نعم. افتح ساحة الطرفية لتشغيل
git submodule في صدفة حقيقية في متصفحك - لا شيء لتثبيته. كما يغطي مساق Git التفاعلي المجاني من Coddy إعداد المستودع خطوة بخطوة.