UP | HOME
جناوي

السيد مذهل
mr. fantastic

طالب هندسة برمجيات - مهتم بالرسوميات والهندسة الصوتية

Software engineering student - interested in graphics and audio engineering

مقدمة في نظام التحكم بالأصدارات مع Git وخدمة Gitlab
نشر في Sep 30, 2020 بقلم السيد مذهل.

ما هو Git وما هو نظام التحكم بالأصدارات

من الأخطاء الشائعة هو الظن بأن جت (Git) هو خدمة أو أختصار لأسم خدمة Github الشهيرة بينما git هو برنامج عميل (Client) له صيغته الخاصة لنظام التحكم بالأصدارات (VCS - Version Control System) أو بالأصح (Revision Control System) في هندسة البرمجيات وما معنى هذا؟ هذا نظام متبع لإدارة وتنظيم مستودعات الشفرة المصدرية (Source Code Repositories) وطريقة متبعة لأخذ المساهمات من المطورين كما تسمح بالتنقل بين النسخ ومتابعة التغييرات والرقع (Patches).

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

تثبيت الأدوات المطلوبة

سينقسم التثبيت إلى جزئين أولاً تثبيت git بذاته وثانياً تثبيت واجهة رسومية له لأنه يفتقر لها ولذلك أخترنا برنامج Github Desktop معه.

مستخدمين ماك وويندوز يمكنهم تنزيل نسختهم من الموقع الرسمي وأتباع إجراءات التثبيت المملة كالمعتاد وأما مستخدمين التوزيعات الجناوية فبنسبة كبيرة يمكن القول أن git مثبت عندهم من الأساس وأن لم يكن فمن المؤكد قطعاً وجوده بالمستودعات الرسمية وهنا كيفية تنزيله لأشهر التوزيعات:

آرتش ومشتقاتها:

$ sudo pacman -S git

دبيان ومشتقاتها:

$ sudo apt-get install git

جنتو ومشتقاتها:

$ sudo emerge --ask dev-vcs/git

التسجيل في خدمة Gitlab

قبل أن ننتقل للخطوة التالية بضبط Github desktop عليك بالقيام بالتسجيل في خدمة Gitlab حتى يتسنى لنا متابعة الخطوات التالية فتأكد من تسجيلك بشكل صحيح وأحفظ كلمة السر جيداً وأتمم التحقق عبر البريد الإلكتروني أو الهاتف وبعدها أنتقل للخطوة اللاحقة.

ملاحظة: حتى وقت كتابة هذه الرسالة الصفحة الرئيسية لموقع جت لاب تحوي على رابط كتب فيه Try GitLab for Free فلا تأخذ هذا الخيار بل أذهب لخيار Register الموجود بالزاوية.

ولكن لماذا Github Desktop كواجهة أولسنا سنستخدم Gitlab؟

نعم سنتسخدم خدمة gitlab وبرنامج Github desktop وأن كان يحوي العديد من الميزات الخاصة بـ Github فقط إلا أنها يعمل مع إي خدمة وأما سبب الأختيار فهو أنني جربته على عدة بيئات للمؤسسات حيث يضعون قيود متوسطة على ما يمكن تثبيته بأجهزة العمل أو المختبرات و Github desktop يمكن تثبيته عليها ربما لأن الناشر موثوق أو ما شاكل ذلك.

وإيضاً هذا البرنامج خفيف ومناسب لشرح الميزات الأساسية ومع ذلك تبقى إشكالية عدم توفر نسخة رسمية للتوزيعات الجناوية ولكن لا مشكلة ما دام هناك نسخة غير رسمية ومع ذلك تبقى هناك سلبيات أخرى وهي بما أنه مبني على Electronjs الذي بدوره مبني على محرك Chromium فقد يكون أستهلاكه للذاكرة أعلى مقارنة بالبرامج الأخرى وإيضاً كرومينيوم برنامج مشبوه بأحتوائها على بقعة سوداء (Blob) بمعني أحتواء بعض أجزاء شفرته المصدرية على أشياء بدون شفرة أو برخصة تقييدية ولكن كبداية نتخطى هذه السلبيات.

تثبيت وضبط Github Desktop

كما أسلفنا بالذكر أصحاب الماك والويندوز يمكنهم الذهاب للموقع الرسمي وتنزيله وأما الجناوية فلهم هذه النسخة الغير رسمية وعند بدء تشغيل البرنامج أو المثبت سوف تظهر لك نافذة كهذه:

