مرحبًا مجتمع إتقان،
كما سبق وأشرت في موضوع سابق، فالمساهمة في المشاريع مفتوحة المصدر قد لا تكون حكرًا على المبرمجين فقط، وبما أننا في هذا المجتمع لدعم بناء أكبر مجتمع تقني يركز على تطوير تطبيقات القرآن الكريم وتحسين تجربة المستخدم لخدمة المسلمين حول العالم، فمن الطبيعي أن الوصول إلى هذا الهدف يتطلب تعاونًا مع مبرمجين من مختلف الخبرات، وكذلك إلى أشخاص غير مبرمجين من خلفيات متنوعة.
وبما أن فئة المبرمجين المبتدئين أو الذين هم بطور التعلم الأولي، وكذلك المساهمين غير المبرمجين -سواءً المترجمين أو المصممين أو غيرهم-، لن يكونوا على علم بكيفية المساهمة في المشاريع مفتوحة المصدر بطريقة مناسبة، فسأضع بهذه المشاركة خطوات عملية لكيفية المشاركة بهذا النوع من المشاريع، موجهة خصيصًا لهذه الفئة، وبخطوات تراعي خبراتهم التي لن تمكّنهم من التعمق في استخدامات جيتهاب من تجاربهم الأولى، إلى جانب عدم حاجة بعضهم للتعمق من الأساس.
ملاحظة: إن كنت مبرمجًا متمكنًا، فمحتوى هذا الموضوع لن يرفع من خبراتك، لكنك تستطيع الإضافة عليه بالتعليقات لمساعدة المبتدئين وإفادتهم من تجاربك الأولى وكيف تعاملت معها.
مصطلحات أساسية ستحتاج لمعرفتها قبل البدء
هناك مصطلحات أساسية لا بد من تعرفك عليها من أجل التمكن من التعامل مع مستودعات حفظ المشاريع مفتوحة المصدر مثل جيتهاب، وهذه المصطلحات هي:
- المستودع Repository: وهو المكان الذي يحتوي على كل ملفات المشروع (الكود، التوثيقات، الإعدادات…إلخ)، وسجل تعديلاته.
- عملية Fork: هي عملية إنشاء نسخة من المستودع Repository على حسابك بجيتهاب، تمكّنك من إجراء تعديلات مستقلة كليًا عن المستودع الأصلي، كما يمكن اقتراح دمجها لاحقًا عبر طلب المساهمة Pull Request.
- عملية Clone: هي عملية أخذ نسخة من المستودع Repository على جهازك المحلي. يعني بدل الاعتماد على وجودها بحسابك فقط بجيتهاب كما هو الحال بنسخة الـ Fork، تستطيع هنا تنزيلها على جهازك والعمل عليها محليًا، ودون الحاجة لوجود إنترنت متصلة بالحاسوب.
- الفرع Branch: هو عملية إنشاء فرع أو نسخة منفصلة من خط التطوير داخل المستودع، بحيث يتم استخدامها لإضافة تحديثات وميزات جديدة للمشاريع دون التأثير على النسخة الأصلية لحين إتمام العمل عليها واختبارها، ثم دمجها مع الفرع الرئيسي الذي يُعرف عادةً باسم
master أو main.
- وحدة Commit: هي وحدة لحفظ التعديلات المجراة من طرفك. يحتوي كل كومِت على الملفات الجديدة المحدثة، مع البيانات الوصفية، إلى جانب رسالة توضيحية تشرح ماذا فعلت تحديدًا. أي ما الإضافة التي قدمتها.
- الدفع Push: وهي عملية إرسال الكومِتات التي تمت محليًا على جهازك إلى المستودع على GitHub سواءً على النسخة الأصلية أو نسخة Fork الخاصة بك؛ وبهذه الخطوة تصبح التعديلات متاحة للآخرين على الإنترنت ضمن المستودع بأحد الفروع.
- طلب المساهمة Pull Request: طلب الدمج أو المساهمة Pull Request هو آلية رسمية في GitHub تتيح للمستخدم الذي يعمل على نسخة مستقلة سواءً كانت Fork أو Branch أن يقترح دمج تعديلاته مع المستودع الأصلي. ويتم الدمج الفعلي بعد مراجعة مالك المشروع أو الفريق المسؤول عن المراجعة وقبولهم لها.
- قسم المشكلات Issues: وهو القسم الذي يتم من خلاله عرض وإدارة المهام والمشاكل الخاصة بالمشروع داخل المستودع، يُستخدم لتوثيق الملاحظات، والأخطاء البرمجية، أو طلب ميزات جديدة، طرح الأسئلة أحيانًا حول المشكلة المنشورة Issue، أو مناقشة تحسينات المشروع. يساعد هذا القسم الفريق على تنظيم العمل ومعرفة ما الذي يجب إصلاحه أو تطويره، وتحديد الخبرات المطلوبة للتنفيذ.
خطوات المساهمة في المشاريع مفتوحة المصدر
تمر عملية المساهمة في المشاريع مفتوحة المصدر بعدة خطوات أساسية، كالتالي:
1. اختيار المشروع المناسب
تستطيع البحث عن المشاريع المتاحة بعدة أماكن، مثل:
ولكن قبل المساهمة في أي مشروع ومهما كانت خلفيتك، تأكد من:
- توافق المشروع مع اهتماماتك وقيمك. لا تبدأ بأي مشروع قد تجد لاحقًا أنه غير متوافق مع قيمك، فتجد نفسك تهدر وقتك وجهدك على أمر لن تقبل المشاركة فيه في النهاية.
- تطابق خبراتك مع حاجة المشروع (برمجيًا مثلًا، تأكد أن اللغة المستخدمة متوافقة مع اللغة التي تعرفها؛ أما للترجمة مثلًا، فتأكد من فهمك للغة المتاحة بها ملفات المشروع حتى تكون قادرًا على تقديم مساهمة صحيحة ودقيقة).
- فهم ما يقدمه المشروع، وذلك عبر التأكد سريعًا من محتوى مستودع المشروع وفهم محتواه.
- التأكد من وجود حاجة لتطوير جانب معين بالمشروع، إذ لو كنت تستطيع ترجمة المشروع إلى لغة معينة مثلًا ووجدت أن أحد المساهمين قد سبقك في ذلك وكانت دقة الترجمة ممتازة ولا ملاحظات عليها، فلا داعي لإعادة الترجمة، ويمكنك هنا الانتقال إلى مشروع آخر مباشرةً.
- التأكد من مدى نشاط المشروع، فوجود مجتمع نشط للمشروع يدل على نجاحه وهذا يساعدك على نجاح المشروع وحصولك على المساعدة التي تحتاجها بخصوص أي استفسار تحتاج لإجابة حوله.
2. اطلع بتمعن على مستودع المشروع
بعد تحديدك للمشروع المناسب، ابدأ بالاطلاع المتمعن للملفات المتاحة بمستودع المشروع. تأكد من فهمك الجيد لمحتوى ملفاته الأساسية، وسأشرح الفكرة هنا عبر المشاريع التي توضع ملفاتها بجيتهاب Github كمثال.

