المستودع البعيد

6 دقيقة

جدول المحتويات


1 — المستودع المحلي مقابل المستودع البعيد

حتى الآن، عاش عملك كله على جهازك (المستودع المحلي). المستودع البعيد (remote) نسخة مستضافة على خادم (GitHub، GitLab، Bitbucket…)، متاحة للفريق كله.

المستودع المحليالمستودع البعيد
أين؟حاسوبكخادم (GitHub…)
لماذا؟العمل، الإيداعالمشاركة، النسخ الاحتياطي، التعاون
الوصولأنت وحدكالفريق كله

يؤدي المستودع البعيد ثلاثة أدوار: نسخ احتياطي (شفرك تبقى بعد عطل قرص)، ومشاركة (الفريق يصل إلى الشفرة نفسها)، ونقطة التقاء (قاعدة التعاون و CI/CD).

↑ العودة إلى الأعلى


2 — ربط مستودع بعيد

لربط مستودعك المحلي بمستودع بعيد، نضيف إليه مرجعاً يُسمّى بالعرف origin.

bash
# إضافة المستودع البعيد المسمّى "origin"
git remote add origin https://github.com/utilisateur/mon-projet.git

# التحقق من المستودعات البعيدة المعدّة
git remote -v
الأمرالأثر
git remote add origin <url>يربط المحلي بالبعيد (الاسم origin)
git remote -vيسرد البعيدين وعناوينهم
git remote remove originيزيل الربط

origin ليس سوى اسم بالعرف لـ «المستودع البعيد الرئيسي». يمكن تسميته غير ذلك، لكن الجميع يستخدم origin — حافظ على هذا العرف.

تمرين مصغّر — اكتب الأمر الذي يربط مستودعك المحلي بالمستودع البعيد https://github.com/moi/projet.git تحت الاسم origin.

عرض الحل
bash
git remote add origin https://github.com/moi/projet.git

↑ العودة إلى الأعلى


3 — دفع التغييرات

الدفع (push) هو إرسال إيداعاتك المحلية نحو المستودع البعيد.

bash
# أول دفع: نربط الفرع المحلي بالفرع البعيد بـ -u
git push -u origin main

# في المرات التالية يكفي دفع بسيط
git push
الأمرمتى يُستخدم
git push -u origin mainأول دفع لفرع (يثبّت التتبع)
git pushكل الدفعات التالية

الخيار -u (أو --set-upstream) يُستخدم مرة واحدة لكل فرع: يربط فرعك المحلي بتوأمه البعيد. بعد ذلك يعرف git push و git pull ماذا يفعلان وحدهما.

تمرين مصغّر — اكتب أمر أول دفع للفرع main نحو origin، مع تثبيت التتبع.

عرض الحل
bash
git push -u origin main

↑ العودة إلى الأعلى


4 — استرجاع التغييرات

عندما يدفع زميل شفرة، يجب أن تسترجع تغييراته لتبقى محدَّثاً.

bash
# الاسترجاع والدمج للتغييرات البعيدة
git pull

# الاسترجاع بلا دمج (للمعاينة أولاً)
git fetch
الأمرالأثر
git fetchينزّل المستجدات البعيدة، دون تعديل عملك
git mergeيدمج ما استُرجع في فرعك
git pullfetch + merge في أمر واحد

عادة جيدة: نفّذ git pull قبل بدء العمل وقبل الدفع. هذا يتجنّب معظم التعارضات، لأنك تنطلق دائماً من أحدث إصدار.

تمرين مصغّر — أي أمر يسترجع الإيداعات البعيدة دون دمجها في فرعك، لمعاينتها أولاً؟

عرض الحل
bash
git fetch

↑ العودة إلى الأعلى


5 — استنساخ مستودع

الاستنساخ (clone) هو إنشاء نسخة محلية كاملة من مستودع بعيد موجود — عادة للانضمام إلى مشروع.

bash
# استنساخ مستودع (ينشئ مجلداً وينزّل السجل كله)
git clone https://github.com/utilisateur/mon-projet.git

# الاستنساخ في مجلد باسم محدَّد
git clone https://github.com/utilisateur/mon-projet.git mon-dossier

يفعل git clone كل شيء دفعة واحدة:

  1. ينزّل المستودع كاملاً (ملفات + سجل).
  2. ينشئ مجلداً محلياً.
  3. يعدّ origin تلقائياً نحو العنوان المستنسَخ.
git init + remote addgit clone
لنشر مشروع موجود محلياًلاسترجاع مشروع موجود عن بُعد

الخلاصة: نستنسخ عندما يوجد المشروع أصلاً على الخط؛ نفعل init + remote add + push عندما ننطلق من مشروع محلي لنشره.

تمرين مصغّر — اكتب الأمر الذي يستنسخ المستودع https://github.com/moi/projet.git في مجلد محلي اسمه mon-dossier.

عرض الحل
bash
git clone https://github.com/moi/projet.git mon-dossier

↑ العودة إلى الأعلى


6 — سير التعاون الكامل

هذه الدورة اليومية الكاملة للعمل التعاوني مع مستودع بعيد.