ملاحظة: أن كنت قد نزلت نسخة AppImage فعليك أعطائها الصلاحة بالأمر chmod +x GitHubDesktop-linux-2.5.4-linux1.AppImage وتشغيلها بالأمر GitHubDesktop-linux-2.5.4-linux1.AppImage/.

fig1.png

شكل 1: شاشة الضبط

كل ما عليك هو الضغط على تخطي كما موضح بالصورة وبعدها قم بإدخال أسم المستخدم الذي سجلته بـ Gitlab والبريد الإلكتروني:

fig2.png

شكل 2: شاشة الضبط

وبعد أتمام إجراءات الضبط ستظهر لك الصفحة الرئيسية كما يلي:

fig3.png

شكل 3: الصفحة الرئيسية

تنزيل مشروع وتحديثه

ميزة git أنك تستطيع أخذ تحديثات وتغييرات المطورين أول بأول لذا سنجرب أخذ مشروع برمجيات حرة معين ألا وهو أنكسكيب (Inkscape) وهو برنامج رسم وتصميم المتجهات والمسارات (Vector graphics) ونحن هنا لن نشرح عملية تجميع وبناء البرنامج (Compile) وكيفية تنزيل الأعتمادات فهذا ما يمكنك أن تجده بالوثائق الرسمية لأنكسكيب ولكن سنشرح كيفية أخذ نسخة محلية وتحديثها دون الحاجة لتنزيل كل شيء من جديد كل مرة.

أفتح المتصفح على رابط الشفرة المصدرية لأنكسكيب وأضغط على زر Clone وأختر خيار الـ HTTPS وليس SSH كما هو موضح بالصورة وأنسخ الرابط:

fig4-1.png

شكل 4: الشفرة المصدرية لأنكسكيب

في Github Desktop يمكنك الضغط على خيار ...Clone a repository from the internet ما دام ظاهراً بالصفحة الرئيسية أو الذهاب إلى القائمة:

File > Clone repository

fig4.png

شكل 5: تنزيل مستودع الشفرة المصدرية لأنكسكيب

كما هو موضح بالصورة أختر خيار URL إلصق رابط المستودع الذي نسخناه سابقاً في الخانة الأولى ولا حاجة لتغيير الخانة الثانية التي تشير إلى مكان تنزيل الشفرة.

بعد أكمال التنزيل سترى لك نافذة تبدو كهذه:

fig5.png

شكل 6: عرض تاريخ التغييرات في الشفرة

يمكن توضيح عناصر الصورة كما يلي:

  1. زر التاريخ سوف يفتح قسمة جانبية يستعرض فيها سجل التغييرات الحاصلة بالمشروع.
  2. قائمة المشاريع من خلالها يمكنك تغيير المشروع لمشروع أخر قمت بتنزيله.
  3. Fetch origion من خلال هذا الخيار يمكنك تحديث المشروع.

مشروع كأنكسكيب يطرأ عليه تغييرات شبه يومية فربما بعد تنزيلك للشفرة المصدرية بعدها بساعات أو يوم سيحصل تغيير فجرب أستخدام هذا الزر حينها.

إنشاء مشروع ورفع التغييرات فيه

أدخل على المتصفح وسجل دخولك على جت لاب فستظهر لك صفحة مشابهة لهذه:

fig6.png

شكل 7: أنشاء مشروع جديد من واجهة الموقع

أضغط على زر مشروع جديد New project الأخضر الظاهر بالصورة أو من القائمة كما هو موضح بالصورة وبعدها ستظهر لك صفحة كالتالي وما عليك سوى وضع أسم المشروع وبما أنه مشروعك الأول فقط للتجربة فلا داعي لوضع علني أجعله خاص وكفى:

fig7.png

شكل 8: أنشاء مشروع جديد من واجهة الموقع

وبعد الموافقة ستظر لك صفحة بها بعض الأرشادات لا تعبأ به وقم بتنزيل الشفرة الفارغة كما وضحنا بالقسم السابق ولكن هذه المرة سوف يطلب من أسم المستخدم وكلمة السر اللذان وضعتهما في gitlab.

وهنا نستطيع إضافة ما شئنا من الملفات بالتوجه إلى القائمة:

Repository > Show in your File Manager

وسيفتح لك متصفح الملفات وكمثال أضف هذا الملف وعدله بإي محرر نصوص أو برمجة شئت main.c:

