Protected tags¶
الـ protected tag في ليڤانت غيت (LevantGit) قاعدة تحدّد من يستطيع إنشاء tag يطابق اسمًا أو نمطًا معيّنًا، أو تعديله أو حذفه. تضبطها من Settings ← Tags باسم صريح أو نمط glob أو تعبير نمطي، وتختار المستخدمين والـ teams المسموح لهم؛ ومن سواهم يرى رسالة رفض عند push الـ tag في الطرفية.
لماذا تحتاجها؟ الـ tags غالبًا هي ما تبني عليه الإصدارات وعمليات النشر؛ tag باسم v2.0.0 خاطئ
أو مُعاد كتابته قد يربك كل من يعتمد على مشروعك. بالـ protected tags تضمن أن tags الإصدار لا
ينشئها إلا من تثق بهم.
ملاحظة
إدارة هذه القواعد تحتاج صلاحية admin على الـ repository أو أن تكون owner له؛ راجع Permissions.
إعداد protected tag¶
- افتح الـ repository ثم Settings ← Tags.
- اكتب في حقل النمط اسمًا واحدًا، أو نمط glob، أو تعبيرًا نمطيًا (regular expression).
- اختر المستخدمين و/أو الـ teams المسموح لهم. إن تركت الحقلين فارغين فلن يستطيع أحد إنشاء هذا الـ tag أو تعديله.
- اضغط Save.
تسري القاعدة على كل الطرق: الـ push بالـ tags من Git، وإنشاء الإصدار من الواجهة، وواجهة API. من يحاول تنفيذ push لـ tag مطابق وهو خارج القائمة يرى رسالة رفض في الطرفية.
نصيحة
تَرْك القائمتين فارغتين طريقة سريعة لتجميد tag موجود: لا أحد يستطيع حذفه أو نقله إلى commit أخرى.
الأنماط¶
يقبل حقل النمط صياغة glob أو تعبيرًا نمطيًا. للتعبير النمطي أحِط النمط بشرطتين مائلتين /.../،
وهكذا يميّزه ليڤانت غيت عن glob.
أمثلة:
| النوع | نمط الـ protected tag | tags قد تطابقه |
|---|---|---|
| Glob | v* |
v، v-1، version2 |
| Glob | v[0-9] |
v0، v1 حتى v9 |
| Glob | *-release |
2.1-release، final-release |
| Glob | release |
release فقط |
| Glob | *release* |
release، 2.1-release، 1_release-candidate |
| Glob | {v,rel}-* |
v-، v-1، v-final، rel-، rel-x |
| Glob | * |
كل أسماء الـ tags |
| Regex | /\Av/ |
v، v-1، version2 |
| Regex | /\Av[0-9]\z/ |
v0، v1 حتى v9 |
| Regex | /\Av\d+\.\d+\.\d+\z/ |
v1.0.17، v2.1.0 |
| Regex | /\Av\d+(\.\d+){0,2}\z/ |
v1، v2.1، v1.2.34 |
| Regex | /-release\z/ |
2.1-release، final-release |
| Regex | /release/ |
release، 2.1-release، 1_release-candidate |
| Regex | /\Arelease\z/ |
release فقط |
| Regex | /^release$/ |
release فقط |
| Regex | /\A(v\|rel)-/ |
v-، v-1، v-final، rel-، rel-x |
| Regex | /.+/ |
كل أسماء الـ tags |
بعض الملاحظات على الجدول:
- في glob، النجمة
*تطابق أي عدد من الأحرف، والأقواس المربّعة[0-9]تطابق حرفًا واحدًا من المجموعة، والأقواس المعقوفة{v,rel}تطابق أحد البدائل. - في التعابير النمطية،
\Aتعني «بداية الاسم» و\zتعني «نهايته»؛ من دونهما يطابق النمط أي tag يحتوي النص، كما في/release/. - النمط
/\Av\d+\.\d+\.\d+\z/هو الأنسب لمن يتّبع الترقيم الدلالي (semantic versioning) مثلv1.4.2.
مثال عملي¶
تريد أن يكون إنشاء tags الإصدار من حق team «الإصدارات» فقط، مع ترك حرية الـ tags التجريبية للجميع:
- أنشئ قاعدة بالنمط
/\Av\d+\.\d+\.\d+\z/واختر team الإصدارات في قائمة الـ teams. - لا تنشئ قاعدة لبقية الـ tags؛ ما لا تطابقه قاعدة يبقى مفتوحًا لكل من له صلاحية write.
الآن v1.4.2 لا ينفّذ له push إلا الـ team، بينما test-build-17 ينفّذه أي مساهم.
ماذا بعد؟¶
- Protected branches لحماية الـ branches بالمنطق نفسه.
- Permissions لفهم من يستطيع تنفيذ push أصلًا.
- قاموس المصطلحات إن صادفت مصطلحًا غير مألوف.
هذه الصفحة مبنية على وثائق Gitea (رخصة MIT) بعد ترجمتها وتبسيطها.