عند دخولك لمشروع ما، ستجد أن به عدة ملفات. لا داعي لأن تطلع عليها جميعًا، ولا أن تفتحها بشكل عشوائي، بل يكفيك مراجعة الملفات التي تحمل التسميات الآتية:
- ملف
README.md: الذي يشرح فكرة المشروع ووظائفه وطريقة استخدامه.
- ملف
CONTRIBUTING.md: الذي يشرح طريقة المساهمة، والقواعد المطلوبة لذلك
CODE_OF_CONDUCT.md: يحدد قواعد التعامل بين الأعضاء.
- مجلد
docs/ أو صفحة Wiki: قد تحتوي على معلومات أعمق.
تأكد هنا من الأسلوب المتبع في المشروع، سواءً من ناحية أسلوب الكتابة النصية، أسلوب كتابة الكود، واحرص على فهمك وقدرتك على الخروج بمساهمات متناغمة مع طبيعة المشروع، ليكون عملك متوافقَا مع نمط المشروع.
3. اختيار المهمة المناسبة
قد تجد ضمن المشروع الواحد عدة مهام تستطيع العمل عليها، وأن هناك عدة مستويات من الخبرة لعدة مهام أيضًا. لذا قبل اختيارك لأي مهمة، تأكد من الدخول إلى قسم Issues من الشريط العلوي الخاص بالمشروع، مع قراءة المشاكل الموجودة التي تحتاج لحل، والتأكد مما يلي:
- أن المهمة ما تزال مفتوحة وغير مكتمل العمل عليها، وتستطيع تحديد ذلك بالضغط على خيار Open لفلترة العرض إلى المهام المفتوحة التي تحتاج لعمل حصرًا.

