انتقل إلى محتوى الدرس
الدرس 30
دورة Version Control

نسخ المشاريع Fork والمساهمة في المصادر المفتوحةForking and Open Source Workflow

ساهم في المشاريع مفتوحة المصدر عبر إنشاء نسخة Fork خاصة بك على GitHub، وضبط المستودعين origin وupstream، ومزامنة التحديثات الأصلية بانتظام.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

عندما ترغب في المساهمة في مشروع مفتوح المصدر على منصة GitHub لا تملكه، فلن تكون لديك صلاحية الكتابة لرفع الفروع مباشرة إلى مستودعه. ولحل هذه المشكلة، توفر منصة GitHub عملية سحابية على جانب الخادم تُسمى الاشتقاق السحابي Fork.

وعلى خلاف الأمر git clone الذي ينسخ المستودع إلى جهازك المحلي، فإن النقر على زر Fork في GitHub ينشئ نسخة كاملة ومستقلة من المشروع داخل حسابك الشخصي على GitHub؛ وبما أنك مالك هذه النسخة المشتقة، فستمتلك صلاحيات الكتابة والرفع الكاملة عليها دون المساس بحماية المشروع الأصلي.

مخطط يوضح معمارية المثلث في المصادر المفتوحة بين upstream ونسخة Fork على origin والمستنسخ المحلي
Shell
# After clicking Fork on GitHub, clone YOUR fork:
git clone [email protected]:your-user/open-project.git
cd open-project
git remote -v
# origin  [email protected]:your-user/open-project.git (fetch)
# origin  [email protected]:your-user/open-project.git (push)

يعتمد المساهمون في المصادر المفتوحة على ما يُعرف باسم معمارية العمل الثلاثية Triangle Workflow التي تربط ثلاثة مستودعات في حلقة متكاملة: المستودع الأصلي للمشروع upstream، ونسختك المشتقة على GitHub origin، والمستودع المحلي على حاسوبك.

في هذا المثلث، تجلب التحديثات الجديدة من upstream إلى جهازك المحلي، وترفع فروع ميزاتك من جهازك المحلي إلى نسختك الخاصة origin، وأخيراً تفتح طلب سحب Pull Request على GitHub تطلب فيه من upstream دمج فرعك الموجود في origin.

Shell
# Initially, only your fork (origin) is registered:
git remote -v
git status -sb
# ## main...origin/main

عندما تستنسخ نسختك المشتقة، يسجلها Git تلقائياً تحت اللقب origin، لكنه لا يضيف رابط المشروع الأصلي تلقائياً. ولإكمال أضلاع المثلث، نفّذ الأمر git remote add upstream <original-repo-url>.

وبمجرد إضافته، سيعرض الأمر git remote -v أربعة أسطر: سطرين للقب origin الخاص بنسختك القابلة للكتابة، وسطرين للقب upstream الخاص بالمستودع الرسمي المخصص للقراءة فقط.

Shell
git remote add upstream https://github.com/org/open-project.git
git remote -v
# origin    [email protected]:your-user/open-project.git (fetch)
# origin    [email protected]:your-user/open-project.git (push)
# upstream  https://github.com/org/open-project.git (fetch)
# upstream  https://github.com/org/open-project.git (push)

تستقبل المشاريع مفتوحة المصدر النشطة التزامات جديدة يومياً؛ لذا قبل البدء بأي مساهمة جديدة يجب مزامنة فرعك المحلي main ونسختك السحابية origin مع أحدث التعديلات في upstream لتجنب التعارضات.

انتقل إلى الفرع main، ونفّذ git fetch upstream لجلب التزامات المشروع الرسمي، ثم ادمج upstream/main في فرعك المحلي، وأخيراً نفّذ git push origin main لتحديث نسختك على GitHub.

Shell
git switch main
git fetch upstream
git merge upstream/main
git push origin main

القاعدة الذهبية في المساهمة بالمصادر المفتوحة هي: لا تسجل أي التزامات مباشرة على الفرع main إطلاقاً، بل اترك main مرآة نظيفة ومطابقة تماماً للفرع الرسمي upstream/main.

ولكل إصلاح أو ميزة تعمل عليها، أنشئ فرعاً مستقلاً ذا اسم وصفي انطلاقاً من main المحدّث مثل fix-navbar-rtl، وسجّل تعديلاتك داخله، ثم ارفعه إلى نسختك بالأمر git push -u origin fix-navbar-rtl؛ مما يتيح لك فتح عدة طلبات سحب مستقلة في الوقت نفسه دون اختلاط التزاماتها.

Shell
git switch main
git switch -c fix-navbar-rtl
git add src/navbar.css
git commit -m "fix: align navbar icons in RTL mode"
git push -u origin fix-navbar-rtl

يقارن الجدول التالي بين نموذجي التعاون الأساسيين على GitHub: نموذج المستودع المشترك المستخدم داخل فرق الشركات التي تمتلك صلاحية كتابة مباشرة، ونموذج الاشتقاق وطلب السحب Fork & Pull المستخدم في المشاريع مفتوحة المصدر:

وجه المقارنةنموذج المستودع المشترك للفريقنموذج Fork & Pull الثلاثي
صلاحية الكتابة والرفعيمتلك أعضاء الفريق صلاحية رفع مباشرة إلى originيرفع المساهم إلى نسخته origin وليس إلى upstream
الروابط البعيدة المسجلةرابط واحد فقط هو originرابطان هما origin للنسخة وupstream للأصلي
وجهة رفع فرع الميزةيُرفع الفرع مباشرة إلى المستودع المشترك للفريقيُرفع الفرع إلى النسخة الشخصية المشتقة للمساهم
الاستخدام الأنسبمستودعات الشركات الخاصة والمطورون الأساسيونالمشاريع مفتوحة المصدر والمساهمون الخارجيون
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

ينشئ الاشتقاق Fork نسخة سحابية خاصة بك على GitHub باسم origin، بينما يشير upstream إلى المستودع الرسمي. وفي سير عمل المثلث تجلب التحديثات من upstream/main وتحافظ على نظافة main وترفع فروع الميزات المستقلة إلى origin.

الخطوة التالية والدرس القادم

انتقل إلى الدرس التالي لإتقان طلبات السحب ومراجعة الكود على GitHub github-pull-requests-and-code-review لمراجعة الفروع ودمجها باحترافية.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Fork & Open Source المساهمة عبر Fork
ساهم في المشاريع مفتوحة المصدر عبر إنشاء نسخة Fork خاصة بك على GitHub، وضبط المستودعين origin وupstream، ومزامنة التحديثات الأصلية بانتظام.
للمراجعة
02 GitHub Fork vs git clone الفرق بين Fork وgit clone
المفهوم الأساسي لدرس نسخ المشاريع Fork والمساهمة في المصادر المفتوحة في سير عمل Git وGitHub.
للمراجعة
03 Triangle Workflow Architecture معمارية العمل الثلاثية للمساهمة
التطبيق العملي المباشر لمفهوم معمارية العمل الثلاثية للمساهمة.
للمراجعة
04 Adding the upstream Remote إضافة المستودع الأصلي upstream
قواعد التحقق وأفضل الممارسات الخاصة بـ إضافة المستودع الأصلي upstream.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 DVCS DVCS
Distributed Version Control System
معمارية يمتلك فيها كل مطور نسخة محلية كاملة من تاريخ المستودع وكائناته.
للمراجعة
02 SSH SSH
Secure Shell
بروتوكول شبكي مشفر يُستخدم للمصادقة الآمنة ونقل كائنات Git عبر المفاتيح.
للمراجعة
03 PR PR
Pull Request
مقترح على GitHub لمراجعة واختبار ودمج التزامات فرع الميزة داخل الفرع الهدف.
للمراجعة
04 CI CI
Continuous Integration
تشغيل الاختبارات وفحوصات البناء آلياً عند رفع الالتزامات أو فتح طلبات السحب.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. نفّذ أوامر الطرفية المشروحة في الفرق بين Fork وgit clone داخل مستودع تجريبي محلي وافحص المخرجات.

  2. بدّل بين الحالات الثلاث في المختبر التفاعلي ضمن قسم معمارية العمل الثلاثية للمساهمة وقارن الأوامر والمخرجات.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الفرق الجوهري بين عملية Fork على GitHub والأمر git clone؟

تنسخ عملية Fork المستودع سحابياً إلى حسابك على خوادم GitHub، بينما ينزّل git clone المستودع إلى حاسوبك المحلي.

02

يحتوي سطر أوامر Git القياسي على أمر مدمج باسم "git fork" ينفذ الاشتقاق دون الحاجة لمنصة استضافة.

خطأ؛ فالاشتقاق Fork هو ميزة توفرها منصات الاستضافة السحابية مثل GitHub وليس أمراً مدمجاً في Git.

03

في معمارية العمل الثلاثية للمصادر المفتوحة، ما الاسمان المتعارف عليهما لنسختك المشتقة وللمستودع الرسمي الأصلي؟

تُسمى نسختك الشخصية المشتقة origin، بينما يُسمى المستودع الرسمي الأصلي upstream.

04

أي أمر يسجّل المستودع الرسمي للمشروع تحت اللقب "upstream" بعد استنساخ نسختك المشتقة؟

يُستخدم الأمر git remote add upstream متبوعاً برابط المشروع الأصلي.

05

ما التسلسل القياسي لمزامنة فرعك المحلي main مع أحدث التزامات المستودع الرسمي upstream؟

الانتقال إلى main ثم تنفيذ git fetch upstream متبوعاً بدمج upstream/main.

06

عند المساهمة في مشاريع مفتوحة المصدر، يجب دائماً إنشاء فرع مستقل لكل مساهمة بدلاً من تسجيل الالتزامات مباشرة على الفرع main.

صواب؛ فإبقاء الفرع main نظيفاً ومطابقاً للمشروع الأصلي يمنع تداخل الالتزامات بين طلبات السحب المختلفة.

07

إلى أي وجهة ترفع فرع الميزة الجديد في معمارية المثلث قبل فتح طلب السحب Pull Request؟

ترفع فرع الميزة إلى نسختك المشتقة الخاصة origin باستخدام الأمر git push -u origin <branch>.

08

في نموذج المستودع المشترك المستخدم داخل فرق الشركات، يجب على كل مطور في الفريق إنشاء نسخة Fork منفصلة.

خطأ؛ ففي نموذج المستودع المشترك يمتلك أعضاء الفريق صلاحية الرفع المباشر لفروع الميزات إلى مستودع origin مشترك واحد.