انتقل إلى محتوى الدرس
الدرس 32
دورة Version Control

وسوم الإصدارات git tag وإصدارات GitHub ReleasesGit Tag and GitHub Releases

وثّق إصدارات مشروعك بمعيار الترقيم الدلالي SemVer، وأنشئ الوسوم الموثقة والخفيفة بالأمر git tag، وارفعها إلى الخادم البعيد لنشر GitHub Releases.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

يمثل الفرع مثل main مؤشراً متحركاً يتقدم تلقائياً مع كل التزام جديد. ولكن عندما تطلق إصداراً رسمياً من برنامجك للمستخدمين، فإنك تحتاج إلى علامة مرجعية ثابتة غير قابلة للتحرك تجمّد ذلك الالتزام تحديداً إلى الأبد؛ وفي Git تُسمى هذه العلامة الثابتة الوسم git tag.

فبمجرد ربط وسم مثل v1.0.0 بالتزام معين، فإنه لا يتحرك أبداً حتى لو تقدم الفرع main مئات الالتزامات للأمام؛ مما يمكّن فريقك في أي وقت من معاينة أو إعادة بناء النسخة الدقيقة التي تعمل في بيئة الإنتاج.

مخطط يوضح معيار الترقيم الدلالي SemVer وإنشاء الوسوم الموثقة git tag -a ورفعها إلى المستودع البعيد
Shell
# List all tags in the repository:
git tag
# List tags matching a wildcard pattern:
git tag -l "v1.*"

تتبع إصدارات البرمجيات عالمياً معيار الترقيم الدلالي للإصدارات Semantic Versioning (SemVer) الذي يكتب بالصيغة الثلاثية vMAJOR.MINOR.PATCH مثل v2.4.1:

  • الرقم الأكبر MAJOR (2): يزداد عند إجراء تغييرات جذرية غير متوافقة مع الإصدارات السابقة Breaking Changes.
  • الرقم الفرعي MINOR (4): يزداد عند إضافة ميزات ووظائف جديدة متوافقة مع الإصدارات السابقة دون كسرها.
  • رقم الترقيع PATCH (1): يزداد عند إصلاح الأخطاء البرمجية أو الثغرات الأمنية مع الحفاظ التام على التوافق.
Shell
# Initial stable release:
git tag -a v1.0.0 -m "Initial stable public release"
# After a backward-compatible bug fix:
git tag -a v1.0.1 -m "Patch: fix mobile menu overflow"

يدعم Git نوعين من الوسوم:

  1. الوسوم الموثقة Annotated Tags: تُنشأ بالخيارين git tag -a v1.0.0 -m "..." وتُحفظ ككائنات كاملة ومستقلة في قاعدة بيانات Git تتضمن اسم منشئ الوسم وبريده وتاريخ الإنشاء ورسالة الإصدار؛ وهي المعتمدة دائماً للإصدارات الرسمية.
  2. الوسوم الخفيفة Lightweight Tags: تُنشأ بدون -a أو -m، وهي مجرد مؤشر خام يحمل معرّف الالتزام فقط دون أي بيانات وصفية، وتُستخدم كعلامات شخصية مؤقتة.
Shell
# Annotated tag (recommended for releases):
git tag -a v1.2.0 -m "Release v1.2.0: Dark mode support"
# Inspect tag metadata and the tagged commit:
git show v1.2.0

افتراضياً، يربط الأمر git tag الوسم بالتزامك الحالي HEAD. أما إذا نسيت وسم إصدار معين يوم الجمعة ثم أضيفت بعده عدة التزامات جديدة، فلن تحتاج إلى إرجاع الفرع؛ بل يكفي تمرير المعرّف المختصر لذلك الالتزام السابق في نهاية الأمر: git tag -a v1.1.0 <commit-hash> -m "...".

Shell
git log --oneline -n 5
# Tag commit 9fceb02 retroactively:
git tag -a v1.1.0 9fceb02 -m "Release v1.1.0"
git show v1.1.0 --stat

من القواعد الجوهرية في Git أن الأمر git push العادي لا يرفع الوسوم المحلية إلى الخادم البعيد تلقائياً؛ بل يجب رفع الوسم صراحةً باسمه عبر git push origin v1.2.0، أو استخدام git push --follow-tags لرفع الوسوم الموثقة المرتبطة بالالتزامات المرفوعة.

وبمجرد وصول الوسم إلى GitHub، يمكنك إنشاء صفحة إطلاق رسمية GitHub Release تتضمن سجل التغييرات الآلي وملفات التحميل المضغوطة. وإذا أخطأت في تسمية وسم، فاحذفه محلياً بـ git tag -d <tag> ومن الخادم البعيد بـ git push origin --delete <tag>.

Shell
# Push a specific release tag to origin:
git push origin v1.2.0
# Or push commits + annotated tags together:
git push --follow-tags
# Delete a mistyped tag locally and on origin:
git tag -d v1.2.0-typo
git push origin --delete v1.2.0-typo

يلخص الجدول التالي جميع أوامر git tag الأساسية وعمليات إدارة الإصدارات:

