Featured image of post لماذا لا يتتبع Git المجلدات الفارغة؟ ما هما .gitkeep و .gitignore؟

لماذا لا يتتبع Git المجلدات الفارغة؟ ما هما .gitkeep و .gitignore؟

تعمق في سبب تجاهل Git للمجلدات الفارغة، وكيفية استخدام .gitkeep و .gitignore بشكل صحيح لإدارة هيكل دليل المشروع. يتضمن أمثلة عملية وأفضل الممارسات.

ببساطة، .gitkeep هو ملف وهمي تقليدي. وجوده يخدم غرضاً واحداً فقط: إجبار Git على تتبع مجلد يفترض أن يكون فارغاً.

لماذا هو ضروري؟

منطق تصميم Git هو “تتبع تغييرات الملفات”، وليس “تتبع المجلدات”. إذا كان مشروعك يحتوي على مجلد فارغ، سيتجاهله Git تماماً ولن يرفعه إلى GitHub أو الخادم الخاص بك.

هذا يخلق مشكلة: أحياناً يتطلب كودك وجود دليل معين ليعمل، لكنك لا تريد رفع بيانات اختبار أو ملفات مؤقتة. إذا لم يكن الدليل موجوداً، قد يتعطل البرنامج.

هذه المجلدات عادة ما تكون:

  • logs/: لملفات السجل
  • uploads/: الملفات التي يرفعها المستخدمون
  • tmp/: الملفات المؤقتة
  • cache/: بيانات التخزين المؤقت

هذه الأدلة مطلوبة أثناء التشغيل، ولا ينبغي الالتزام بمحتواها (commit)، ولكن المجلد نفسه يجب أن يكون موجوداً.

كيف يعمل

لأجل “خداع” Git للاحتفاظ بهذا المجلد، نضع ملفاً مخفياً بلا وظيفة حقيقية بداخله، مما يجعل Git يعتقد: “أوه! هناك شيء هنا، يجب أن أسجله.”

تشبيه عملي:

تخيل أنك تبني منزلاً (تكتب مشروعاً):

الملف الوصف
.gitignore مثل “ملصق عدم الرمي”، يخبر عامل النظافة (Git) ما هي الأشياء (مثل الطعام منتهي الصلاحية، ورق النفايات) التي لا يجب نقلها مطلقاً إلى المنزل الجديد.
.gitkeep مثل “صندوق حجز المكان”. المنزل الجديد ليس مفروشاً بعد، لكنك تحتاج إلى حجز مساحة لغرفة التخزين، لذا تضع صندوقاً هناك لإعلام عمال النقل بأن هذه المنطقة جزء من المنزل ولا يجب هدمها.

كيف تستخدمه؟

  1. أنشئ ملفاً باسم .gitkeep داخل المجلد الفارغ.
  2. يمكن أن يكون محتوى الملف فارغاً، أو يمكنك كتابة “Keep this directory”.
  3. قم بعمل git add و commit لهذا الملف.

مقارنة .gitkeep مقابل .gitignore

الميزة .gitkeep .gitignore
الوضع الرسمي غير رسمي (مجرد عرف مجتمعي) رسمي (ميزة مدمجة في Git)
الوظيفة الرئيسية الاحتفاظ بمجلد، ومنع Git من نسيانه استبعاد الملفات، ومنع Git من تتبعها
سيناريوهات شائعة مجلدات السجلات الفارغة، مجلدات التخزين المؤقت ملفات كلمات المرور، node_modules، الملفات المؤقتة

نصيحة عملية: التفكير خارج الصندوق

رغم أن .gitkeep شائع الاستخدام، إلا أنه في الواقع ليس جزءاً رسمياً من Git. في الواقع، يمكنك استخدام README.md أو .placeholder لتحقيق نفس التأثير. لكن لماذا يفضل الجميع .gitkeep؟ لأنه يشرح نفسه: “هذا الملف لا يفعل شيئاً سوى منع Git من حذف هذا المجلد.”

إذا كنت تريد أن تبدو أكثر احترافية قليلاً، فهناك نهج أكثر إبداعاً وعملية من مجرد استخدام .gitkeep:

ضع ملف .gitignore في المجلد الفارغ بالمحتوى التالي:

# تجاهل كل شيء في هذا الدليل
*
# لكن لا تتجاهلني (ملف .gitignore هذا نفسه)
!.gitignore

هذا يضمن أنك تحتفظ بالمجلد مع ضمان أن الملفات غير المرغوب فيها داخله لن يتم الالتزام بها عن طريق الخطأ. هذه هي الطريقة الحقيقية “المقاومة للخطأ” (Foolproof).

الخاتمة

  • .gitkeep هو حل وسط بشري لمنطق تصميم Git.
  • إنها ليست مواصفات رسمية، لكنها أصبحت معياراً فعلياً للمطورين.
  • ما هو مهم حقاً هو فهم كيفية عمل .gitignore؛ .gitkeep ما هو إلا أداة صغيرة لمساعدة Git على “فهم” المجلدات الفارغة.

Reference

All rights reserved,未經允許不得隨意轉載
مبني بستخدام Hugo
قالب Stack مصمم من Jimmy