في هذا الدرس 6تصفّح المواضيع
عندما ترغب في المساهمة في مشروع مفتوح المصدر على منصة GitHub لا تملكه، فلن تكون لديك صلاحية الكتابة لرفع الفروع مباشرة إلى مستودعه. ولحل هذه المشكلة، توفر منصة GitHub عملية سحابية على جانب الخادم تُسمى الاشتقاق السحابي Fork.
وعلى خلاف الأمر git clone الذي ينسخ المستودع إلى جهازك المحلي، فإن النقر على زر Fork في GitHub ينشئ نسخة كاملة ومستقلة من المشروع داخل حسابك الشخصي على GitHub؛ وبما أنك مالك هذه النسخة المشتقة، فستمتلك صلاحيات الكتابة والرفع الكاملة عليها دون المساس بحماية المشروع الأصلي.
# 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.
# 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 الخاص بالمستودع الرسمي المخصص للقراءة فقط.
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.
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؛ مما يتيح لك فتح عدة طلبات سحب مستقلة في الوقت نفسه دون اختلاط التزاماتها.
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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 DVCS DVCS
- Distributed Version Control System
- معمارية يمتلك فيها كل مطور نسخة محلية كاملة من تاريخ المستودع وكائناته.
- للمراجعة
- 02 SSH SSH
- Secure Shell
- بروتوكول شبكي مشفر يُستخدم للمصادقة الآمنة ونقل كائنات Git عبر المفاتيح.
- للمراجعة
- 03 PR PR
- Pull Request
- مقترح على GitHub لمراجعة واختبار ودمج التزامات فرع الميزة داخل الفرع الهدف.
- للمراجعة
- 04 CI CI
- Continuous Integration
- تشغيل الاختبارات وفحوصات البناء آلياً عند رفع الالتزامات أو فتح طلبات السحب.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
نفّذ أوامر الطرفية المشروحة في الفرق بين Fork وgit clone داخل مستودع تجريبي محلي وافحص المخرجات.
-
بدّل بين الحالات الثلاث في المختبر التفاعلي ضمن قسم معمارية العمل الثلاثية للمساهمة وقارن الأوامر والمخرجات.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الفرق الجوهري بين عملية Fork على GitHub والأمر git clone؟
تنسخ عملية Fork المستودع سحابياً إلى حسابك على خوادم GitHub، بينما ينزّل git clone المستودع إلى حاسوبك المحلي.
يحتوي سطر أوامر Git القياسي على أمر مدمج باسم "git fork" ينفذ الاشتقاق دون الحاجة لمنصة استضافة.
خطأ؛ فالاشتقاق Fork هو ميزة توفرها منصات الاستضافة السحابية مثل GitHub وليس أمراً مدمجاً في Git.
في معمارية العمل الثلاثية للمصادر المفتوحة، ما الاسمان المتعارف عليهما لنسختك المشتقة وللمستودع الرسمي الأصلي؟
تُسمى نسختك الشخصية المشتقة origin، بينما يُسمى المستودع الرسمي الأصلي upstream.
أي أمر يسجّل المستودع الرسمي للمشروع تحت اللقب "upstream" بعد استنساخ نسختك المشتقة؟
يُستخدم الأمر git remote add upstream متبوعاً برابط المشروع الأصلي.
ما التسلسل القياسي لمزامنة فرعك المحلي main مع أحدث التزامات المستودع الرسمي upstream؟
الانتقال إلى main ثم تنفيذ git fetch upstream متبوعاً بدمج upstream/main.
عند المساهمة في مشاريع مفتوحة المصدر، يجب دائماً إنشاء فرع مستقل لكل مساهمة بدلاً من تسجيل الالتزامات مباشرة على الفرع main.
صواب؛ فإبقاء الفرع main نظيفاً ومطابقاً للمشروع الأصلي يمنع تداخل الالتزامات بين طلبات السحب المختلفة.
إلى أي وجهة ترفع فرع الميزة الجديد في معمارية المثلث قبل فتح طلب السحب Pull Request؟
ترفع فرع الميزة إلى نسختك المشتقة الخاصة origin باستخدام الأمر git push -u origin <branch>.
في نموذج المستودع المشترك المستخدم داخل فرق الشركات، يجب على كل مطور في الفريق إنشاء نسخة Fork منفصلة.
خطأ؛ ففي نموذج المستودع المشترك يمتلك أعضاء الفريق صلاحية الرفع المباشر لفروع الميزات إلى مستودع origin مشترك واحد.