git submodule
تضمين مستودعات أخرى داخل مستودعك
يدمج الأمر 'git submodule' مستودع Git آخر في أحد مجلداتك، مثبّتًا على commit محدّد. لا يسجّل مستودعك إلا أي commit من الوحدة الفرعية يُستخدم؛ وتحتفظ الوحدة الفرعية بسجلها الخاص. هكذا تضمّن المشاريع مكتبات مشتركة لا تريد نسخها. يحتاج الاستنساخ إلى --recurse-submodules (أو git submodule update --init) لجلبها.
الصيغة
git submodule add <url> [<path>]
git submodule update --init --recursive
git submodule status
git submodule foreach <command>أمثلة
إضافة مكتبة
git submodule add https://github.com/acme/ui.git lib/uiيستنسخها ويسجّل commitها.
بعد الاستنساخ
git submodule update --init --recursiveجلب كل وحدة فرعية.
الاستنساخ معها
git clone --recurse-submodules <url>كل شيء في خطوة واحدة.
التحديث إلى الأحدث
git submodule update --remoteنقل كل وحدة فرعية إلى أحدث commit في فرعها.
أمثلة على سير العمل
cd lib/ui && git pullتقديم الوحدة الفرعية
cd ../.. && git add lib/uiتسجيل الـ commit الجديد
git commit -m "Update ui library"سجّله
حل المشكلات
مجلد وحدة فرعية فارغ
السبب: لم تُجلب الوحدات الفرعية
git submodule update --init --recursive
نصائح وأخطاء شائعة
أفضل الممارسات
- ✓اضبط git config --global submodule.recurse true كي يحدّث pull وcheckout الوحدات الفرعية.
أخطاء متكررة
- ✗الاستنساخ دون --recurse-submodules والحصول على مجلدات فارغة.
- ✗التسجيل داخل وحدة فرعية على HEAD منفصل وضياع العمل.
- ✗نسيان تسجيل commit الوحدة الفرعية الجديد في المستودع الأب.
الأسئلة الشائعة
عنوان الوحدة الفرعية فقط (في .gitmodules) والـ commit المحدّد الذي تستخدمه.