في هذا الدرس 6تصفّح المواضيع
يحتوي كل مشروع برمجي حقيقي على ملفات حساسة أو مؤقتة يُحظر حفظها داخل مستودع Git. ولهذا الغرض ننشئ ملفاً نصياً باسم .gitignore في جذر المشروع ليأمر Git بتجاهل أربع فئات رئيسية من الملفات:
- 1. الأسرار وبيانات الاعتماد: ملفات البيئة
.envالتي تضم كلمات مرور قواعد البيانات ومفاتيح الـ API السرية. - 2. مجلدات الحزم والمكتبات الضخمة: مثل
node_modules/وvendor/التي يُعاد تثبيتها بسهولة عبر مدير الحزم. - 3. مخرجات البناء وملفات السجل: المجلدات المولدة آلياً مثل
dist/وbuild/وملفات*.log. - 4. ملفات النظام والمحرر المؤقتة: مثل
.DS_Storeفي ماك وThumbs.dbفي ويندوز.
# Standard .gitignore rules for a web project:
.env
*.log
node_modules/
dist/
.DS_Store
تُكتب القواعد داخل ملف .gitignore سطراً بسطر باستخدام أنماط المطابقة القياسية (Glob Patterns):
- علامة التعليق
#: أي سطر يبدأ بها يُعد تعليقاً توضيحياً للمطورين. - النجمة الفردية
*: تطابق أي عدد من المحارف في اسم الملف مثل*.logلتجاهل كافة ملفات السجل. - الشرطة المائلة في النهاية
/: مثلbuild/وتخصص القاعدة لتجاهل المجلد بالكامل. - الشرطة المائلة في البداية
/: مثل/todo.txtوتقيد التجاهل بالملف الموجود في الجذر فقط دون المجلدات الفرعية. - النجمتان المتتاليتان
**: تطابقان أي عدد من مستويات المجلدات الفرعية المتداخلة.
# 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لإخراج الملف من الفهرس مع إبقائه على القرص، ثم احفظ الالتزام ليدخل الملف فوراً في حكم التجاهل.
# 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يطبع مسار ملف التجاهل، ورقم السطر الدقيق، والنمط الذي طابق الملف. - التأكد من عدم الحجب: إذا لم يطبع الأمر أي مخرجات لملف معين، فهذا يؤكد أن الملف غير محجوب بأي قاعدة.
# 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 .gitignore File ملف التجاهل .gitignore
- ملف نصي يوضع في جذر المستودع ويضم قواعد تحدد الملفات والمجلدات التي يجب على Git تجاهلها وعدم تتبعها.
- للمراجعة
- 02 Negation Pattern قاعدة الاستثناء !
- قاعدة تبدأ بعلامة التعجب ! داخل .gitignore لاستثناء ملف معين من قاعدة حجب سابقة.
- للمراجعة
- 03 .gitkeep Convention عرف الملف .gitkeep
- عرف برمجي يقضي بوضع ملف فارغ باسم .gitkeep داخل المجلد الفارغ ليحتفظ Git بهيكل المجلد في المستودع.
- للمراجعة
- 04 Rule Debugging تشخيص قواعد التجاهل
- استخدام الأمر git check-ignore -v لمعرفة الملف ورقم السطر الدقيق الذي تسبب في تجاهل مسار معين.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات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.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
بدّل بين تبويبات المحاكي التفاعلي الثلاثة لمراجعة قواعد .gitignore وعلاج الملف المتتبع مسبقاً وفحص السطر بـ check-ignore -v.
-
أنشئ ملف .gitignore يضم القاعدة *.log ثم نفّذ git check-ignore -v debug.log لمشاهدة رقم السطر المطابق.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
أي ملف مما يلي يجب إدراجه دائماً داخل ملف .gitignore ويُحظر حفظه في المستودع؟
يجب دائماً تجاهل ملف البيئة .env الذي يحتوي على كلمات المرور والمفاتيح السرية.
داخل ملف .gitignore، ماذا تفعل القاعدة "*.log" المتبوعة في السطر التالي بالقاعدة "!important.log"؟
تتجاهل جميع الملفات المنتهية بالامتداد .log باستثناء الملف important.log الذي تعيد علامة ! ضمه للتتبع.
إضافة اسم الملف ".env" إلى .gitignore تكفي وحدها لإيقاف تتبع ملف ".env" تم حفظه مسبقاً في التزام سابق.
خطأ؛ فقواعد .gitignore تسري على الملفات غير المتتبعة فقط، ويجب تنفيذ git rm --cached .env أولاً لإلغاء تتبع الملف المسجل مسبقاً.
إذا كان ملف إعدادات متتبعاً بالفعل في Git، فما الأمر الواجب تنفيذه لتفعيل قاعدة .gitignore عليه دون حذفه من قرص جهازك؟
يزيل الأمر git rm --cached الملف من فهرس التتبع مع إبقائه على القرص لتسري عليه قاعدة التجاهل.
ما الأمر الذي يطبع اسم ملف التجاهل ورقم السطر الدقيق والقاعدة التي تسببت في تجاهل ملف معين؟
يعرض الأمر git check-ignore -v التفاصيل الدقيقة للسطر والقاعدة المسؤولة عن تجاهل الملف.
يجب تجهيز ملف .gitignore نفسه بالأمر git add وحفظه في المستودع ليتشارك جميع أعضاء الفريق نفس قواعد التجاهل.
صواب؛ فحفظ ملف .gitignore في المستودع يضمن تطبيق نفس قواعد الحماية لدى جميع المطورين في الفريق.
لماذا يضع المطورون ملفاً فارغاً باسم ".gitkeep" داخل المجلدات الفارغة مثل مجلد uploads/؟
لأن نظام Git يتتبع الملفات ولا يحفظ المجلدات الفارغة تماماً، فيضمن وجود هذا الملف حفظ هيكل المجلد في المستودع.
في صياغة ملف .gitignore، على ماذا تدل الشرطة المائلة في نهاية القاعدة "dist/"؟
تدل الشرطة المائلة في نهاية الاسم على أن القاعدة تستهدف مجلداً باسم dist وجميع محتوياته.