اذهب واحصل على مستودع خاص: دليل خطوة بخطوة

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

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

ابدأ الدورة

Go get للمستودع الخاص: لماذا هو مؤلم للمبتدئين؟



لقد كتبت حزمة Go رائعة، ورفعتها على GitHub في مستودع خاص، والآن تريد استخدامها في مشروع آخر. تقوم بتنفيذ go get github.com/yourname/secret-lib — وتحصل على خطأ 403 Forbidden أو remote: Repository not found. هل هذا مألوف؟



هذه الحالة هي واحدة من أكثر الفخاخ شيوعاً لمطوري Go المبتدئين. السؤال على Stack Overflow "ما هي الطريقة الصحيحة لـ "go get" لمستودع خاص؟" حصل على آلاف المشاهدات. المشكلة هي أن go get يستخدم HTTPS افتراضياً، وليس SSH، ولا يعرف بيانات اعتمادك.



في هذه المقالة، سنشرح ثلاث طرق عملية لإعداد go get للمستودعات الخاصة: عبر .gitconfig، و .netrc، ومتغير البيئة GOPRIVATE. ستتعلم كيفية تجنب الأخطاء وتوفير ساعات من التصحيح.



لماذا لا يعمل go get مع المستودعات الخاصة؟



افتراضياً، يحاول go get تنزيل الوحدة عبر HTTPS. بالنسبة للمستودعات العامة، هذا جيد — الوصول المجهول يعمل. لكن المستودعات الخاصة تتطلب مصادقة. Go لا يعرف كيفية إدراج اسم المستخدم/كلمة المرور أو الرمز المميز تلقائياً.



المشكلة الثانية هي آلية اكتشاف الوحدات. Go يتحقق أولاً مما إذا كان المستودع موجوداً على GitHub/GitLab/Bitbucket، عن طريق تحليل صفحة HTML. بالنسبة للمستودعات الخاصة، هذه الصفحة غير متاحة بدون تفويض. ومن هنا يأتي الخطأ repository not found، على الرغم من أن المستودع موجود.



الطريقة 1: تعديل ~/.gitconfig (الأسهل)



أسهل طريقة هي إجبار Git على استخدام SSH بدلاً من HTTPS لنطاق معين. أضف الأسطر التالية إلى ملف ~/.gitconfig:



[url "git@github.com:"]    insteadOf = https://github.com/


الآن، أي طلب إلى https://github.com/ سيتم استبداله تلقائياً بـ SSH. تأكد من أن لديك مفتاح SSH مضبوطاً ومضافاً إلى حساب GitHub/GitLab الخاص بك.



نتحقق:

go get github.com/your-org/private-repo# يعمل بدون أخطاء!


هام: هذه الطريقة تغير السلوك لـ جميع المستودعات على GitHub. إذا كنت تحتاجها فقط لواحد، استخدم إعداداً أكثر دقة:



[url "git@github.com:your-org/"]    insteadOf = https://github.com/your-org/


الطريقة 2: .netrc للرموز المميزة وكلمات المرور



إذا كنت تفضل HTTPS (مثلاً في CI/CD)، استخدم ملف ~/.netrc. Go يعرف كيفية قراءة هذا الملف وإدراج بيانات الاعتماد.



أنشئ ملف ~/.netrc بصلاحيات 600:



machine github.comlogin your-github-usernamepassword your-personal-access-token


أين تحصل على الرمز المميز؟ على GitHub: Settings → Developer settings → Personal access tokens → Generate new token. اختر صلاحيات repo (للمستودعات الخاصة).



بعد ذلك:

go get github.com/your-org/private-repo


لـ GitLab:

machine gitlab.comlogin your-gitlab-usernamepassword your-gitlab-access-token


هذه الطريقة مثالية لـ CI/CD، حيث ليس من السهل دائماً تخزين مفاتيح SSH.



الطريقة 3: GOPRIVATE — طوق النجاة للوحدات



متغير البيئة GOPRIVATE يخبر Go: "مرحباً، هذه الوحدات خاصة، لا تحاول التحقق منها عبر البروكسي العام ولا تذهب إلى صفحات HTML الخاصة بها". هذا يحل مشكلة "repository not found".



قم بتعيينه في الطرفية (أو اكتبه في ~/.bashrc / ~/.zshrc):



export GOPRIVATE=github.com/your-org/*


الآن، سيتجاهل Go بروكسي الوحدات العام (proxy.golang.org) لجميع مستودعات مؤسستك. سيصبح أمر go get ناجحاً.

المدونات

توصيات الكتب