العمليةالأمر القياسيملاحظات الاستخدام
إنشاء وسم موثقgit tag -a v1.0.0 -m "msg"يحفظ اسم الناشر والتاريخ والرسالة — معتمد للإصدارات
إنشاء وسم خفيفgit tag v1.0.0-localمؤشر خام للالتزام دون بيانات وصفية
وسم التزام سابقgit tag -a v0.9.0 <hash> -m "msg"يوسم التزاماً تاريخياً بأثر رجعي دون تبديل الفرع
عرض ومعاينة الوسومgit tag -l "v1.*" / git show v1.0.0تصفية قائمة الوسوم أو عرض تفاصيل الوسم والالتزام
رفع الوسم إلى GitHubgit push origin v1.0.0يرفع الوسم للسحابة لإنشاء صفحة GitHub Release
حذف الوسم محلياً وبعيداًgit tag -d <tag> / git push origin --delete <tag>يحذف الوسم من جهازك ومن الخادم السحابي
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

تمثل الوسوم git tag مؤشرات ثابتة توثق التزامات الإصدارات وفق معيار vMAJOR.MINOR.PATCH. استخدم الوسوم الموثقة git tag -a للإصدارات الرسمية وادفعها صراحةً بالأمر git push origin v1.0.0 أو git push --follow-tags.

الخطوة التالية والدرس القادم

انتقل إلى الدرس الختامي للدورة توثيق المستودع والنظافة الأمنية repository-documentation-and-security-hygiene لتأمين مستودعاتك وحماية الفرع الرئيسي والتعامل الاحترافي مع تسرب المفاتيح السرية.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 git tag & Releases وسوم الإصدارات git tag
وثّق إصدارات مشروعك بمعيار الترقيم الدلالي SemVer، وأنشئ الوسوم الموثقة والخفيفة بالأمر git tag، وارفعها إلى الخادم البعيد لنشر GitHub Releases.
للمراجعة
02 Immutable Tags vs Branches الوسم الثابت مقابل الفرع
المفهوم الأساسي لدرس وسوم الإصدارات git tag وإصدارات GitHub Releases في سير عمل Git وGitHub.
للمراجعة
03 Semantic Versioning Standard معيار الترقيم الدلالي SemVer
التطبيق العملي المباشر لمفهوم معيار الترقيم الدلالي SemVer.
للمراجعة
04 Annotated vs Lightweight Tags الوسوم الموثقة مقابل الخفيفة
قواعد التحقق وأفضل الممارسات الخاصة بـ الوسوم الموثقة مقابل الخفيفة.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 DVCS DVCS
Distributed Version Control System
معمارية يمتلك فيها كل مطور نسخة محلية كاملة من تاريخ المستودع وكائناته.
للمراجعة
02 SSH SSH
Secure Shell
بروتوكول شبكي مشفر يُستخدم للمصادقة الآمنة ونقل كائنات Git عبر المفاتيح.
للمراجعة
03 PR PR
Pull Request
مقترح على GitHub لمراجعة واختبار ودمج التزامات فرع الميزة داخل الفرع الهدف.
للمراجعة
04 CI CI
Continuous Integration
تشغيل الاختبارات وفحوصات البناء آلياً عند رفع الالتزامات أو فتح طلبات السحب.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. نفّذ أوامر الطرفية المشروحة في الوسم الثابت مقابل الفرع داخل مستودع تجريبي محلي وافحص المخرجات.

  2. بدّل بين الحالات الثلاث في المختبر التفاعلي ضمن قسم معيار الترقيم الدلالي SemVer وقارن الأوامر والمخرجات.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

بماذا يختلف الوسم (git tag) عن الفرع (git branch) في Git؟

الوسم مؤشر ثابت يشير دائماً إلى التزام محدد لإصدار معين، بينما يتحرك الفرع للأمام مع كل التزام جديد.

02

في معيار الترقيم الدلالي (vMAJOR.MINOR.PATCH)، أي رقم تزيده عند إضافة ميزة جديدة متوافقة مع الإصدارات السابقة؟

يزداد الرقم الأوسط MINOR (مثلاً من v1.1.0 إلى v1.2.0) عند إضافة ميزة جديدة متوافقة دون كسر التوافق.

03

أي أمر ينشئ وسماً موثقاً (Annotated Tag) باسم "v1.0.0" مرفقاً برسالة إصدار؟

ينشئ الأمر git tag -a v1.0.0 -m "..." وسماً موثقاً كاملاً في قاعدة بيانات Git.

04

تحفظ الوسوم الموثقة (Annotated Tags) اسم المنشئ وبريده والتاريخ والرسالة ككائن كامل داخل قاعدة بيانات Git.

صواب؛ فعلى عكس الوسوم الخفيفة، تُحفظ الوسوم الموثقة ككائنات مستقلة كاملة البيانات.

05

كيف توسم التزاماً قديماً (معرّفه 9fceb02) بأثر رجعي بالاسم v0.9.0؟

تمرر معرّف الالتزام في نهاية الأمر: git tag -a v0.9.0 9fceb02 -m "...".

06

يؤدي تنفيذ الأمر "git push" العادي إلى رفع جميع الوسوم المحلية إلى المستودع البعيد تلقائياً.

خطأ؛ فالأمر git push العادي لا يرفع الوسوم، بل يجب تحديد اسم الوسم أو استخدام --follow-tags.

07

أي أمر يرفع وسماً محدداً باسم "v1.2.0" إلى المستودع البعيد origin؟

يرفع الأمر git push origin v1.2.0 ذلك الوسم بعينه إلى الخادم البعيد.

08

كيف تحذف وسماً باسم "v1.0.0-rc" من المستودع البعيد origin؟

يحذف الأمر git push origin --delete v1.0.0-rc الوسم من الخادم البعيد.