كيفية تحديد آخر commit في go.mod؟ دليل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا قد تحتاج إلى commit "حي"

\n

هل سبق لك أن كتبت كودًا بلغة Go، وقمت بتوصيل مكتبة عبر go get، ثم اكتشفت أن مؤلفها أصلح خطأً حرجًا، لكنه لم يصدر علامة (release) جديدة بعد؟ أو ربما تقوم أنت بتطوير مكتبة وتريد اختبارها في المشروع الرئيسي قبل نشر الإصدار؟

\n

في وحدات Go، هناك ميزة رائعة: يمكنك تحديد في go.mod ليس فقط رقم الإصدار (v1.2.3)، بل commit محدد من مستودع Git. هذا يسمح لك بالعمل مع أحدث إصدار من الكود، حتى لو لم يكن مغلفًا بعلامة إصدار بعد.

\n

هذه المقالة هي ترجمة وتكييف لأحد أكثر الأسئلة شيوعًا على Stack Overflow في عالم Go. سنشرح كيفية القيام بذلك بشكل صحيح، وما هي المخاطر المحتملة، وكيف لا تفسد بناءك.

\n\n

ما هو go.mod ولماذا نحتاج إلى commits فيه؟

\n

go.mod هو ملف موجود في جذر مشروع Go الخاص بك. يصف جميع التبعيات (الوحدات) التي يحتاجها تطبيقك. عادةً ما تبدو الأسطر هكذا:

\n
require (\n    github.com/someuser/somelib v1.2.3\n)
\n

لكن ماذا لو كانت الميزة التي تحتاجها غير موجودة في v1.2.3، ولكنها موجودة فقط في آخر commit على الفرع main؟ في Go، يتم حل ذلك باستخدام pseudo-versions.

\n\n

ما هو pseudo-version؟

\n

هو سلسلة نصية خاصة تحل محل رقم الإصدار العادي. تتكون من:

\n
    \n
  • الإصدار الأساسي (إذا كان هناك علامة تفرعت منها)
  • \n
  • وقت الـ commit (بتنسيق yyyymmddhhmmss)
  • \n
  • هاش الـ commit (أول 12 حرفًا)
  • \n
\n

مثال: v0.0.0-20250320120000-abc123def456

\n

لا تخف من هذه السلسلة الطويلة - فالأداة go هي التي تولدها دائمًا تقريبًا.

\n\n

الطريقة رقم 1: استخدام go get مع العلم @latest

\n

هذه هي الطريقة الأسهل والأكثر أمانًا. أنت فقط تقول لـ Go: "خذ أحدث إصدار من المستودع".

\n

الخطوة 1: افتح الطرفية (Terminal) في جذر مشروعك.

\n

الخطوة 2: نفذ الأمر التالي:

\n
go get github.com/someuser/somelib@latest
\n

بعد ذلك، سيقوم Go بما يلي:

\n
    \n
  • تنزيل آخر commit من الفرع الافتراضي (عادةً main أو master).
  • \n
  • توليد pseudo-version.
  • \n
  • تحديث go.mod و go.sum تلقائيًا.
  • \n
\n

النتيجة في go.mod:

\n
require (\n    github.com/someuser/somelib v0.0.0-20250320120000-abc123def456\n)
\n

تم! لقد قمت للتو بربط المشروع بأحدث commit.

\n\n

إذا كنت بحاجة إلى تحديد هاش commit محدد

\n

إذا كنت تعرف الهاش الدقيق (مثل abc123def456789)، يمكنك إدخاله مباشرة:

\n
go get github.com/someuser/somelib@abc123def456789
\n

سيقوم Go بتحويله إلى pseudo-version.

\n\n

الطريقة رقم 2: التحرير اليدوي لملف go.mod

\n

أحيانًا تحتاج إلى تحرير الملف يدويًا (مثلًا إذا لم يكن لديك وصول إلى الطرفية أو كنت تكتب سكريبت CI).

\n

الخطوة 1: افتح go.mod في أي محرر نصوص.

\n

الخطوة 2: ابحث عن السطر الذي يحتوي على التبعية المطلوبة واستبدل الإصدار بـ latest أو بهاش محدد.

\n
require (\n    github.com/someuser/somelib latest\n)
\n

الخطوة 3: احفظ الملف ونفذ في الطرفية:

\n
go mod tidy
\n

الأمر go mod tidy سيقوم بسحب التبعيات المفقودة، وإزالة الزائدة، واستبدال كلمة latest بـ pseudo-version الفعلي.

\n

هام: إذا قمت بكتابة الهاش يدويًا (مثل v0.0.0-abc123def456)، فقد يظهر خطأ من Go. من الأفضل دائمًا تشغيل go mod tidy بعد التعديلات اليدوية.

المدونات

توصيات الكتب