git describe

الفحص والمقارنة

إعطاء commit اسمًا مقروءًا مبنيًا على أقرب وسم


يسمّي الأمر 'git describe' الـ commit نسبةً إلى أقرب وسم يصل إليه: الوسم نفسه إن كان الـ commit موسومًا، وإلا tag-N-gHASH (عدد N من الـ commits بعد الوسم ثم الـ hash المختصر). تستخدمه سكربتات البناء لختم كل بناء بإصدار. افتراضيًا لا يستخدم إلا الوسوم المُعلَّقة.

الصيغة

git describe [--tags] [--always] [--dirty] [--abbrev=<n>] [<commit-ish>...]
[ ] اختياري| أو<arg> قيمة تُستبدل... قابل للتكرار--flag خيار

الخيارات

انقر على أي خيار لتوسيعه

مبتدئ (3)

استخدام أي وسم، بما فيها الخفيفة، لا المُعلَّقة فقط.

عند الحاجةحين يستخدم مشروعك وسومًا خفيفة

مثال

git describe --tags

عرض الـ hash المختصر للـ commit حين لا يستطيع أي وسم وصفه.

موصى بهلا تفشل أبدًا: اطبع الـ hash المختصر حين لا يوجد وسم

مثال

git describe --always

إلحاق -dirty حين يحتوي مجلد العمل تغييرات غير مسجَّلة.

موصى بهالإشارة إلى البناءات المصنوعة من تغييرات غير مسجَّلة

مثال

git describe --dirty

اختيار الخيار المناسب

قراءة اسم من describe

v1.0-2-g1a2b3c4

الأمرالمعنى
v1.0أقرب وسم
2الـ commits منذ ذلك الوسم
g1a2b3c4«g» تعني git + الـ hash المختصر
-dirtyتغييرات غير مسجَّلة (مع --dirty)

أمثلة

وصف HEAD

git describe

v1.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.