قواعد تجاهل خاصة بك عبر .git/info/exclude
كيفية كتابة قواعد شخصية تخص مستودعًا واحدًا في .git/info/exclude من دون تعديل .gitignore، ومتى يفيد ذلك، وما أولويته.
يُضاف ملف .gitignore في commit ويُشارَك مع الجميع. لكن أحيانًا توجد ملفات تريد أنت وحدك تجاهلها في هذا المستودع فقط: ملاحظات شخصية، سكربتات تجريبية، مجلدات تنشئها إضافات محررك. لهذا الغرض يوجد .git/info/exclude.
أين يوجد
ينشئ git init أو git clone الملف .git/info/exclude تلقائيًّا. وهو ملف فارغ لا يحتوي إلا على بضعة أسطر من التعليقات.
cat .git/info/exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# ...
ولأنه داخل المجلد .git فلا يُضاف في commit ولا يصل إلى أحد عند push. وصياغته مطابقة تمامًا لصياغة .gitignore. لمعرفة موقعه الدقيق، بما في ذلك عند استخدام عدة worktree، شغّل git rev-parse --git-path info/exclude.
متى يُستخدم
| الحالة | أمثلة | الموضع المقترح |
|---|---|---|
| ملفات شخصية تُستخدم في هذا المستودع فقط | notes.md، scratch/، todo.txt | .git/info/exclude |
| ملفات شخصية مشتركة بين كل المستودعات | .DS_Store، *.swp | ملف gitignore العام |
| قواعد يحتاجها الفريق كله | node_modules/، dist/، .env | .gitignore |
يفيد ذلك خصوصًا عند المساهمة في مستودع شخص آخر. إذا عدّلت ملف .gitignore الخاص بالمشروع لحجب ملفات تنشئها أدواتك، فقد لا يرغب المراجعون في هذا التغيير. أما الكتابة في .git/info/exclude فلا تمس سجل الـ commit.
echo 'scratch/' >> .git/info/exclude
echo '.my-plugin-cache/' >> .git/info/exclude
git status # they no longer appear
الأولوية
بين مصادر القواعد يقع .git/info/exclude تحت .gitignore وفوق الملف العام.
- أنماط سطر الأوامر
.gitignore(ملفات المجلدات الفرعية تتغلب على الملفات الأعلى).git/info/excludecore.excludesFile
لذلك لا يمكن إعادة تضمين ملف يتجاهله .gitignore بقاعدة ! في .git/info/exclude. وعند التحقق فعليًّا:
# .gitignore : x
# .git/info/exclude : !x
$ git check-ignore -v x
.gitignore:1:x x
ملاحظات
- لا أثر له على الملفات المُتتبَّعة مسبقًا. فكما في .gitignore لا تنطبق قواعد التجاهل إلا على الملفات غير المُتتبَّعة.
- الاستنساخ الجديد يعيد هذا الملف إلى حالته الافتراضية. إذا احتجت القواعد نفسها على عدة حواسيب فملف gitignore العام أنسب.
- إذا نسخت المستودع إلى مجلد مشترك مع المجلد
.gitفستنتقل القواعد معه.
المراجع
- وثائق gitignore الرسمية: $GIT_DIR/info/exclude
- GitHub Docs: Excluding local files without creating a .gitignore file
- تاريخ التحقق: 2026-09-23 (جرى التحقق من مثال الأولوية باستخدام git 2.50.1)