مزامنة نسخة Git المتفرعة (Fork) مع المستودع الأصلي: دليل شامل للمطورين
عندما تساهم في مشروع مفتوح المصدر أو تعمل على نسخة متفرعة (fork) من مستودع Git، قد تجد نفسك في موقف تكون فيه نسختك المتفرعة متأخرة عن المستودع الأصلي (original repository). هذا يعني أن التغييرات الجديدة التي تمت إضافتها إلى المشروع الرئيسي لم تصل بعد إلى نسختك. في هذه المقالة، سنتعلم خطوة بخطوة كيفية مزامنة نسختك المتفرعة لضمان أن تكون دائمًا محدثة وجاهزة للمساهمة.
ملخص سريع للمطورين المشغولين
إذا كنت تبحث عن الحل مباشرة، فإليك الخطوات الأساسية لمزامنة نسختك المتفرعة (fork) مع المستودع الأصلي (upstream):
# إضافة مستودع أصلي (upstream) جديد
git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
# مزامنة نسختك المتفرعة
git fetch upstream
git checkout master
git merge upstream/master
إضافة مستودع أصلي (Upstream) جديد
عندما تقوم باستنساخ (clone) نسختك المتفرعة (fork) إلى جهازك، فإن الإعداد الافتراضي لـ Git يقوم بربطها فقط بمستودعك الخاص الذي يُعرف باسم origin. هذا يعني أن نسختك المتفرعة لا تدرك وجود المستودع الأصلي الذي تفرعت منه.
للتأكد من ذلك، يمكنك عرض المستودعات البعيدة (remote repositories) المكونة حاليًا باستخدام الأمر التالي:
git remote -v
عادةً ما سترى مخرجًا مشابهًا لهذا، يظهر فقط origin:
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
كما تلاحظ، لا يوجد أي إشارة إلى المستودع الأصلي للمشروع. لكي تتمكن من سحب التغييرات من المستودع الأصلي، يجب عليك أولاً إضافة هذا المستودع كـ remote جديد، وعادة ما يُطلق عليه اسم upstream. يمكنك القيام بذلك باستخدام الأمر التالي:
git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
تأكد من استبدال ORIGINAL_OWNER باسم المستخدم أو المنظمة المالكة للمستودع الأصلي، و ORIGINAL_REPOSITORY باسم المستودع الأصلي.
بعد إضافة upstream بنجاح، يمكنك التحقق مرة أخرى من قائمة المستودعات البعيدة:
git remote -v
الآن يجب أن تشاهد كلاً من origin و upstream:
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)
تهانينا! لقد قمت الآن بربط نسختك المتفرعة بالمستودع الأصلي، مما يفتح الباب أمام مزامنة التغييرات.
مزامنة نسختك المتفرعة (Fork) مع المستودع الأصلي
بعد إعداد المستودع البعيد upstream، أصبحت جاهزًا لسحب التغييرات ودمجها في نسختك المتفرعة. تأكد من أنك في المجلد الجذر لمشروعك وأنك تعمل على الفرع الرئيسي (عادةً master أو main). إذا لم تكن كذلك، يمكنك التبديل إلى الفرع الرئيسي باستخدام الأمر:
git checkout master
الآن، حان وقت جلب التغييرات من المستودع الأصلي (upstream). سيقوم الأمر git fetch upstream بجلب جميع الفروع والتاريخ من المستودع الأصلي، لكنه لن يدمجها تلقائيًا في فرعك المحلي:
git fetch upstream
قد ترى مخرجًا مشابهًا لهذا، يوضح جلب التغييرات:
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 7 (delta 5), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (7/7), 1.72 Kio | 160.00 Kio/s, done.
From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
909ef5a..0b228a8 master -> upstream/master
بعد جلب التغييرات، يجب عليك دمجها في فرعك الرئيسي المحلي. تأكد من أنك لا تزال على الفرع الذي تريد تحديثه (مثل master)، ثم استخدم الأمر git merge:
git merge upstream/master
سيقوم هذا الأمر بدمج التغييرات من فرع master الخاص بالمستودع الأصلي (الذي قمت بجذبه كـ upstream/master) في فرعك المحلي الحالي. قد ترى مخرجًا يوضح الملفات التي تم تحديثها:
Updating 909ef5a..0b228a8
Fast-forward
node.js/WorkingWithItems/batch-get.js | 51 ++++++++++++++++++++++++++------------------------
node.js/WorkingWithItems/batch-write.js | 95 +++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------
node.js/WorkingWithItems/delete-item.js | 37 ++++++++++++++++++------------------
node.js/WorkingWithItems/get-item.js | 31 +++++++++++++++++--------------
node.js/WorkingWithItems/put-item-conditional.js | 51 +++++++++++++++++++++++++-------------------------
node.js/WorkingWithItems/put-item.js | 49 ++++++++++++++++++++++++------------------------
node.js/WorkingWithItems/transact-get.js | 51 ++++++++++++++++++++++++++------------------------
node.js/WorkingWithItems/transact-write.js | 79 ++++++++++++++++++++++++++++++++++++++++-------------------------------------
node.js/WorkingWithItems/update-item-conditional.js | 51 ++++++++++++++++++++++++++------------------------
node.js/WorkingWithItems/update-item.js | 47 ++++++++++++++++++++++++----------------------
10 files changed, 282 insertions(+), 260 deletions(-)
الآن، أصبحت نسختك المتفرعة محدثة تمامًا مع المستودع الأصلي. يمكنك الآن دفع هذه التغييرات إلى نسختك المتفرعة على GitHub باستخدام git push origin master إذا أردت تحديثها هناك أيضًا.
الخلاصة التقنية
تُعد مزامنة النسخ المتفرعة (forks) في Git مهارة أساسية لأي مطور يعمل في بيئة مفتوحة المصدر. إن الحفاظ على تحديث نسختك المتفرعة يضمن أن تكون مساهماتك مبنية على أحدث قاعدة تعليمات برمجية، مما يقلل من تعارضات الدمج (merge conflicts) ويسهل عملية المراجعة. باتباع الخطوات الموضحة في هذا الدليل، يمكنك دائمًا الحفاظ على تزامن مشروعك مع المستودع الأصلي بكفاءة وفعالية، مما يعزز إنتاجيتك ويجعل تجربة المساهمة أكثر سلاسة.