انتقل إلى محتوى الدرس
الدرس 10
دورة Version Control

تجاهل الملفات والمجلدات عبر ملف gitignoreGit Ignore Files

احمِ مستودعك من رفع ملفات .env السرية ومجلدات الحزم والملفات المؤقتة عبر صياغة قواعد .gitignore وفحصها بالأمر git check-ignore.
أقسام الدرس
6
الأمثلة
4
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

يحتوي كل مشروع برمجي حقيقي على ملفات حساسة أو مؤقتة يُحظر حفظها داخل مستودع Git. ولهذا الغرض ننشئ ملفاً نصياً باسم .gitignore في جذر المشروع ليأمر Git بتجاهل أربع فئات رئيسية من الملفات:

  • 1. الأسرار وبيانات الاعتماد: ملفات البيئة .env التي تضم كلمات مرور قواعد البيانات ومفاتيح الـ API السرية.
  • 2. مجلدات الحزم والمكتبات الضخمة: مثل node_modules/ وvendor/ التي يُعاد تثبيتها بسهولة عبر مدير الحزم.
  • 3. مخرجات البناء وملفات السجل: المجلدات المولدة آلياً مثل dist/ وbuild/ وملفات *.log.
  • 4. ملفات النظام والمحرر المؤقتة: مثل .DS_Store في ماك وThumbs.db في ويندوز.
قواعد ملف .gitignore لتجاهل الملفات السرية والمؤقتة وفحصها
Shell
# Standard .gitignore rules for a web project:
.env
*.log
node_modules/
dist/
.DS_Store

تُكتب القواعد داخل ملف .gitignore سطراً بسطر باستخدام أنماط المطابقة القياسية (Glob Patterns):

  • علامة التعليق #: أي سطر يبدأ بها يُعد تعليقاً توضيحياً للمطورين.
  • النجمة الفردية *: تطابق أي عدد من المحارف في اسم الملف مثل *.log لتجاهل كافة ملفات السجل.
  • الشرطة المائلة في النهاية /: مثل build/ وتخصص القاعدة لتجاهل المجلد بالكامل.
  • الشرطة المائلة في البداية /: مثل /todo.txt وتقيد التجاهل بالملف الموجود في الجذر فقط دون المجلدات الفرعية.
  • النجمتان المتتاليتان **: تطابقان أي عدد من مستويات المجلدات الفرعية المتداخلة.
Shell
# Root-only file vs any-depth wildcard:
/config.local.js
*.tmp
# Ignore all .cache files at any depth inside temp/
temp/**/*.cache

يحتاج المطورون دائماً إلى مهارتين عمليتين عند التعامل مع الاستثناءات والمجلدات الفارغة:

  • رمز الاستثناء (!): وضع علامة التعجب في بداية السطر يستثني ملفاً محدداً من قاعدة تجاهل سابقة؛ فكتابة *.log ثم !important.log تتجاهل جميع ملفات السجل ما عدا الملف المستثنى.
  • عرف حفظ المجلدات الفارغة (.gitkeep): لأن Git يتتبع محتوى الملفات ولا يحفظ المجلدات الفارغة تماماً، يضع المطورون ملفاً فارغاً باسم uploads/.gitkeep مع تجاهل محتويات المجلد واستثناء هذا الملف ليبقى هيكل المجلد موجوداً في المستودع.

يواجه كثير من المطورين موقفاً محيراً: «لقد أضفت .env إلى ملف .gitignore ومع ذلك لا يزال يظهر في git status عند تعديله!». السبب الهندسي هو فخ الملف المتتبع مسبقاً:

  • القاعدة الذهبية: تسري قواعد .gitignore على الملفات غير المتتبعة فقط؛ أما إذا كان الملف قد أُضيف مسبقاً إلى الفهرس أو حُفظ في التزام سابق، فسيواصل Git تتبعه وتجاهل قاعدة الحجب.
  • الحل الجذري: نفّذ أولاً الأمر git rm --cached .env لإخراج الملف من الفهرس مع إبقائه على القرص، ثم احفظ الالتزام ليدخل الملف فوراً في حكم التجاهل.
Shell
# Fix a file that was tracked before adding to .gitignore:
echo ".env" >> .gitignore
git rm --cached .env
git add .gitignore
git commit -m "Untrack and ignore local .env file"

عندما يكبر المشروع وتتعدد قواعد التجاهل، قد تتساءل: لماذا يتجاهل Git هذا الملف تحديداً وأي سطر هو المسؤول عن حجبه؟ هنا يوفر النظام أمر الفحص الدقيق git check-ignore:

  • تحديد السطر المسؤول بالخيار (-v): تشغيل git check-ignore -v debug.log يطبع مسار ملف التجاهل، ورقم السطر الدقيق، والنمط الذي طابق الملف.
  • التأكد من عدم الحجب: إذا لم يطبع الأمر أي مخرجات لملف معين، فهذا يؤكد أن الملف غير محجوب بأي قاعدة.
Shell
# Inspect exactly which .gitignore line ignores a file
git check-ignore -v debug.log node_modules/app.js
# .gitignore:2:*.log	debug.log
# .gitignore:4:node_modules/	node_modules/app.js

يلخص الجدول المرجعي التالي أهم أنماط الصياغة في .gitignore وأمر الفحص git check-ignore في ختام الوحدة الثانية قبل الانتقال لاستعراض السجل بالأمر git log في الوحدة الثالثة:

النمط أو الأمرمثال القاعدةالسلوك الهندسي والملفات المطابقة
تجاهل امتداد كامل*.logتجاهل أي ملف ينتهي بالامتداد .log في أي مجلد
استثناء ملف محدد!important.logإلغاء الحجب عن الملف المستثنى رغم القاعدة السابقة
تجاهل مجلد كاملnode_modules/تجاهل المجلد المحدد وكافة محتوياته الفرعية
التقييد بجذر المستودع/build.txtتجاهل الملف الموجود في الجذر الرئيسي للمشروع فقط
فحص سبب التجاهلgit check-ignore -v <f>طباعة اسم ملف التجاهل ورقم السطر والقاعدة المطابقة
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس تحديد الملفات المحظور حفظها في المستودع، وصياغة أنماط .gitignore القياسية، واستخدام الاستثناء ! وعرف .gitkeep، ومعالجة الملفات المتتبعة مسبقاً بـ git rm --cached، وتشخيص القواعد بالأمر git check-ignore -v. الخطوة التالية: انتقل الآن إلى الدرس رقم 11 «استعراض سجل الالتزامات عبر الأمر git log» لبدء الوحدة الثالثة.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 .gitignore File ملف التجاهل .gitignore
ملف نصي يوضع في جذر المستودع ويضم قواعد تحدد الملفات والمجلدات التي يجب على Git تجاهلها وعدم تتبعها.
للمراجعة
02 Negation Pattern قاعدة الاستثناء !
قاعدة تبدأ بعلامة التعجب ! داخل .gitignore لاستثناء ملف معين من قاعدة حجب سابقة.
للمراجعة
03 .gitkeep Convention عرف الملف .gitkeep
عرف برمجي يقضي بوضع ملف فارغ باسم .gitkeep داخل المجلد الفارغ ليحتفظ Git بهيكل المجلد في المستودع.
للمراجعة
04 Rule Debugging تشخيص قواعد التجاهل
استخدام الأمر git check-ignore -v لمعرفة الملف ورقم السطر الدقيق الذي تسبب في تجاهل مسار معين.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 GLOB GLOB
Wildcard Path Matching Pattern
أنماط المطابقة النصية المستخدمة في ملف .gitignore لتحديد المسارات والامتدادات.
للمراجعة
02 ENV ENV
Environment Secrets File (.env)
ملف متغيرات البيئة السرية الذي يجب إدراجه دائماً في أول سطر من ملف .gitignore.
للمراجعة
03 IDE IDE
Integrated Development Environment
بيئة التطوير المتكاملة التي غالباً ما تُضاف مجلدات إعداداتها الشخصية إلى ملف التجاهل.
للمراجعة
04 II !!
Ignored File Status Code
الرمز المزدوج الذي يظهر أمام الملفات المتجاهلة عند تشغيل git status -s --ignored.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. بدّل بين تبويبات المحاكي التفاعلي الثلاثة لمراجعة قواعد .gitignore وعلاج الملف المتتبع مسبقاً وفحص السطر بـ check-ignore -v.

  2. أنشئ ملف .gitignore يضم القاعدة *.log ثم نفّذ git check-ignore -v debug.log لمشاهدة رقم السطر المطابق.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

أي ملف مما يلي يجب إدراجه دائماً داخل ملف .gitignore ويُحظر حفظه في المستودع؟

يجب دائماً تجاهل ملف البيئة .env الذي يحتوي على كلمات المرور والمفاتيح السرية.

02

داخل ملف .gitignore، ماذا تفعل القاعدة "*.log" المتبوعة في السطر التالي بالقاعدة "!important.log"؟

تتجاهل جميع الملفات المنتهية بالامتداد .log باستثناء الملف important.log الذي تعيد علامة ! ضمه للتتبع.

03

إضافة اسم الملف ".env" إلى .gitignore تكفي وحدها لإيقاف تتبع ملف ".env" تم حفظه مسبقاً في التزام سابق.

خطأ؛ فقواعد .gitignore تسري على الملفات غير المتتبعة فقط، ويجب تنفيذ git rm --cached .env أولاً لإلغاء تتبع الملف المسجل مسبقاً.

04

إذا كان ملف إعدادات متتبعاً بالفعل في Git، فما الأمر الواجب تنفيذه لتفعيل قاعدة .gitignore عليه دون حذفه من قرص جهازك؟

يزيل الأمر git rm --cached الملف من فهرس التتبع مع إبقائه على القرص لتسري عليه قاعدة التجاهل.

05

ما الأمر الذي يطبع اسم ملف التجاهل ورقم السطر الدقيق والقاعدة التي تسببت في تجاهل ملف معين؟

يعرض الأمر git check-ignore -v التفاصيل الدقيقة للسطر والقاعدة المسؤولة عن تجاهل الملف.

06

يجب تجهيز ملف .gitignore نفسه بالأمر git add وحفظه في المستودع ليتشارك جميع أعضاء الفريق نفس قواعد التجاهل.

صواب؛ فحفظ ملف .gitignore في المستودع يضمن تطبيق نفس قواعد الحماية لدى جميع المطورين في الفريق.

07

لماذا يضع المطورون ملفاً فارغاً باسم ".gitkeep" داخل المجلدات الفارغة مثل مجلد uploads/؟

لأن نظام Git يتتبع الملفات ولا يحفظ المجلدات الفارغة تماماً، فيضمن وجود هذا الملف حفظ هيكل المجلد في المستودع.

08

في صياغة ملف .gitignore، على ماذا تدل الشرطة المائلة في نهاية القاعدة "dist/"؟

تدل الشرطة المائلة في نهاية الاسم على أن القاعدة تستهدف مجلداً باسم dist وجميع محتوياته.