الدرس 15 · العمل اليومي
تجاهل الملفات ونظّف غير المتتبَّع بأمان
أودِع سياسة التجاهل ثم عاين ملفًا مؤقتًا غير متتبَّع وأزله وحده. افصل مخرجات البناء المتجاهَلة والعمل المتتبَّع ونطاق الاستعادة.
- المستوى: متوسط
- قراءة 6 دقائق
- فيديو 6 دقائق
- آخر تحديث
- قبل هذا الدرس: اقرأ المقارنة قبل الحكم على التغيير
حُفظ التقدّم في هذا المتصفح.
يحمّل التشغيل الفيديو من YouTube (وضع الخصوصية المحسّنة).
ما ستتعلمه
- اشرح التجاهل مقابل الملفات المتتبَّعة.
- عاين تنظيفًا محدودًا.
- افحص قائمة الإزالة الفعلية.
- ميّز الحذف الأصلي من حفظ التطبيق.
قبل البدء
تبدأ من حيث انتهى الدرس الرابع عشر: main/H7 خالٍ، وملف .gitignore الأدنى يحتوي dist/ فقط، والوسم v0.1.0 ثابت عند H7. يضيف الفيديو مخرجات dist/index.html مولَّدة تخفيها القاعدة أصلًا.
سُجّل الفيديو باستخدام Git 2.52.0 وGitTree 2.0 على Ubuntu 24.04: ملف التجاهل وإيداعه والملف المؤقت والتنظيف جرت في التطبيق؛ أما حالة ما قبل والمعاينات والفحوص ففي الطرفية، مع نسخة منفصلة للمعاينات. لم يُشغَّل شيء على macOS أو Windows، وUbuntu هو نظام Linux الوحيد المسجَّل. الحد الأدنى المقروء لـ GitTree هو Git 2.39.0.
يطلب GitTree تسجيل الدخول، ثم تشمل الخطة المجانية كل خطوات الدرس. لا مزوّد أو Pro أو اعتماد API أو خدمة إنترنت مطلوبة. الوجهة المحلية المجردة ليست GitLab أو CI. الهويات خيالية example.com؛ لا تنفذ الدرس في مستودع مصدر.
نفّذ التغييرات عبر التطبيق أو الطريق الأصلي من الحالة نفسها، لا كليهما بالتتابع. يمكن التحقق بالقراءة بعد أيهما. تُسمَّى التهيئة الطرفية أصلية، لا ميزة تطبيق مختلقة.
الفكرة وأثر الأفعال
تخفي القواعد مرشحات غير متتبَّعة؛ لا توقف تتبُّع ملف في الفهرس أو تمحو التاريخ أو تحمي الأسرار. أودِع السياسة المشتركة كأي ملف.
يزيل التنظيف غير المتتبَّع في نطاقه. لا ينشئ git clean الأصلي حفظ استعادة؛ لا يسترجع سجل الإيداعات ملفًا غير محفوظ منفصلًا.
يبني تنظيف التطبيق قائمة محددة ويحفظ البايتات قبل الإزالة. يغير خيارا تضمين المتجاهَل أو المتجاهَل فقط النطاق ولا يجتمعان. وجود الحماية في المصدر لا يثبت تسجيل تراجع فعلي.
يحرك إيداع .gitignore الشجرة وmain؛ يزيل تنظيف الملف المؤقت القرص فقط دون إيداع أو بعيد. يبقى dist مع الخيارات الافتراضية.
إعداد حالة المشروع المحددة
استخدم المشروع فقط. أودِع IGNORE أولًا ثم أنشئ SCRATCH خارج مجلد scratch/ المتجاهَل ليظهر في القائمة الافتراضية. احفظ نسخة خارجية قبل الحذف الأصلي.
مدخلات الملفات كاملة
احفظ في المرحلة المحددة فقط بصيغة UTF-8 وLF وسطر نهائي. لا تلصق أسوار Markdown. ترث الملفات الثابتة نقطة البداية؛ لا تستبدل الأصل بنسخة إعادة منفصلة.
.gitignore — IGNORE
node_modules/
dist/
coverage/
reports/
.course-cache/
*.log
scratch/course-scratch.txt — SCRATCH
Disposable course scratch. No useful work.في GitTree
لوحة الأوامر: Command+Shift+P (وCtrl+Shift+P على Ubuntu)، ثم الأمر المحدد حرفيًا. أفعال المرجع المسمّى في قائمة صفه، لا اختصار لوحة بلا وسيط.
- افتح من لوحة الأوامر تحرير .gitignore… (Edit .gitignore…) فيظهر «.gitignore في gittree-features» (.gitignore in gittree-features). انقر القواعد، قاعدة في كل سطر (Rules, one per line)، حدّد الكل واكتب نص IGNORE كاملًا (أو الصقه)، ثم حفظ (Save). هذا يكتب الملف ولا ينشئ إيداعًا. (في الحوار أيضًا إضافة قالب (Add Template) وفحص لماذا يُتجاهَل هذا؟ (Why is this ignored?) لمسار.)
- افتح عرض تغييرات مجلد العمل (Show Working Changes) وراجع .gitignore وحده، ثم تجهيز الملف (Stage File)، واكتب في الملخّص
chore: ignore generated course files، ثم إيداع تغييرات ملف واحد (Commit Changes to 1 File) مرة واحدة. - ملف جديد… (New File…) ← course-scratch.txt ← إنشاء (Create)؛ احفظ نص SCRATCH كاملًا دون تجهيزه، وتأكد أن الملف غير متتبَّع.
- نفّذ المعاينة الأصلية المقتصرة على المسار أدناه؛ إن ظهر مسار مختلف فتوقف قبل الحذف.
- افتح من لوحة الأوامر تنظيف الملفات غير المتتبَّعة… (Clean Untracked Files…) فيظهر «تنظيف الملفات غير المتتبَّعة في gittree-features؟» (Clean untracked files in gittree-features?). تقرأ القائمة «ملف واحد، 0 مجلد (0 متجاهَل)، 43 B» (1 file, 0 folders (0 ignored), 43 B) وتسرد course-scratch.txt؛ وتذكر أسفلها أن لقطة استعادة لكل ملف مدرج تُحفظ تحت refs/ogt/trash قبل أي إزالة، وأن التراجع يعيد الملفات إلى أماكنها ما لم يحلّ محلّها شيء جديد.
- أبقِ تضمين المجلدات غير المتتبَّعة (Include untracked folders) وتضمين الملفات المتجاهَلة (Include ignored files) والملفات المتجاهَلة فقط (Only ignored files) معطّلة. المرشّح المتوقع هو course-scratch.txt وحده؛ اختر إلغاء (Cancel) إن ظهر عمل مفيد.
- اختر إزالة عنصر واحد (Remove 1 Item) مرة واحدة وانتظر النتيجة الفعلية. يحمي التطبيق البايتات أولًا؛ التقط هذا الدليل قبل أن تدّعي أن التراجع يعمل.
- تحقق من خلو الحالة وتجاهل dist/index.html. لا تحذف اللقطات ولا تفعّل تنظيف المتجاهَل لتجميل العرض.
لكل إيداع عادي: الملخّص (Summary) بالملخّص المحدد والوصف (Description) خالٍ؛ خيارات تعديل الإيداع الأخير (Amend Previous Commit) وتخطّي الخطّافات (Skip Hooks) وإضافة Signed-off-by (Add Signed-off-by) ومؤلف مختلف (Different Author) والدفع بعد الإيداع (Push After Commit) والسماح بإيداع فارغ (Allow Empty Commit) معطلة ودون مؤلفين مشاركين. جهّز الملفات المحددة ثم زر الإيداع ذي العدد الصحيح مرة واحدة، أو Command+Enter كبديل. درس التعديل الأخير وحده يغير خياره الصريح.
في الطرفية
احفظ IGNORE أولًا؛ بديل الإيداع الأصلي:
git add -- .gitignore
git commit --quiet -m "chore: ignore generated course files"
git check-ignore dist/index.htmlالناتج المرصود:
dist/index.htmlأنشئ SCRATCH الكامل بعد الإيداع فقط، واحفظ نسخة خارجية إن احتجته، ثم:
git clean -n -- course-scratch.txtالناتج الفعلي:
Would remove course-scratch.txtبعد تأكيد هذا المسار المؤقت وحده، البديل الأصلي للحذف لا يُكرر بعد نجاح التطبيق:
git clean -f -- course-scratch.txt
git status --shortناتج الإزالة:
Removing course-scratch.txtالحالة خالية. يقتصر -f هنا على المسار المؤقت المحدد، لا تنظيف -fdx عامًا. لم ينشئ Git الأصلي لقطة التطبيق. في معاينات بديلة غير معدلة جرت في نسخة منفصلة: لم يطبع git clean -n -X شيئًا لأن Git لا يدخل مجلد dist/ المتجاهَل دون -d؛ وسرد git clean -n -x الملف المؤقت وحده للسبب نفسه؛ أما git clean -n -x -- course-scratch.txt dist/index.html الذي يسمّي المسارين فسردهما معًا. تسمية المسار هي ما يوسّع النطاق. لا تستخدم صيغة حذف موسعة بدل الإزالة المحددة.
النتيجة
حيث تنتهي: يحمل main إيداع I8 بسياسة IGNORE الكاملة؛ الملف المؤقت غائب بعد تنظيف صريح والعمل خالٍ وdist متجاهَل والوسم والبعيد ثابتان.
أخطاء شائعة
- افتراض خروج الملف المتتبَّع من التاريخ بمجرد تجاهله.
- توسيع نطاق المتجاهَل دون مراجعة.
- توقع تراجع التطبيق عن تنظيف أصلي.
إن حدث خطأ
ألغِ إن اختلفت المعاينة. استرجاع الحذف الأصلي يحتاج النسخة الخارجية؛ تراجع التطبيق مرتبط باللقطة والسجل والمسارات الحالية.
اختبر فهمك
أجب عن كل سؤال ثم اقرأ السبب. الأسئلة المعلَّمة «مطلوب» تُحتسب لإكمال الدرس.
0 من 6 صحيحة
أجب عن الأسئلة المطلوبة إجابة صحيحة لتكمل الدرس.
جرى التحقق في هذا المتصفح.
تدريب
أثبت إيداع IGNORE وغياب المؤقت وتجاهل dist. في معاينة منفصلة توقع الفرق بين -X و-x دون حذف.
تأكيد منك أنت: لا يستطيع الموقع رؤية جهازك.
لإكمال الدرس، أجب عن الأسئلة المطلوبة إجابة صحيحة وأكّد تنفيذ التمرين العملي.
خلاصة
- التجاهل ليس إلغاء تتبُّع.
- نطاق التنظيف صريح.
- تعتمد الاستعادة على بايتات محفوظة.
ذو صلة
المصطلحات الجديدة
Ignore — تجاهُل; clean — تنظيف; untracked — غير متتبَّع; recovery snapshot — لقطة استعادة.
نص الفيديو
ترجمة التعليق الصوتي الإنجليزي للفيديو، مقطعًا بعد مقطع.
اعرض النص
- ابدأ من نقطة الحالة المحددة.
- سمِّ الفرع ونسخة الفهرس ونسخة العمل.
- أعدّ نسخة الدورة المعزولة وحدها.
- احفظ سياسة التجاهل المشتركة المحددة.
- أودِع ملف التجاهل وحده.
- أبقِ الملف المؤقت غير متتبَّع عمدًا.
- عاين المسار المسمّى أولًا.
- اقرأ كل مرشح للإزالة.
- لا توسّع خيارات التنظيف.
- أزل الملف المؤقت وحده.
- افحص ما بقي وما اختفى.
- هل يمحو التجاهل تاريخ المتتبَّع؟
- تخفي القواعد مرشحات غير متتبَّعة ولا تعيد كتابة التاريخ.
- ما الذي يبقى بعد التنظيف المحدد؟
- يُزال المؤقت المحدد وحده بهذه الخيارات.
- هل يصنع التنظيف إيداعًا؟
- يزيل الفعل بايتات خارج الفهرس.
- فعّل تضمين المتجاهَل: النطاق؟
- يغيّر التوسيع المرشحين؛ عاين مجددًا قبل الفعل.
- نُفذ clean الأصلي؛ هل التراجع مضمون؟
- لا ينشئ clean الأصلي سجل التطبيق أو نسخة للنص غير المتتبَّع.
- ما دليل التنظيف المقصود؟
- افحص المحذوف والباقي بالاستعلامات المحددة.
- تحقّق من النتيجة الفعلية، لا رسالة وحدها.
- توقّع نتيجة المُدخل المختلف قبل الفعل.
- احتفظ بالعمل المفيد قبل الاستعادة.
- أثبت نقطة الحالة قبل المتابعة.
- احتفظ بالنتيجة المتحققة للخطوة التالية.