الدرس 14 · العمل اليومي
استخدم الوسوم وتسميات الإصدارات
أنشئ الوسم المشروح v0.1.0 عند main المفحوص وادفع هذا الوسم وحده إلى origin المحلي. ميّز كائن الوسم من الفرع والتوقيع وإصدار الاستضافة.
- المستوى: متوسط
- قراءة 5 دقائق
- فيديو 4 دقائق
- آخر تحديث
- قبل هذا الدرس: ادفع الإيداعات وانشر فرعًا
حُفظ التقدّم في هذا المتصفح.
يحمّل التشغيل الفيديو من YouTube (وضع الخصوصية المحسّنة).
ما ستتعلمه
- أنشئ وسمًا مشروحًا برسالة مقصودة.
- افحص كائن الوسم وإيداعه المحسوم مستقلين.
- ادفع وسمًا صريحًا دون نشر كل الوسوم.
- افصل إنشاء الوسم عن إصدار المضيف.
قبل البدء
تبدأ من حيث انتهى الدرس الثالث عشر: main/H7 خالٍ، والخادم main عند H7، والميزة منشورة F1، ولا وسم v0.1.0. لا نطلب توقيع الوسم.
سُجّل الفيديو باستخدام 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؛ لا تنفذ الدرس في مستودع مصدر.
نفّذ التغييرات عبر التطبيق أو الطريق الأصلي من الحالة نفسها، لا كليهما بالتتابع. يمكن التحقق بالقراءة بعد أيهما. تُسمَّى التهيئة الطرفية أصلية، لا ميزة تطبيق مختلقة.
الفكرة وأثر الأفعال
يتقدم الفرع عادةً مع الإيداعات؛ الوسم اسم مقصود الثبات. يشير الخفيف مباشرةً إلى كائن، ويضيف المشروح كائن وسم وهوية ورسالة.
يشير v0.1.0 هنا إلى كائن وسم؛ ويحسمه v0.1.0^{} إلى الإيداع. اختلاف المعرّفين متوقع ولا يعني إصدارين.
الشرح ليس توقيعًا مشفرًا. نشر وسم Git ليس كتابة إصدار مضيف أو رفع أصول أو إصدار تطبيق؛ لا يحدث شيء من ذلك هنا.
ينشئ الفعل مرجع الوسم وكائنه؛ ويضيف الدفع وسم الوجهة المختار دون تحريك HEAD أو الفروع أو الملفات.
إعداد حالة المشروع المحددة
استخدم main بعد الدرس الثالث عشر وافحص معرّف H7 وغياب الوسم. لا تضف دفترًا بعد الوسم.
في GitTree
لوحة الأوامر: Command+Shift+P (وCtrl+Shift+P على Ubuntu)، ثم الأمر المحدد حرفيًا. أفعال المرجع المسمّى في قائمة صفه، لا اختصار لوحة بلا وسيط.
- حدّد صف main/H7 الفعلي في المخطط (docs: add Leo's review reminder)، وتأكد من تغيير التذييل والهوية، ثم انقر الصف بزر الفأرة الأيمن.
- افتح وسم هنا (Tag Here) واختر إنشاء وسم مشروح هنا… (Create Annotated Tag Here…؛ تعرض قائمة الصف أيضًا إنشاء وسم هنا… (Create Tag Here…) الذي ينشئ وسمًا خفيفًا). عنوان الحوار «إنشاء وسم مشروح عند» ومعرّف الإيداع المختصر (Create an annotated tag at).
- اكتب في اسم الوسم (Tag name) القيمة v0.1.0، وفي الرسالة النص المحدد للدرس.
- تحت التوقيع (Signing) ثلاثة خيارات: اتّباع إعدادات Git (Follow Git config) وتوقيع هذا الوسم (Sign this tag) وعدم توقيع هذا الوسم (Don’t sign this tag)؛ ويذكر الحوار أن إعدادات Git لا توقّع الوسوم (tag.gpgSign غير مضبوط). اختر عدم توقيع هذا الوسم لهذا الدرس غير الموقَّع صراحةً، ولا تغيّر إعداد التوقيع العام.
- انقر إنشاء وسم (Create Tag) مرة واحدة وانتظر؛ تأكد أن v0.1.0 يشير إلى الإيداع المقصود دون تبديل الفرع المسحوب.
- في مجموعة الوسوم (Tags) بالشريط الجانبي انقر v0.1.0 بزر الفأرة الأيمن ← دفع الوسم (Push Tag) (تعرض القائمة أيضًا حذف الوسم… (Delete Tag…) وحذف الوسم من المستودع البعيد… (Delete Tag from Remote…) ولا يستخدمهما هذا الدرس). يقرأ الإشعار «دُفع الوسم v0.1.0.» (Pushed tag v0.1.0.).
- تحقق بالطرفية من نوع كائن الوسم ورسالته والإيداع الذي يشير إليه، ومن هوية الوسم على الخادم؛ لا تخلط الشرح بالتوقيع.
- اترك main خاليًا والوسم دون تغيير. لا تستخدم دفع كل الوسوم… (Push All Tags) ولا تنشئ إصدارًا لدى مزوّد الاستضافة.
لكل إيداع عادي: الملخّص (Summary) بالملخّص المحدد والوصف (Description) خالٍ؛ خيارات تعديل الإيداع الأخير (Amend Previous Commit) وتخطّي الخطّافات (Skip Hooks) وإضافة Signed-off-by (Add Signed-off-by) ومؤلف مختلف (Different Author) والدفع بعد الإيداع (Push After Commit) والسماح بإيداع فارغ (Allow Empty Commit) معطلة ودون مؤلفين مشاركين. جهّز الملفات المحددة ثم زر الإيداع ذي العدد الصحيح مرة واحدة، أو Command+Enter كبديل. درس التعديل الأخير وحده يغير خياره الصريح.
في الطرفية
البديل الأصلي عند main خالٍ:
git tag --annotate --no-sign v0.1.0 --message "First usable GitTree Features course checkpoint"
git cat-file -t v0.1.0
git for-each-ref --format='%(contents:subject)' refs/tags/v0.1.0
git rev-parse 'v0.1.0^{}'
git push --quiet origin refs/tags/v0.1.0
git ls-remote --tags origin refs/tags/v0.1.0 'refs/tags/v0.1.0^{}'
git status --shortللخيار --annotate صيغة قصيرة هي -a (git tag -a v0.1.0 -m "message")، وللخيار --message الصيغة -m؛ وفي الحالتين يخزّن Git كائن وسم له رسالته، بخلاف الوسم الخفيف git tag v0.1.0.
نجح الإنشاء والدفع؛ ناتج النوع والرسالة:
tag
First usable GitTree Features course checkpointيطابق الإيداع المحسوم main. يعرض ls-remote معرّف كائن الوسم وإيداعه الفعليين؛ سجلهما دون رموز تعليمية مصطنعة. الحالة النهائية خالية. محاولة اسم مكرر منفصلة:
git tag v0.1.0stderr الفعلي، خروج 128:
fatal: tag 'v0.1.0' already existsيبقى الوسم الأول؛ لا تستخدم -f لإخفاء التصادم.
النتيجة
حيث تنتهي: يوجد v0.1.0 مشروح محليًا وفي الوجهة برسالته المحددة ويحسم إلى H7. main وHEAD والملفات ثابتة؛ لا إصدار مستضافًا أو توقيعًا مزعومًا.
أخطاء شائعة
- وصف الوسم المشروح بأنه موقع.
- وسم صف قديم بدل main.
- دفع كل الوسوم دون قصد.
إن حدث خطأ
ألغِ الإنشاء الخاطئ قبل التأكيد. افحص هدف الوسم ونشره قبل حذف صريح؛ يحافظ رفض التكرار على المرجع القائم.
اختبر فهمك
أجب عن كل سؤال ثم اقرأ السبب. الأسئلة المعلَّمة «مطلوب» تُحتسب لإكمال الدرس.
0 من 6 صحيحة
أجب عن الأسئلة المطلوبة إجابة صحيحة لتكمل الدرس.
جرى التحقق في هذا المتصفح.
تدريب
أثبت النوع والرسالة واتفاق الإيداع مع main وطبقتي وسم الوجهة. توقع رفض التكرار مع بقاء الوسم والعمل.
تأكيد منك أنت: لا يستطيع الموقع رؤية جهازك.
لإكمال الدرس، أجب عن الأسئلة المطلوبة إجابة صحيحة وأكّد تنفيذ التمرين العملي.
خلاصة
- يضيف الشرح كائن وسم.
- ادفع الوسم المختار وحده.
- تختلف الوسوم عن إصدارات المضيف.
ذو صلة
المصطلحات الجديدة
Annotated tag — وسم مشروح; lightweight tag — وسم خفيف; tagger — منشئ الوسم; peeled commit — الإيداع المحسوم.
نص الفيديو
ترجمة التعليق الصوتي الإنجليزي للفيديو، مقطعًا بعد مقطع.
اعرض النص
- ابدأ من نقطة الحالة المحددة.
- سمِّ الفرع ونسخة الفهرس ونسخة العمل.
- أعدّ نسخة الدورة المعزولة وحدها.
- اختر الإيداع المحدد قبل الوسم.
- أنشئ وسمًا مشروحًا عند ذلك الإيداع.
- اكتب الاسم والشرح المقصود.
- الشرح لا يعني توقيعًا مشفرًا.
- لا يبدّل الوسم فرعك.
- ادفع الوسم المسمّى وحده.
- احسم الوسم لتفحص إيداعه.
- لا تفترض إصدارًا مستضافًا.
- ما هو v0.1.0 هنا؟
- نوع الكائن tag ويحسم إلى main.
- أي الادعاءات ثابتة؟
- يضيف الشرح غير الموقع بيانات دون تحريك HEAD.
- هل ينشئ الوسم إيداع main جديدًا؟
- يشير الوسم إلى إيداع موجود.
- كرر الاسم دون قوة: النتيجة؟
- خرج التكرار 128 وحافظ على الوسم.
- يختلف معرّفا الوسم وmain: تلف؟
- يختلف كائن الوسم عن إيداع هدفه.
- ما الذي يثبت النتيجة؟
- افحص طبقتي الكائن ومرجع الوجهة المختار.
- تحقّق من النتيجة الفعلية، لا رسالة وحدها.
- توقّع نتيجة المُدخل المختلف قبل الفعل.
- احتفظ بالعمل المفيد قبل الاستعادة.
- أثبت نقطة الحالة قبل المتابعة.
- احتفظ بالنتيجة المتحققة للخطوة التالية.