الخطوةالأمرالهدف
1git pullالانطلاق من آخر إصدار
2git add + git commitتسجيل العمل محلياً
3git pullاسترجاع ما تغيّر في الأثناء
4git pushنشر الإيداعات

هذا السير pull → عمل → commit → pull → push هو الروتين الأساسي. في المؤسسة نضيف طلبات السحب ومراجعة الشفرة — هذا موضوع الوحدة 02 (Git المتقدم و GitHub).

↑ العودة إلى الأعلى


7 — اختبار — المستودع البعيد

السؤال 1: ما المستودع البعيد؟

a) فرع محلي

b) نسخة من المستودع مستضافة على خادم، متاحة للفريق

c) ملف .gitignore

d) إيداع معيَّن

عرض الحل

الإجابة: b) — المستودع البعيد (على GitHub مثلاً) يعمل كنسخ احتياطي ونقطة مشاركة وقاعدة للتعاون.


السؤال 2: ماذا يعني عادة origin؟

a) أول إيداع في المشروع

b) الاسم العرفي للمستودع البعيد الرئيسي

c) الفرع الافتراضي

d) نوع تعارض

عرض الحل

الإجابة: b)origin الاسم العرفي للمستودع البعيد الرئيسي المرتبط بالمستودع المحلي.


السؤال 3: أي أمر يرسل إيداعاتك المحلية نحو البعيد؟

a) git pull

b) git push

c) git clone

d) git fetch

عرض الحل

الإجابة: b)git push يرسل الإيداعات المحلية نحو المستودع البعيد. git pull/fetch يفعلان العكس.


السؤال 4: ما الفرق بين git fetch و git pull؟

a) لا فرق، هما مترادفان

b) fetch ينزّل دون دمج؛ pull ينزّل ويدمج

c) pull يحذف السجل

d) fetch يرسل الإيداعات

عرض الحل

الإجابة: b)git pull = git fetch + git merge. fetch وحده يسمح بالمعاينة قبل الدمج.


السؤال 5: في أي حالة نستخدم git clone؟

a) لنشر مشروع محلي فارغ

b) لاسترجاع نسخة كاملة من مستودع موجود أصلاً عن بُعد

c) لإنشاء فرع

d) لحل تعارض

عرض الحل

الإجابة: b)git clone ينسخ مستودعاً بعيداً موجوداً محلياً ويعدّ origin تلقائياً.

↑ العودة إلى الأعلى


8 — تطبيق عملي — نشر المستودع على GitHub

المطلوب

انشر المستودع المحلي المنشأ في الدرس 06 على GitHub، ثم حاكي تعاوناً باستنساخه في مكان آخر.


التصحيح — سلسلة الأوامر المتوقعة

bash
# --- جانب المشروع المحلي الموجود ---

# 1. إنشاء مستودع فارغ على github.com (عبر الواجهة)
#    → نحصل على عنوان: https://github.com/vous/mon-premier-depot.git

# 2. ربط المحلي بالبعيد
git remote add origin https://github.com/vous/mon-premier-depot.git
git remote -v

# 3. الدفع لأول مرة
git push -u origin main

# --- محاكاة زميل ينضم إلى المشروع ---

# 4. الاستنساخ في مكان آخر (مجلد آخر)
cd ..
git clone https://github.com/vous/mon-premier-depot.git copie-collegue
cd copie-collegue

# 5. تعديل، إيداع، دفع
echo "مساهمة الزميل" >> README.md
git add README.md
git commit -m "يضيف مساهمة"
git push

# --- العودة إلى المشروع الأصلي ---

# 6. استرجاع المساهمة
cd ../mon-premier-depot
git pull

النتيجة المتوقعة: بعد git pull النهائي، يحتوي ملف README.md في المشروع الأصلي السطر الذي أضافه «الزميل». اكتملت دورة push / clone / push / pull.

لقد أنجزت تعاوناً كاملاً بـ Git وحدك. هذا بالضبط ما يحدث في الفريق، إلا أن النسختين على جهازين مختلفين.

↑ العودة إلى الأعلى


9 — الخلاصة

النقاط التي يجب تذكّرها

  1. المستودع البعيد = نسخة على خادم (GitHub): نسخ احتياطي + مشاركة + تعاون.
  2. git remote add origin <url> يربط المحلي بالبعيد.
  3. git push يرسل؛ git pull (= fetch + merge) يستقبل.
  4. git clone يسترجع مستودعاً موجوداً ويعدّ origin تلقائياً.
  5. الروتين اليومي: pull → عمل → commit → pull → push.

ما يلي

الوحدة 02 — Git المتقدم و GitHub: طلبات السحب، مراجعة الشفرة، إدارة التعارضات في الفريق، وسير العمل المهني.

↑ العودة إلى الأعلى


جميع الحقوق محفوظة. يُحظَر نسخ هذه الدورة أو نشرها أو استخدامها أو تكييفها، كلياً أو جزئياً، دون إذن كتابي مسبق من الدكتور هيثم رحومة.

دورة من إعداد الدكتور هيثم رحومة — تطوير ونشر حلول البيانات