.gitignore — الملف الذي يحميك من تضمين ملف node_modules

نُشرت في

دليل عملي لـ .gitignore: ما يفعله، كيفية عمل القواعد، أنماط شائعة لملفات node_modules وملفات .env، ومشكلة التتبع المسبق التي تؤثر على كل مطور.

.gitignore — الملف الذي يحميكم من تضمين node_modules 1
إعلان · حذف؟

أجرى كل مطور ذلك على الأقل مرة واحدة: تضمين ملف بشكل عرضي node_modules، .env ملف يحتوي على مفاتيح API، أو ملف بناء بحجم 200 ميجا بايت. القلق حقيقي. الحل ممل. وجميع هذه الأمور كانت يمكن تجنبها بملف واحد فقط: .gitignore.

يشرح هذا الدليل ما .gitignore هو، وكيف يعمل، وما يجب وضعه فيه، وعدد من المخاطر التي تقع على عاتق المطورين المتمرسين.

ما هو .gitignore؟

.gitignore هو ملف نصي يخبر Git بملفات ومراتب يجب استبعادها من التحكم بالنسخ. عندما يرى Git مساراً مذكوراً في .gitignore، يفترض أن المسار غير موجود - لن يتم تضمينه، أو تضمينه، أو عرضه في git status الإخراج.

يوجد الملف في الجذع الخاص بمخزنك، لكن يمكنك أيضًا وضع ملفات مخصصة للعمل في مسارات فرعية. تُطبق القواعد في ملف فرعي فقط على تلك المسار وفرعاته. .gitignore لماذا تحتاج إلى ملف واحد (النسخ القصير)

— يحافظ على السرّ، مفاتيح API، ومراتب من خارج سجل Git

  • حماية حجم المخزن
  • — يمنع ملفات مُنشأة واعتمادات من تضخيم مخزنك تقليل الضوضاء
  • — يوقف ملفات إعداد المحرر وملفات النظام من التسخين في كل تغيير الاستقرار في الفريق
  • — كل شخص يُجرّب مخزن نظيف ويُثبّت الاعتمادات محلياً كيف تعمل القواعد

القواعد بسيطة لكنها تمتلك بعض الحواف غير واضحة:

السطور الفارغة والسطور التي تبدأ بـ

  • تُتجاهل (استخدم # لتعليقات) # نظام بدون سلطة
  • يُطابق أي ملف أو مسار بذاته في أي مكان داخل المخزن: يُستبعد كل ملف سجل في كل مستوى *.log نظام بسلاسل
  • يُطابق المسارات فقط: يُستبعد المسار ولكن ليس ملفاً يسمى dist/ نظام بسلاسل dist
  • يُربط القاعدة بالجذع الرئيسي للمخزن: يُستبعد فقط ملف /todo.txt في الجذع الرئيسي todo.txt نظام مزدوج (
  • يُطابق عبر حدود المسارات:**) أي مكان في الشجرة **/logs coinciden logs/ علامة ترقيم (
  • تُنفي القاعدة، وتحدد ملفاً مُستبعداً سابقاً!) أمثلة بسيطة

أبرز المدخلات الشائعة (وسبب أهميتها)

# 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
**/logslogs حتى لو
!important.logيتطابق معه important.log أي ملف داخل *.log بلا فروع
doc/*.txt.txt أي ملف تحت doc/ أي مكان تحت
doc/**/*.txt.txt أي ملف تحت doc/
هل تريد حذف الإعلانات؟ تخلص من الإعلانات اليوم

تثبيت ملحقاتنا

أضف أدوات IO إلى متصفحك المفضل للوصول الفوري والبحث بشكل أسرع

أضف لـ إضافة كروم أضف لـ امتداد الحافة أضف لـ إضافة فايرفوكس أضف لـ ملحق الأوبرا

وصلت لوحة النتائج!

لوحة النتائج هي طريقة ممتعة لتتبع ألعابك، يتم تخزين جميع البيانات في متصفحك. المزيد من الميزات قريبا!

إعلان · حذف؟
إعلان · حذف؟
إعلان · حذف؟

ركن الأخبار مع أبرز التقنيات

شارك

ساعدنا على الاستمرار في تقديم أدوات مجانية قيمة

اشتري لي قهوة
إعلان · حذف؟