- توافق المهمة مع إمكانياتك، وتستطيع تحديد ذلك مبدئيًا من خلال الوسوم المتاحة على بطاقة المهمة مثل Research ،Non Technical ،Technical ،documentation ،translation ،design وغيرها، كما هو موضح في الصورة الآتية:

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

4. نسخ المشروع
من أجل بدء العمل من طرفك وإجراء التعديلات اللازمة، ستحتاج إلى نسخ المشروع لديك بحسابك أو محليًا، ويمكنك فعل ذلك بالخروج من قسم Issus والعودة إلى قسم 'Code <>' ضمن الشريط العلوي لصفحة المشروع؛ بعد ذلك اضغط على زر Fork في أعلى يمين صفحة المشروع على GitHub، وبهذا ستصبح لديك نسخة من المشروع في حسابك الخاص على جيتهاب لتعمل عليها بحرّية.

بعدها انقر على خيار 'code <>' من صفحة الكود التي حددتها سابقًا، واعمل clone لينتقل المشروع إلى حاسوبك لتتمكن من العمل عليه وفق المحرر المناسب، وسيترتب عن هذا تغير في رابط المشروع من:
https://github.com/**projctowner**/projectname.git
إلى:
https://github.com/**yourusername**/projectname.git
وبهذه المرحلة ستنسخه إلى الطرفية Terminal وتعمل Clone وتبدأ العمل بإدخال الأمر الآتي إلى الطرفية:
git clone https://github.com/YourUsername/ProjectName.git
cd ProjectName
أو ببساطة إن كنت لا تجيد التعامل مع الطرفية، يمكنك استخدام خيار Open with Github Desktop للتعديل عليه ضمن حسابك على جيتهاب مباشرةً بحاسوبك.
وتوضح الصورة الآتية كلا الخيارين من نفس الصندوق:

