0Pricing
Git & GitHub Professional Workflow · درس

صيانة المستودع وترتيبه

تعلّم أوامر مثل `git gc` و`git prune` لتنظيف مستودع Git المحلي وتحسينه

صيانة المستودع وترتيبه درس مجاني في Git & GitHub Professional Workflow على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Git & GitHub Professional Workflow، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Git & GitHub Professional Workflow 4 دروس في المجموع.

مرحبًا بك في صيانة Git

بمرور الوقت، قد تتراكم ملفات غير ضرورية في مستودعات Git المحلية، فتقل كفاءتها. فكّر في الأمر كأنه غرفة فوضوية!

في هذا الدرس، سنتعلم كيفية تنظيف مستودعات Git وتحسينها باستخدام أوامر قوية مثل git gc وgit prune. ويساعد ذلك على تشغيل مشاريعك بسلاسة.

شرح مخزن الكائنات في Git

لنبدأ أولًا بفهم طريقة تخزين Git للبيانات. يحفظ Git سجل مشروعك على شكل سلسلة من «الكائنات»:

  • Blobs: محتويات الملفات
  • Trees: الأدلة ومحتوياتها
  • Commits: لقطات لمشروعك في نقطة زمنية محددة
  • Tags: مؤشرات إلى commits محددة

يمكن تخزين هذه الكائنات على شكل «كائنات منفصلة» أو ضغطها داخل «packfiles» لتحقيق الكفاءة.

مقدمة إلى `git gc` (جمع البيانات المهملة)

يمثّل الأمر git gc اختصارًا لعبارة «جمع البيانات المهملة». وهو أداة Git المضمّنة لتنظيف مستودعك وتحسينه.

تشمل مهامه الأساسية ما يلي:

  • تجميع الكائنات المنفصلة: ضغط الكائنات الفردية داخل packfiles موحّدة.
  • حذف الكائنات التي يتعذر الوصول إليها: حذف الكائنات التي لم تعد أي commit أو فرع أو وسم يشير إليها (بعد مرور عمر محدد).
  • إزالة packfiles القديمة: التخلص من ملفات الكائنات المضغوطة القديمة.

تجعل هذه العملية مستودعك أصغر حجمًا وأسرع.

تشغيل `git gc` (الاستخدام العام)

يمكنك تشغيل git gc يدويًا في أي وقت. كما يشغّله Git تلقائيًا في الخلفية عند تنفيذ عمليات معينة، مثل push أو fetch.

يُعد تشغيله آمنًا عمومًا، لكن من الأفضل التأكد من عدم وجود عمل غير مُجرى له commit قد تحتاج إلى استرداده قبل إجراء عملية تنظيف كبيرة.

جرّب تشغيله في الطرفية:

git gc

فهم مخرجات `git gc`

عند تشغيل git gc، سترى مخرجات مشابهة لما يلي:

Counting objects: 1234, done. Compressing objects: 100% (987/987), done. Writing objects: 100% (1234/1234), done. Total 1234 (delta 567), reused 0 (delta 0) Removing duplicate objects: 100% (256/256), done. Pruning objects: 100% (123/123), done.

يوضّح هذا أن Git يعمل على تجميع الكائنات، وكتابة packfiles جديدة، وحذف الكائنات القديمة التي يتعذر الوصول إليها. وتختلف الأرقام وفقًا لحالة مستودعك.

التركيز على `git prune`

بينما تتولى git gc العديد من مهام التنظيف، تتعامل git prune تحديدًا مع إزالة الكائنات «المعلّقة» أو «غير القابلة للوصول».

  • الكائنات المعلّقة: هي كائنات موجودة في مستودعك، لكنها لم تعد مُشارًا إليها من أي commit أو branch أو tag، كما أنها ليست جزءًا من packfile.
  • الكائنات غير القابلة للوصول: مصطلح مشابه للكائنات المعلّقة، لكنه أوسع نطاقًا. وقد تنشأ هذه الكائنات لأسباب مختلفة، مثل إجراء rebase أو reset يعيد كتابة السجل.

