فهم المستودعات البعيدة
المستودعات البعيدة هي نسخ من مشروعك مستضافة على الإنترنت أو الشبكة. فهم كيفية العمل مع المستودعات البعيدة أمر ضروري للتعاون والنسخ الاحتياطي لعملك. في هذا الدرس، سنستكشف ما هي المستودعات البعيدة وكيفية إدارتها بفعالية.
ما هي المستودعات البعيدة؟
المستودع البعيد هو نسخة من مشروعك مستضافة في موقع آخر، عادةً على خادم يمكن الوصول إليه عبر الإنترنت. تتيح المستودعات البعيدة لعدة مطورين التعاون على نفس المشروع.
مفهوم أساسي: يمكن لمستودعك المحلي الاتصال بعدة مستودعات بعيدة، مما يتيح لك دفع وسحب التغييرات من وإلى مواقع مختلفة.
عرض المستودعات البعيدة
لرؤية المستودعات البعيدة المكونة لمشروعك:
# سرد جميع المستودعات البعيدة المكونة
git remote
# سرد المستودعات البعيدة مع عناوين URL الخاصة بها
git remote -v
# مثال على المخرجات:
origin https://github.com/user/repo.git (fetch)
origin https://github.com/user/repo.git (push)
upstream https://github.com/original/repo.git (fetch)
upstream https://github.com/original/repo.git (push)
نصيحة: علامة -v تعرض لك كلاً من عناوين URL للجلب والدفع لكل مستودع بعيد. عادةً ما تكون هذه متطابقة، ولكن يمكن أن تكون مختلفة إذا لزم الأمر.
فهم "Origin"
عند استنساخ مستودع، يقوم Git تلقائياً بتسمية المستودع البعيد "origin". هذا مجرد اتفاقية - ليس هناك شيء خاص بشأن اسم "origin":
# استنساخ مستودع
git clone https://github.com/user/repo.git
# ينشئ Git تلقائياً مستودعاً بعيداً باسم "origin"
# يشير إلى المستودع المستنسخ
git remote -v
# origin https://github.com/user/repo.git (fetch)
# origin https://github.com/user/repo.git (push)
إضافة مستودعات بعيدة
يمكنك إضافة مستودعات بعيدة جديدة إلى مستودعك المحلي:
# الصيغة الأساسية
git remote add <name> <url>
# إضافة مستودع بعيد باسم "upstream"
git remote add upstream https://github.com/original/repo.git
# إضافة مستودع بعيد باسم "backup"
git remote add backup https://gitlab.com/user/repo.git
# التحقق من إضافة المستودع البعيد
git remote -v
الأسماء الشائعة:
- origin - مستودعك البعيد الرئيسي (عادةً نسختك المتشعبة أو المستودع الرئيسي)
- upstream - المستودع الأصلي (عند العمل مع النسخ المتشعبة)
- backup - موقع نسخ احتياطي لكودك
إعادة تسمية المستودعات البعيدة
يمكنك إعادة تسمية مستودع بعيد إذا لزم الأمر:
# إعادة تسمية مستودع بعيد
git remote rename <old-name> <new-name>
# مثال: إعادة تسمية "origin" إلى "github"
git remote rename origin github
# التحقق من التغيير
git remote -v
إزالة المستودعات البعيدة
لإزالة اتصال مستودع بعيد:
# إزالة مستودع بعيد
git remote remove <name>
# أو
git remote rm <name>
# مثال: إزالة المستودع البعيد backup
git remote remove backup
# التحقق من إزالته
git remote -v
مهم: إزالة مستودع بعيد تزيل الاتصال فقط من مستودعك المحلي. لا تحذف المستودع البعيد نفسه أو تؤثر على المستخدمين الآخرين.
فحص المستودعات البعيدة
الحصول على معلومات مفصلة حول مستودع بعيد محدد:
# عرض معلومات مفصلة حول مستودع بعيد
git remote show <name>
# مثال: فحص origin
git remote show origin
# مثال على المخرجات:
* remote origin
Fetch URL: https://github.com/user/repo.git
Push URL: https://github.com/user/repo.git
HEAD branch: main
Remote branches:
main tracked
develop tracked
feature tracked
Local branch configured for 'git pull':
main merges with remote main
Local ref configured for 'git push':
main pushes to main (up to date)
فروع التتبع البعيدة
فروع التتبع البعيدة هي مراجع لحالة الفروع على مستودعاتك البعيدة. تأخذ الشكل <remote>/<branch>:
# سرد جميع الفروع بما في ذلك فروع التتبع البعيدة
git branch -a
# مثال على المخرجات:
* main
develop
remotes/origin/main
remotes/origin/develop
remotes/origin/feature-login
remotes/upstream/main
نصيحة: فروع التتبع البعيدة للقراءة فقط من منظورك. يتم تحديثها عند الجلب أو السحب من المستودع البعيد.
فهم فروع Upstream
فرع upstream هو الفرع البعيد الذي يتتبعه فرعك المحلي. هذه العلاقة تتيح لـ Git معرفة الفرع البعيد الذي يجب الدفع إليه أو السحب منه:
# عرض فرع upstream للفرع الحالي
git branch -vv
# مثال على المخرجات:
* main abc1234 [origin/main] Latest commit
develop def5678 [origin/develop: ahead 2] Work in progress
feature ghi9012 No upstream configured
# تعيين فرع upstream للفرع الحالي
git branch --set-upstream-to=origin/main
# أو تعيين upstream عند الدفع
git push -u origin feature-branch
سير عمل المستودعات البعيدة المتعددة
سيناريو شائع هو العمل مع مستودعات بعيدة متعددة، خاصة عند المساهمة في المصادر المفتوحة:
سير عمل Fork النموذجي:
1. عمل Fork للمستودع الأصلي على GitHub
2. استنساخ النسخة المتشعبة:
git clone https://github.com/YOUR_USERNAME/repo.git
3. إضافة المستودع الأصلي كـ "upstream":
git remote add upstream https://github.com/ORIGINAL_OWNER/repo.git
4. الآن لديك مستودعان بعيدان:
origin → نسختك المتشعبة (يمكنك الدفع هنا)
upstream → المستودع الأصلي (للقراءة فقط بالنسبة لك)
5. جلب التحديثات من upstream:
git fetch upstream
6. دمج التحديثات في فرعك المحلي:
git merge upstream/main
تغيير عناوين URL البعيدة
يمكنك تغيير عنوان URL لمستودع بعيد موجود:
# تغيير عنوان URL البعيد
git remote set-url <name> <new-url>
# مثال: التبديل من HTTPS إلى SSH
git remote set-url origin git@github.com:user/repo.git
# تغيير عنوان URL للجلب بشكل منفصل عن الدفع
git remote set-url --push origin <push-url>
# التحقق من التغيير
git remote -v
حالة الاستخدام: التبديل من مصادقة HTTPS إلى SSH، أو تحديث عنوان URL بعد نقل المستودع أو إعادة تسميته.
عناوين URL لـ HTTPS مقابل SSH
هناك بروتوكولان رئيسيان للاتصال بالمستودعات البعيدة:
عناوين URL لـ HTTPS:
https://github.com/user/repo.git
المزايا:
✓ تعمل في كل مكان (لا توجد مشاكل جدار ناري)
✓ سهلة الإعداد
✓ يمكن استخدام رموز الوصول الشخصية
العيوب:
✗ قد تتطلب إدخال بيانات الاعتماد بشكل متكرر
✗ أقل أماناً إذا تم تخزين كلمات المرور
عناوين URL لـ SSH:
git@github.com:user/repo.git
المزايا:
✓ أكثر أماناً (يستخدم مفاتيح SSH)
✓ لا توجد مطالبات بكلمة المرور بعد الإعداد
✓ مصادقة أسرع
العيوب:
✗ يتطلب إعداد مفتاح SSH
✗ قد يتم حظره بواسطة جدران النار
جلب معلومات حول المستودعات البعيدة
تحديث معرفتك حول المستودعات البعيدة دون الدمج:
# جلب المعلومات من جميع المستودعات البعيدة
git fetch --all
# الجلب من مستودع بعيد محدد
git fetch origin
# جلب فرع محدد من المستودع البعيد
git fetch origin main
# الجلب وتقليم الفروع البعيدة المحذوفة
git fetch --prune
نصيحة: الجلب يقوم بتنزيل البيانات من المستودع البعيد لكن لا يعدل دليل العمل أو الفرع الحالي. من الآمن تشغيله في أي وقت.
إدارة المستودعات البعيدة العملية
مهام المستودعات البعيدة الشائعة:
# رؤية جميع المستودعات البعيدة
git remote -v
# إضافة مستودع بعيد جديد
git remote add production https://server.com/repo.git
# إعادة تسمية مستودع بعيد
git remote rename old-name new-name
# تغيير عنوان URL البعيد
git remote set-url origin new-url
# إزالة مستودع بعيد
git remote remove old-remote
# الحصول على معلومات مفصلة
git remote show origin
# تحديث فروع التتبع البعيدة
git fetch origin
الفروع البعيدة مقابل الفروع المحلية
فهم العلاقة بين الفروع المحلية والبعيدة:
الفروع المحلية:
- الفروع التي تنشئها وتعمل عليها محلياً
- يمكنك الالتزام بها مباشرة
- مثال: main, develop, feature-login
فروع التتبع البعيدة:
- مراجع للفروع البعيدة
- يتم تحديثها عند الجلب/السحب
- للقراءة فقط محلياً
- مثال: origin/main, upstream/develop
الفروع البعيدة:
- الفروع الموجودة على المستودع البعيد
- يتم تعديلها بالدفع إليها
- مشتركة مع المتعاونين الآخرين
تمرين عملي:
إعداد مستودعات بعيدة متعددة:
# 1. إنشاء مستودع اختباري
mkdir remote-practice
cd remote-practice
git init
# 2. إنشاء التزام
echo "# Remote Practice" > README.md
git add README.md
git commit -m "Initial commit"
# 3. إضافة مستودعات بعيدة متعددة (استخدم مستودعاتك الخاصة)
git remote add origin https://github.com/user/repo1.git
git remote add backup https://github.com/user/repo2.git
git remote add upstream https://github.com/original/repo.git
# 4. سرد جميع المستودعات البعيدة
git remote -v
# 5. الحصول على معلومات مفصلة حول origin
git remote show origin
# 6. إعادة تسمية مستودع بعيد
git remote rename backup secondary
# 7. إزالة مستودع بعيد
git remote remove secondary
# 8. التحقق من الحالة النهائية
git remote -v
استكشاف مشاكل المستودعات البعيدة وإصلاحها
المشكلة: "fatal: remote origin already exists"
الحل: قم بإزالة المستودع البعيد الموجود أولاً
git remote remove origin
git remote add origin <url>
المشكلة: لا يمكن الاتصال بالمستودع البعيد
الحل: تحقق من صحة عنوان URL
git remote -v
git remote set-url origin <correct-url>
المشكلة: فشل المصادقة
الحل: تحقق من بيانات الاعتماد أو مفاتيح SSH
# لـ HTTPS: تحقق من رمز الوصول الشخصي
# لـ SSH: تحقق من إضافة مفتاح SSH إلى GitHub
المشكلة: "no such remote"
الحل: تحقق من وجود اسم المستودع البعيد
git remote -v
الملخص
في هذا الدرس، تعلمت:
- المستودعات البعيدة هي نسخ من مشروعك مستضافة في مكان آخر
- "origin" هو الاسم الافتراضي للمستودع البعيد الرئيسي
- يمكن أن يكون لديك مستودعات بعيدة متعددة (origin, upstream, backup، إلخ)
- استخدم git remote لإضافة وإزالة وإعادة تسمية وفحص المستودعات البعيدة
- فروع التتبع البعيدة تعرض حالة الفروع البعيدة
- HTTPS و SSH هما البروتوكولان الرئيسيان لاتصالات المستودعات البعيدة
- فرع upstream هو الفرع البعيد الذي يتتبعه فرعك المحلي
التالي: في الدرس التالي، سنتعلم كيفية دفع تغييراتك إلى المستودعات البعيدة!