«go get» وGitHub: كسر جدار «terminal prompts disabled»

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

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

ابدأ الدورة

مقدمة: عندما يتحول الأمر البسيط go get إلى لغز

\n\n

هل سبق لك أن حاولت تنفيذ go get github.com/حسابك/مستودع-خاص وتلقيت رسالة باردة غير ودية؟

\n\n
go get github.com/حسابك/مستودع-خاص: \n  module github.com/حسابك/مستودع-خاص: \n  git ls-remote -q origin in /tmp/...: exit status 128:\n    remote: Invalid username or password.\n    fatal: Authentication failed for 'https://github.com/حسابك/مستودع-خاص.git'
\n\n

أو، الأكثر غموضًا:

\n
go get github.com/حسابك/مستودع-خاص: \n  terminal prompts disabled\n  Confirm the import path was entered correctly.\n  If this is a private repo, see https://golang.org/doc/faq#git_https
\n\n

موقف مألوف؟ إذا كان الأمر كذلك، فأنت في المكان الصحيح. هذا الخطأ هو «حجر عثرة» كلاسيكي لمطوري Go الذين يعملون مع المستودعات الخاصة على GitHub. على Stack Overflow، حظي هذا السؤال بآلاف المشاهدات، واليوم سنحله نهائيًا.

\n\n

في هذه المقالة، لن نحل المشكلة فحسب، بل سنفهم لماذا تحدث، ونتعلم كيفية إعداد البيئة بحيث يعمل go get مع المستودعات الخاصة بسلاسة. هيا بنا!

\n\n

لماذا يرفض Go العمل مع المستودعات الخاصة؟

\n\n

لفهم السبب، علينا إلقاء نظرة تحت غطاء Go. عند تنفيذ go get، تقوم أداة Go بعدة أشياء:

\n\n
    \n
  1. تحاول استنساخ المستودع عبر HTTPS (هذا هو البروتوكول الافتراضي).
  2. \n
  3. إذا كان المستودع خاصًا، يطلب Git المصادقة (اسم المستخدم/كلمة المرور).
  4. \n
  5. Go، افتراضيًا، يعطل الطلبات التفاعلية في الطرفية - وهذا هو بالضبط «terminal prompts disabled».
  6. \n
\n\n

لماذا يفعل Go ذلك؟ الأمر بسيط: في البناء التلقائي أو في خطوط أنابيب CI/CD، إدخال كلمة المرور التفاعلي غير ممكن. لذلك يفضل Go «السقوط» مع خطأ بدلاً من التعلق في انتظار الإدخال.

\n\n

الفكرة الأساسية: خطأ «terminal prompts disabled» ليس عيبًا، بل ميزة. Go يقول لك: «لا أستطيع أن أسألك عن كلمة المرور، أعطني بيانات اعتماد جاهزة». ومهمتنا هي توفيرها.

\n\n

الطريقة 1: استخدام SSH (الأكثر موثوقية وصحة)

\n\n

هذه هي الطريقة الموصى بها. مفاتيح SSH آمنة ومريحة ولا تتطلب إدخال كلمة مرور في كل مرة.

\n\n

الخطوة 1. إنشاء مفتاح SSH (إذا لم يكن موجودًا)

\n

افتح الطرفية ونفذ:

\n
ssh-keygen -t ed25519 -C "بريدك_الإلكتروني@example.com"
\n

اضغط Enter لحفظ المفتاح في المجلد القياسي (~/.ssh/id_ed25519). يمكنك إضافة عبارة مرور - فهذا يزيد الأمان.

\n\n

الخطوة 2. إضافة المفتاح إلى وكيل SSH

\n
eval "$(ssh-agent -s)"\nssh-add ~/.ssh/id_ed25519
\n\n

الخطوة 3. إضافة المفتاح العام إلى GitHub

\n

انسخ محتوى ~/.ssh/id_ed25519.pub:

\n
cat ~/.ssh/id_ed25519.pub
\n

انتقل إلى GitHub ← Settings ← SSH and GPG keys ← New SSH key. الصق المفتاح واحفظه.

\n\n

الخطوة 4. إعداد Git لاستخدام SSH

\n

الآن الجزء الأهم: يجب إجبار Go على استخدام SSH بدلاً من HTTPS. للقيام بذلك، قم بتحرير الملف ~/.gitconfig:

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

هذا التوجيه يخبر Git: «عندما ترى https://github.com/ - استخدم git@github.com: (SSH)».

\n\n

الخطوة 5. جرب مرة أخرى

\n
go get github.com/حسابك/مستودع-خاص@latest
\n

إذا تم الإعداد بشكل صحيح - سيختفي الخطأ. سيستخدم Go SSH للمصادقة، وسيوفر وكيل SSH المفتاح.

\n\n

الطريقة 2: استخدام رمز الوصول الشخصي (PAT) - لـ CI/CD والنصوص البرمجية

\n\n

SSH مناسب تمامًا للتطوير المحلي

المدونات

توصيات الكتب