// -*- compile-command: "gcc -o main main.c"; -*-
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
  printf("Happy, Hacking!.\n");
}

وستكون النتيجة أن ينبهك Github Desktop بحدوث تغيير:

fig8.png

شكل 9: تغييرات غير مثبتة

وكل ما عليك هو أن تقوم بكتابة عنوان التغيير والوصف بالخانات المناسبة وضغط زر Commit to master ولكن إذا كان هناك بعض الملفات التي لا تريد إضافتها (قد تكون ملفات مولدة auto-generated) فبوسعك الضغط على بالزر الإيمن من الفأرة وعدم تضمينها.

وبعد تثبيت التغيير أو مجموعة التغييرات يجب علينا رفع التغييرات عبر الضرب على زر Publish repository من ما سيتطلب منك مجدداً أدخال أسم المستخدم وكلمة السر وهنا تنتهي الدورة من القيام بالتغييرات إلى تثبيتها إلى رفعها وهذا ما يمكنك فعله بشفرتك الخاصة ولكن المساهمة بمشاريع الغير موضوع أخر.

المساهمة في مشاريع الغير

قبل البدء يجب أن نعلم أنه لا يمكنك المساهمة بمشروع إذا لم تكن مسجل بنفس موقع الأستضافة للمشروع فإذا كان المشروع بـ github يجب أن يكون عندك حساب بـ github ونفس الشيء ينطبق على gitlab و sourceforge و savannah و Source hut و…إلخ.

وإيضاً أن كان المشروع غير عام فيجب أن يتم إضافتك ضمن الفريق كما موضح بالصورة أدناه:

fig9.png

شكل 10: إدارة الفريق

لنختر إي مشروع لنساهم فيه وليكن مشروعنا التجريبي فقد جعلته مشروع علني ولذلك نذهب لصفحة المشروع على المتصفح ونضغط على زر fork1:

fig10.png

شكل 11: إنشاء فرع جديد

وهنا يمكنك وضع الفرع الجديد تحت أسم حسابك وبعدها تقوم بتنزيل نسختك من الفرع وإذا حصل وكان لذيك الأصل فتسطيع حذف أو تغيير أسم مجلده.

حتى تستلم التحديثات من الأصل عليك القيام بربط فرعك بالأصل ولكن للأسف لا يستطيع github desktop القيام بهذه العملية وحده لذا علينا فتح سطر الأوامر من القائمة:

Repository > Open in Terminal

وقد يتغير أسم هذا الخيار حسب النظام ففي ويندوز قد يكون open in powershell أو open in command prompt وفي ماك قد يكون open in iterminal وهكذا. أما الأن فبعد دخولك على سطر الأوامر أنسخ هذا السطر وإلصقه وأكبس Enter:

git remote add upstream https://gitlab.com/mr.fantastic/gittesting.git

هنا سيطلب منك أسم المستخدم وكلمة السر:

git fetch upstream
git checkout master
git rebase upstream/master

مع تأكيد أن يكون رابط الأصل بصيغة HTTPS وليس SSH.

وبعدها قم بتعديلاتك وثبتها وأرفعها لفرعك وعندما تنتهي أدخل على المتصفح وأدخل على صفحة الفرع الخاص بك ومن القائمة الجانبية أذهب إلى Merge Requests وأضرب على New Merge Request وسوف يعرض عليك مقارنة بين تعديلاتك وحالة الأصل ويطلب منك أختيار الفرع المطلوب:

fig11.png

شكل 12: من وإلى

ومن هنا الأمر متروك لصاحب المشروع أن يقبل أو يرفض أو يعلق على مساهمتك وبالطبع يستطيع فتح قائمة Merge Request ويرى كل المساهمات ويطبق ما يشاء بضغطة زر.

ملاحظات ونصائح

هذا الشرح رغم أنه تناول خدمة gitlab إلا أن هذا الشرح ينطبق على بقية المواقع والخدمات مع أختلافات بسيطة لأنها تعمل بنفس المبادئ ولكن أختيار gitlab كان لعدة أسباب وهي أن gitlab بنسخة CE برنامج حر 100% من ما يمكن المستخدمين من أستضافته في خوادمهم الخاصة وإيضاً gitlab يحوي مزايا كثيرة كـ CI (continues integration) وغيرها.

comments . التعليقات

الهوامش:

1

أغلب المواقع تستخدم مصطلح الأشتقاق fork بشكل خاطئ بينما المصطلح الأنسب هو فرع remote branch