تقنية

قاعدة gitignore يقرأها المساعد: هل توقف تتبع ملف؟

رسم توضيحي: قاعدة مطابقة مفترضة؛ أ: ملف متتبع؛ التتبع لا يتغير؛ ب: ملف غير متتبع؛ التجاهل وفق الفرض
مخطط من إعداد بحر العلوم. مشروعان مؤلفان؛ لا أوامر أو محو تاريخ

gitignore والملف المتتبع لا يصفان الحالة نفسها. قد يقترح مساعد ذكي إضافة نمط ثم يقول إن الملف خرج من تتبع Git. نراجع ما تقوله الوثيقة عن الملفات المتتبعة وغير المتتبعة، ونقارن حالتين لهما الاسم نفسه في مشروعين مؤلفين. لا ننفذ أوامر Git أو نغير مستودعا.

الخلاصة السريعة

لا؛ يخص gitignore الملفات غير المتتبعة التي يراد تجاهلها، ولا يؤثر في الملفات التي يتتبعها Git بالفعل. [1] النمط لا يغير عضوية التتبع وحده.

  • تنص وثيقة Git على أن gitignore يخص ملفات غير متتبعة، وأن الملفات المتتبعة لا تتأثر. [1] اقرأ الحالة قبل الحكم من النمط.
  • في مشروعينا المؤلفين، تقرير.txt متتبع في أ وغير متتبع في ب؛ نفترض نمطا مطابقا نافذا دون تعارض، ولا نجعل تغيير النمط إزالة لتتبع أ.
  • يمكن للبادئة ! أن تنفي نمطا، لكن لا تعيد إدراج ملف إذا كان مجلده الأب مستبعدا. [1] احفظ شرط المجلد في قراءة الاستثناء.
  • تجاهل ملف ليس دليلا على محو تاريخ أو نسخة أو معالجة كشف سابق؛ هذه نتائج لم يقدمها تمريننا، ولم ننفذ أي أمر.

ما الحالة التي يشملها التجاهل؟

تصف Git ملفات gitignore بأنها أنماط لملفات غير متتبعة يراد تجاهلها؛ الملفات المتتبعة بالفعل لا تتأثر. [1]

لذلك لا يبدأ المساعد بإضافة سطر إلى الوصف ثم يعلن تغير حالة التتبع. يحتاج أولا بيان الحالة التي جاءت بها المادة. وجود الملف على القرص وحده لا يجيب عن هذا السؤال في ورقتنا.

نفصل المحتوى عن العضوية: قد يكون نص ملفين متطابقا، ومع ذلك يكون أحدهما متتبعا في مستودعه والآخر غير متتبع. لا يحسم عنوان «تقرير» هذه العضوية.

لماذا يختلف الاسمان المتطابقان؟

نؤلف مشروعين أ وب، ونضع تقرير.txt في كل منهما. نعلن في أ أنه متتبع بالفعل، وفي ب أنه غير متتبع. نفترض نمطا مطابقا نافذا بلا قاعدة متعارضة في المشروعين.

المقارنة تحت هذه الفروض لا تغير تتبع تقرير أ. أما تقرير ب فيقع ضمن الملفات التي افترضنا أن النمط يتجاهلها. لا ننسب هذا إلى اختلاف لغة التقرير أو محتواه، بل إلى الحالة المعلنة قبل النمط.

المشروع المؤلفالحالة المعلنةحد النمط في التمرين
أمتتبعلا يزيل تتبعه
بغير متتبعيطابق قاعدة التجاهل المفترضة

هل علامة الاستثناء تكفي دائما؟

تسمح الوثيقة ببادئة ! لنفي نمط، وتستثني إعادة ملف إذا كان مجلده الأب مستبعدا. [1]

في بطاقة مستقلة نفترض مجلدا اسمه مسودات مستبعدا، وملفا داخله اسمه موجز.txt. لا يكتب المساعد «عاد الملف إلى القائمة» لمجرد رؤية ! في اقتراح قاعدة تخصه. يقرأ حالة المجلد الأب مع قاعدة الملف.

لا نحتاج في هذا المثال إلى تجربة أنماط على جهاز. نراجع شرطا منشورا، ولا نصمم قواعد شاملة لكل مشروع أو نقدم نتيجة git status مخترعة. إذا اختلفت القواعد الفعلية، تحتاج القراءة مادتها.

أي استنتاج يبقى خارج النمط؟

يمكن أن يكتب المساعد: «القاعدة المقترحة تخص التجاهل؛ لا تثبت خروج تقرير أ من التتبع». تعطي الجملة حدا دقيقا دون اقتراح إجراء على ملف المستخدم.

لا يحول المثال التجاهل إلى حذف للمحتوى من القرص أو إلى محو تاريخ سابق. ولو طلب أحد وصف معالجة كشف معلومات، فلن تكفي بطاقة نمط لإثبات تلك النتيجة. هذه حدود ما قدمناه، وليست خطة استجابة أو وعد أمان.

لم نضف ملفا أو نغير الفهرس أو نشغل أمرا. الرسم يقسم الحالة إلى فرعين قبل قراءة القاعدة؛ يمنع إسناد نتيجة الملف غير المتتبع إلى ملف له عضوية مختلفة.

المصادر ومتابعة القراءة

  1. Git official documentation: gitignore (يفتح في نافذة جديدة)git-scm.com

أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.