git describe
الفحص والمقارنة
إعطاء commit اسمًا مقروءًا مبنيًا على أقرب وسم
يسمّي الأمر 'git describe' الـ commit نسبةً إلى أقرب وسم يصل إليه: الوسم نفسه إن كان الـ commit موسومًا، وإلا tag-N-gHASH (عدد N من الـ commits بعد الوسم ثم الـ hash المختصر). تستخدمه سكربتات البناء لختم كل بناء بإصدار. افتراضيًا لا يستخدم إلا الوسوم المُعلَّقة.
الصيغة
git describe [--tags] [--always] [--dirty] [--abbrev=<n>] [<commit-ish>...][ ] اختياري| أو<arg> قيمة تُستبدل... قابل للتكرار--flag خيار
الخيارات
اختيار الخيار المناسب
قراءة اسم من describe
v1.0-2-g1a2b3c4
| الأمر | المعنى |
|---|---|
v1.0 | أقرب وسم |
2 | الـ commits منذ ذلك الوسم |
g1a2b3c4 | «g» تعني git + الـ hash المختصر |
-dirty | تغييرات غير مسجَّلة (مع --dirty) |
أمثلة
وصف HEAD
git describev1.0-2-g1a2b3c4: commitَان بعد v1.0.
تضمين الوسوم الخفيفة
git describe --tagsمراعاة الوسوم المنشأة دون -a أيضًا.
عدم الفشل أبدًا
git describe --always --dirtyالـ hash إن لم يوجد وسم، و-dirty إن وُجدت تعديلات محلية.
أمثلة على سير العمل
1
git describe --tags --always --dirtyحساب نص الإصدار
2
echo "$(git describe --tags --always)" > version.txtكتابته في البناء
حل المشكلات
fatal: No names found, cannot describe anything.
السبب: المستودع بلا وسوم
أنشئ واحدًا (git tag -a v0.1 -m ...) أو استخدم --always
fatal: No annotated tags can describe ...
السبب: لا توجد إلا وسوم خفيفة
استخدم --tags، أو أعد إنشاء الوسم بـ -a
نصائح وأخطاء شائعة
أفضل الممارسات
- ✓استخدم الوسوم المُعلَّقة للإصدارات ليعمل describe دون --tags.
- ✓استخدم --always في السكربتات كي لا تفشل أبدًا.
أخطاء متكررة
- ✗الحصول على "No names found" لأن المشروع لا يملك إلا وسومًا خفيفة — أضف --tags.
- ✗قراءة g في -g1a2b3c4 كجزء من الـ hash: هي تعني «git» فقط.
الأسئلة الشائعة
A:
يستخدم الوسم الذي بينه وبين الـ commit الموصوف أقل عدد من الـ commits.