.gitignore — الملف الذي يحميك من تضمين ملف node_modules
دليل عملي لـ .gitignore: ما يفعله، كيفية عمل القواعد، أنماط شائعة لملفات node_modules وملفات .env، ومشكلة التتبع المسبق التي تؤثر على كل مطور.
أجرى كل مطور ذلك على الأقل مرة واحدة: تضمين ملف بشكل عرضي node_modules، .env ملف يحتوي على مفاتيح API، أو ملف بناء بحجم 200 ميجا بايت. القلق حقيقي. الحل ممل. وجميع هذه الأمور كانت يمكن تجنبها بملف واحد فقط: .gitignore.
يشرح هذا الدليل ما .gitignore هو، وكيف يعمل، وما يجب وضعه فيه، وعدد من المخاطر التي تقع على عاتق المطورين المتمرسين.
ما هو .gitignore؟
.gitignore هو ملف نصي يخبر Git بملفات ومراتب يجب استبعادها من التحكم بالنسخ. عندما يرى Git مساراً مذكوراً في .gitignore، يفترض أن المسار غير موجود - لن يتم تضمينه، أو تضمينه، أو عرضه في git status الإخراج.
يوجد الملف في الجذع الخاص بمخزنك، لكن يمكنك أيضًا وضع ملفات مخصصة للعمل في مسارات فرعية. تُطبق القواعد في ملف فرعي فقط على تلك المسار وفرعاته. .gitignore لماذا تحتاج إلى ملف واحد (النسخ القصير)
— يحافظ على السرّ، مفاتيح API، ومراتب من خارج سجل Git
- حماية حجم المخزن
- — يمنع ملفات مُنشأة واعتمادات من تضخيم مخزنك تقليل الضوضاء
- — يوقف ملفات إعداد المحرر وملفات النظام من التسخين في كل تغيير الاستقرار في الفريق
- — كل شخص يُجرّب مخزن نظيف ويُثبّت الاعتمادات محلياً كيف تعمل القواعد
القواعد بسيطة لكنها تمتلك بعض الحواف غير واضحة:
السطور الفارغة والسطور التي تبدأ بـ
- تُتجاهل (استخدم
#لتعليقات)#نظام بدون سلطة - يُطابق أي ملف أو مسار بذاته في أي مكان داخل المخزن: يُستبعد كل ملف سجل في كل مستوى
*.logنظام بسلاسل - يُطابق المسارات فقط: يُستبعد المسار ولكن ليس ملفاً يسمى
dist/نظام بسلاسلdist - يُربط القاعدة بالجذع الرئيسي للمخزن: يُستبعد فقط ملف
/todo.txtفي الجذع الرئيسيtodo.txtنظام مزدوج ( - يُطابق عبر حدود المسارات:
**) أي مكان في الشجرة**/logscoincidenlogs/علامة ترقيم ( - تُنفي القاعدة، وتحدد ملفاً مُستبعداً سابقاً
!) أمثلة بسيطة
أبرز المدخلات الشائعة (وسبب أهميتها)
# Dependencies
node_modules/
# Environment files
.env
.env.local
.env.*.local
# Build output
dist/
build/
# Editor noise
.vscode/
.idea/
*.swp
# OS files
.DS_Store
Thumbs.db
# Logs
*.log
npm-debug.log*
node_modules/
هذا هو الأهم. يحتوي مشروع Node.js عادةً على آلاف الملفات في
— غالبًا مئات الميجا بايت. لا ينتمي أي منها إلى التحكم بالنسخ. أي شخص يُجرّب مخزونك يُجرّب node_modules/ ويعيد تكوينه محلياً من npm install . اجعله مُستبعداً دائمًا. package.json.env وملفات السر
تُحتوي ملفات البيئة على كلمات مرور قواعد البيانات، مفاتيح API، وتوثيق الخدمات. تضمين ملف
موقف أمني ينتظر حدوثه - يفحصه GitHub، كما يفعل الروبوتات. اجعل الملف مُستبعداً، وقم بتحديث ملف .env بقيم تجريبية لكي يعلم زملاؤك ما هي المتغيرات التي يجب تعيينها. .env.example dist/ وbuild/
الإخراج المُجمّع أو المُدمج يُستمد من المصدر. يعيد تكوينه سلسلة CI كل مرة يتم فيها إرسال التحديث. تضمين ملفات البناء يخلق تعارضات وفرق مزيفة تُضيع التغييرات الحقيقية في الكود.
ملفات المحرر وملفات النظام
(macOS)،
.DS_Store (Windows)، Thumbs.db (JetBrains)، .idea/ (إعدادات VS Code) - هذه ملفات مساحة شخصية. تضمينها يُجبر زملاءك على تحميل إعداداتك. استخدم ملفاً عالمياً .vscode/ لضوضاء مخصصة للجهاز لكي لا تضطر إلى إضافته في كل مشروع. ~/.gitignore_global .gitignore عالمي: ضعه مرة واحدة، ونسجها
يمكنك تكوين ملف إهمال عالمي ينطبق على كل المخازن في جهازك:
ضع ملفات المحرر وملفات النظام والجهاز الشخصي هناك. اترك المخزن المشروع للاختيار من قبل الفريق كأمثلة مثل
git config --global core.excludesfile ~/.gitignore_global
الحالة "تم التحكم فيه" (الحالة المُضرة) .gitignore هنا يُصاب المطورون بخسارة: node_modules/ أو dist/.
يمنع فقط
الملفات غير المُضمنة .gitignore إذا كانت الملفات مُضمنة بالفعل في سجل Git، فإضافة ملف إلى لا تحدث أي تغيير. سيستمر Git في تتبعه وسيُسجل تغييرات عليه. لإيقاف تتبع ملف مُضمن بالفعل: .gitignore بعد ذلك، يبقى الملف على القرص ولكن Git يتجاهله من الآن فصاعدًا.
قواعد التناقض: إعادة تضمين الملفات
# Remove the file from git tracking without deleting it locally
git rm --cached path/to/file
# Or remove a whole directory
git rm -r --cached node_modules/
# Then commit the removal
git commit -m "Stop tracking node_modules"
أحياناً ترغب في تجاهل مسار ما إلا ملفاً محدداً - على سبيل المثال، تجاهل
لكن احتفظ بـ
مُضمن: config/ ملاحظة: لا يمكن للتناقض إلغاء تضمين ملف داخل مسار مُضمن. يتوقف Git عن التصاعد داخل المسارات المُضمنة، لذا لن يتم تفعيل config/defaults.json القاعدة. يجب أن تُضمن محتويات المسار بدل تضمين المسار نفسه:
config/
!config/defaults.json
إنشاء ملف .gitignore لسلاسلك ! لا تضطر إلى كتابته من الصفر.
# Wrong — Git never sees defaults.json inside an ignored directory
config/
!config/defaults.json
# Right — ignore everything in config/ except defaults.json
config/*
!config/defaults.json
gitignore.io
(أو على ) يسمح لك بتحديد لغتك، إطارك، ومحررك، ويُولد ملف إهمال شامل فوراً. كما تقدم GitHub نماذج رسمية في مخزن github/gitignore gitignore.io- هذه النماذج مُحافظة جيدة وتحتوي على مئات البيئات. لأغلب المشاريع الويب، يمكن أن يكون البداية الجيدة تكامل نماذج لغتك (Node، Python، PHP إلخ)، محررك (VS Code، JetBrains)، ونظامك (macOS، Windows). فحص ما يُستبعد من Git
أثنين من الأوامر يساعدان في تدقيق قاعدة إهمال غير متوقعة:
مفيد بشكل خاص عندما لا تُظهر القاعدة ما تفترضه - تُعرض الملف، رقم السطر، ونظام القاعدة.
مذكرة سريعة: ملخص للأنماط
# See which files are being ignored in the current directory
git status --ignored
# Find out exactly which rule is causing a file to be ignored
git check-ignore -v path/to/file
git check-ignore -v ما يُستبعد
أي ملف في أي مكان
| نمط | فقط |
|---|---|
*.log | الكل .log في الجذع |
/debug.log | أي مسار يسمى debug.log في أي مستوى |
logs/ | إعادة التضمين logs |
**/logs | logs حتى لو |
!important.log | يتطابق معه important.log أي ملف داخل *.log بلا فروع |
doc/*.txt | .txt أي ملف تحت doc/ أي مكان تحت |
doc/**/*.txt | .txt أي ملف تحت doc/ |
قد يعجبك أيضاً
تثبيت ملحقاتنا
أضف أدوات IO إلى متصفحك المفضل للوصول الفوري والبحث بشكل أسرع
恵 وصلت لوحة النتائج!
لوحة النتائج هي طريقة ممتعة لتتبع ألعابك، يتم تخزين جميع البيانات في متصفحك. المزيد من الميزات قريبا!