5. تشغيل المشروع والتأكد من عمله
بعد تعديل المشروع على المحرر المناسب، لا ترفع المشروع مباشرةً، بل تأكد محليًا أولًا من صحة التعديلات وجرب المزايا المضافة. وإن كانت هناك حاجة لأي تعديل، فعدله عند هذه المرحلة قبل الرفع.
6. رفع التعديلات إلى مستودع المشروع على جيتهاب
هناك أكثر من طريقة لرفع التعديلات إلى مستودع جيتهاب فيها البرمجية القائمة على تمرير أوامر لسطر الأوامر، وأخرى عبر الواجهة الرسومية. سأعرفك على الطريقتين هنا، ولك أن تختار الطريقة التي تناسبك أكثر.
الطريقة الأولى: الرفع باستخدام الطرفية Terminal
يتم ذلك على النحو التالي:
افتح الطرفية Terminal، ثم اكتب الأمر التالي لأخذ نسخة المشروع:
git clone رابط مستودع المشروع على جيتهاب
ثم اضغط على Enter
بعد ذلك، اكتب بنفس الطرفية، الأمر الآتي:
cd /مسار مجلد المشروع المعدل على حاسوبك
ثم اضغط على Enter.
وللتنويه، يمكن هنا سحب المجلد مباشرةً إلى الطرفية بدل كتابة المسار يدويًا، وسيظهر المسار الخاص بالملف تلقائيًا. يعني سيكفيك كتابة / cd ثم سحب المجلد المعدل.
بعد رفعه، ستحتاج للتأكد من حالة المستودع الحالي، وذلك من خلال الأمر:
git status
إذا هناك ملفات جديدة أو معدلة لم تُضاف بعد، استخدم الأمر التالي لإضافتها جميعًا:
git add *
بعدها تأكد من جديد من حالة الملفات الجاهزة لعملية commit عبر الأمر التالي:
git status
بعد ذلك، ستحتاج إلى تثبيت التعديلات محليًا عبر الأمر التالي:
git commit -m "رسالة التعديل بما فعلت"
ثم ارفع التعديلات إلى المستودع البعيد على GitHub باستخدام الأمر الآتي:
git push -u origin branch name
# قد تكون الـ branch name هي main, master أو غيرها
بعد رفع الملفات، تحقق عبر المستودع البعيد على GitHub من وصول التعديلات بنجاح، ثم أرسل طلب مساهمة Pull Request والذي سيظهر لك زره بعد إتمام رفع التعديلات على جيتهاب مباشرةً، ويكفي أن تتبع إجراءات الصفحة التي تظهر معك لإتمام ملء الطلب.
الطريقة الثانية: الرفع عبر الواجهة الرسومية
في حال لم يكن التعامل بالأكواد مناسبًا لك وأردت التعامل مع الواجهة الرسومية فقط دون سطر أوامر، فأبسط طريقة هي أن نتوجه إلى صفحة كود المشروع ونضغط على Add file كما هو موضح في الصورة الآتية:

بعد ذلك اختر Create new file وستظهر لنا النافذة الآتية:

يمكنك هنا رفع الملفات المعدلة يدويًا، مع توضيح التعديلات التي قمت بها في خانة Commit changes، ويفضل النقر على خيار Create a new branch for this commit and start a pull request لإضافة التعديلات في مسار جديد، وإرسال طلب المساهمة إلى القائمين على المشروع لمراجعة تعديلاتك ومشاركتك ملاحظاتهم حولها وتحديد إمكانية اعتمادها.
لكن انتبه! قد تكون هذه الطريقة بسيطةً للغاية، إلا أنها قد لا تناسبك إذا كنت مبرمجًا وتريد التعديل على أشياء مهمة وكثيرة بالمشروع؛ إذ تعتبر هذه الطريقة أكثر توافقًا مع التعديلات البسيطة على الكود والترجمات وغيرها مما قد يكون بسيطًا ولا يحتاج تحكمًا كبيرًا؛ عدا ذلك، فالطريقة الأولى ستكون أفضل لك.
7. التفاعل مع مراجعات صاحب المشروع
المساهمة في المشاريع مفتوحة المصدر لا تنتهي بإرسال طلب التعديل إلى صاحب المشروع، بل تستمر إلى غاية التأكيد على قبول تعديلاتك. قد يراجع مسؤول المشروع مساهمتك، وقد يقبلها أو يعلق عليها بملاحظات، وهنا كن إيجابييًا في التعامل معها والتعديل عليها وفق الاقتراحات، ولا تتردد في طرح أسلئلتك حول التعليقات التي لم تفهمها جيدًا.
وتذكر أنه من المهم جدًا أن تكون محترمًا ومتعاونًا في مساهماتك مهما كان حجمها.
نصائح للمساهمة الفعالة
- لا تبدأ بمشاريع معقدة جدًا.
- اقرأ التوثيق جيدًا قبل التعديل.
- التزم بأسلوب كتابة الكود المعتمد في المشروع Code Style.
- لا تتردد في طرح أسئلة في قسم Issues.
أنصحك بتجربة الأمر والتدرب على كيفية المساهمة على هذا النوع من المشاريع، فهو يدمج بين المتعة والفائدة. وإن كانت لديك أي صعوبات بالأمر، فاطرحها بالتعليقات لنتشارك في حلها.