تحذف git prune هذه الكائنات إذا كان عمرها يتجاوز مدة انتهاء الصلاحية الافتراضية، وهي عادةً أسبوعان.

تشغيل `git prune` مباشرةً

لا تحتاج عادةً إلى تشغيل git prune مباشرةً، لأن git gc تستدعيها. ومع ذلك، يمكنك استخدامها لإجراء تنظيف أكثر استهدافًا.

لمعاينة ما ستفعله git prune دون حذف أي شيء فعليًا، استخدم الخيار --dry-run:

git prune --dry-run

التنظيف مع تحديد مدة الانتهاء

افتراضيًا، لا تزيل git prune (وكذلك خطوة التنظيف في git gc) إلا الكائنات التي مضى على إنشائها أكثر من أسبوعين. ويمكنك تجاوز ذلك باستخدام الخيار --expire.

يفيد هذا الخيار إذا أردت تنظيف الكائنات المعلّقة التي أُنشئت حديثًا تنظيفًا مكثفًا، ربما بعد إجراء rebase تجريبي متأكد من أنك لن تحتاج إلى التراجع عنه.

على سبيل المثال، لتنظيف الكائنات التي مضى على إنشائها أكثر من يوم واحد:

git prune --expire=1.day

التمييز عن `git reflog expire`

من المهم عدم الخلط بين git prune وgit reflog expire. فعلى الرغم من ارتباطهما بالتنظيف، فإن لكل منهما غرضًا مختلفًا:

  • git prune: تحذف كائنات Git الفعلية (blobs وtrees وcommits) من قاعدة بيانات الكائنات.
  • git reflog expire: تنظف الإدخالات في reflog (وهو سجل محلي للمواقع التي انتقل إليها HEAD)، مما يجعل العثور على بعض commits أصعب، لكنها لا تحذف الكائنات نفسها.

احرص دائمًا على توخي الحذر عند تعديل السجل أو تشغيل أوامر التنظيف!

التحقق من مهام الصيانة

أيّ مما يلي يصف الدور الأساسي للأمر git gc على أفضل نحو؟

مراجعة وخطوات تالية

تهانينا! لقد تعلمتم كيفية الحفاظ على مستودعات Git مرتبة وفعّالة.

  • git gc: الأمر الشامل لجمع القمامة، وتجميع الكائنات في حزم، وإجراء التنظيف.
  • git prune: تستهدف الكائنات غير القابلة للوصول والمعلّقة التي تجاوزت مدة انتهاء صلاحية محددة، ثم تزيلها.

تساعد الصيانة الدورية على ضمان سلاسة سير عمل Git، وعلى ألا تستهلك مستودعاتكم مساحة كبيرة من القرص. واصلوا العمل الجيد!

الأسئلة الشائعة

هل درس «صيانة المستودع وترتيبه» مجاني؟

نعم — نص درس «صيانة المستودع وترتيبه» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Git & GitHub Professional Workflow، انتقل إلى CoddyKit PRO. تتضمن دورة Git & GitHub Professional Workflow 4 دروس في المجموع.

ماذا ستتعلم في «صيانة المستودع وترتيبه»؟

تعلّم أوامر مثل `git gc` و`git prune` لتنظيف مستودع Git المحلي وتحسينه تتمرن على Git & GitHub Professional Workflow مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Git & GitHub Professional Workflow؟

لا تُشترط خبرة سابقة. Git & GitHub Professional Workflow على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «صيانة المستودع وترتيبه»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Git & GitHub Professional Workflow هذا؟

نعم. كل درس في Git & GitHub Professional Workflow يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. Git Reflog واستعادة السجل
  2. Git Bisect لتنقيح الأخطاء
  3. صيانة المستودع وترتيبه
  4. إعادة كتابة السجل باستخدام git filter-repo
← العودة إلى Git & GitHub Professional Workflow