انتقل إلى المحتوى

Partial clone

لتنزيل repository ضخم من ليڤانت غيت (LevantGit) دون جلب كامل تاريخه، أضف خيار --filter إلى أمر git clone — وهذا ما يسمى partial clone. يجلب Git عندها ما تحتاج إليه الآن فقط، ويؤجّل الكائنات القديمة الكبيرة إلى لحظة طلبها، تلقائيًّا وبلا خطوة إضافية منك.

ما المشكلة التي يحلّها؟

الـ clone الكامل ينزّل كل شيء: كل commit في الـ log، وكل نسخة قديمة من كل ملف. في repository كبير أو على اتصال بطيء أو محدود قد يعني ذلك مئات الميغابايتات لا تحتاج إليها. خيار --filter يستثني الكائنات الكبيرة (مثل محتويات الملفات القديمة) من التنزيل الأول، ويجلبها Git لاحقًا عند الحاجة فقط، تلقائيًّا.

ما تحتاج إليه

إصدار Git لديك يجب أن يكون 2.22 أو أحدث. تحقق:

git --version

الـ partial clone مفعّل افتراضيًّا في Gitea الذي يعمل عليه ليڤانت غيت. وإن لم يدعم الخادم الفلتر لأي سبب فلن ينكسر شيء: يطبع Git تحذيرًا وينفّذ clone كاملًا عاديًّا.

Blobless clone

الشكل الأكثر فائدة عمليًّا:

git clone --filter=blob:none https://levantgit.com/{owner}/{repo}.git

ينزّل هذا كل الـ commits وبنية المجلدات، لكن دون محتويات الملفات (blobs) إلا لأحدث commit — ما يلزم لملء الـ working directory. يبقى الـ log كاملًا: git log يعمل فورًا، وعندما تنفّذ أمرًا يحتاج محتوى قديمًا (مثل git checkout لـ branch قديم أو git diff بين إصدارين بعيدين) يجلب Git الناقص من الخادم في حينه.

Treeless clone

أشد اختصارًا:

git clone --filter=tree:0 https://levantgit.com/{owner}/{repo}.git

ينزّل الـ commits فقط، دون بنية المجلدات ودون محتويات الملفات للتاريخ القديم. الحجم الأولي أصغر ما يمكن، لكن أوامر كثيرة (حتى git log -- path أحيانًا) ستضطر إلى الجلب من الخادم. مناسب لبيئات الـ CI/CD التي تبني أحدث commit مرة واحدة ثم تُرمى؛ غير مريح للعمل اليومي.

وماذا عن --depth؟

الـ shallow clone خيار آخر قد تعرفه:

git clone --depth=1 https://levantgit.com/{owner}/{repo}.git

الفرق: --depth يقطع التاريخ نفسه — لا ترى إلا آخر commit، وgit log شبه فارغ، وبعض العمليات (الـ push، والـ fetch اللاحق) تتصرف بغرابة. أما الـ partial clone فيبقي التاريخ كاملًا ويؤجل تنزيل المحتويات فقط. للعمل اليومي على repository كبير، --filter=blob:none عادة الخيار الأفضل.

ملاحظة

الـ repository الناقص يظل بحاجة إلى الاتصال بالخادم عندما يلزم كائن ناقص. إن كنت ستعمل دون إنترنت طويلًا فالـ clone الكامل أضمن.

نصيحة

يمكن لاحقًا تحويل الـ partial clone إلى clone كامل بإزالة الفلتر من إعداد الـ remote ثم تنفيذ fetch؛ الخطوات مشروحة في وثائق GitLab المذكورة أدناه.

قراءات إضافية

ماذا بعد؟


هذه الصفحة مبنية على وثائق Gitea (رخصة MIT) بعد ترجمتها وتبسيطها.