سلسلة اتعلم git

ابوبكر هلال محمد

ابوبكر هلال محمد

منذ 16 ساعة تقريباً

10 دقائق للقراءة

1990 كلمة


سلسلة اتعلم git

[1] سلسلة اتعلم git #

ان شاءالله هبدا اكتب عن سلسلة اتعلم git هتكون في شكل سندوشات دسمة وكل 3 و 4 سندوش هيكونو في شكل مقال علي المدونة

ما هو git #

هو عبارة عن version control system ترجمة ( نظام التحكم في الاصدار )

طيب يعني شنو نظام التحكم في الاصدار او vcs #

هو برنامج بيتبع التغيرات التي تحصل علي الملفات ويديرها بمرور الوقت بمعني انه بسمح لاي مستخدم انو يرجع للاصدرات السابقة للملفات او مقارنة التغيرات البتحصل فيها او التراجع عن تغيرات معينة حصلت فيها هو واحد من اشهر انظمة التحكم في الاصدار المشهورة اليوم طبقا لاخر احصائيات موقع stackoverflow
طبعا غيرو في كتير زي Subversion و CVS و Mercurial وكلهم هدفهم واحد ولكن بختلفو في الطريقة البحققو بيها ذلك الهدف .

git هو الاكثر استخدام من غيرو عشان كده هبدا اكتب مقالات فيه .

اذن ما هو ال git #

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

ال git بساعدك في الاتي : #

1- تعقب التغيرات عبر الملفات

2- مقارنة اصدارت المشروع المتعددة

3- بساعدك في الرجوع للملفات القديمة

4- بساعدك في التعاون ومشاركة التغيرات ودمجها

تاريخ ال git #

منشئ برنامج ال git هو linus torvalds بدا عام 2005 المصدر ويكيميديا

السبب في تسميته بي git #

اشار مصمم ال git تورفالدس ان ال git هو (the stupid content tracker) اي بمعني "متعقب المحتوي الغبي" اثناء عمله علي git

حسب ويكيميديا ان شرح اسم ال git بيعتمد علي الحالة المزاجية :

اولا : git عبارة عن تركيبة عشوائية مكونة من ثلاثة احرف يمكن نطقها .

ثانيا : "Global information tracker" متعقب المعلومات العالمي

ثالثا : "G#mn idiotic truckload of s#t" حمولة الشحنة الحمقاء هذه اذا كانت حالتك المزاجية ليست علي ما يرام

بعد ان عرفنا git وتاريخه وسبب تسميته ناتي لنعرف

من هم مستخدمين git #

1- المهندسين والمبرمجين هم في راس الهرم في استخدام ال git كل المطورين في الشركات الكبري مثل قوقل وميتا او شركات صغرى او حتي افراد يستخدمون ال git .

2- الاشخاص الغير مطورين ويشتغلون مع المطورين مثل المصممين غالبا ينتهي بهم الامر لتعلم ال git

3- الحكومات في السنوات الاخير بدات تستخدم ال git في ادارة صياغة القوانين مثل ما حصل في مجلس مدينة واشنطن وايضا مدينة تشاتانوغا او ممكن تشوفو مين الحكومات البتستخدم git من هنا

4- العلماء واساتذة الجامعات يستخدمون git بصورة كبيرة لادارة التعليمات البرمجية والبيانات

5- الكتاب بعض من الكتاب بستخدمو ال git لادارة مسودة الروايات او السيناريوهات او الاعمال الاخري

الفرق بين git و github #

git #

زي ما قلنا هو برنامج للتحكم في الاصدار ويتم تشغيله محليا علي الجهاز ولا يحتاج الي التسجيل للحصول علي حساب ولا يحتاج الي انترنت

github #

هي خدمة بتستضيف مستودعات ال git في السحابة (cloud) وبتسهل التعاون مع الاشخاص الاخرين ( collabrate) وهنا بتحتاج للتسجيل للحصول علي حساب فيه هو مكان اونلاين بشارك اعمالك باستخدام git

تثبيت ال git #

اذا كنت بتستخدم ويندوز ممكن تنزل برنامج ال git من هنا اختار ويندوز و بعدها تعمل تثبيت ثم التالي ثم التالي الي ان يتثبت عندك

واذا كنت بتستخدم ماك اضغط علي ماك وهيديك عدة اوامر اتبعها وهينزل معاك

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

كيف التعامل مع git عن طريق cli || gui #

ال git ممكن تتفاعل معاو بطريقتين اللي هو عن طريق واجهة او عن طريق الترمينال الواجهة في عدة واجهات ممكن تستخدمها منها مثلا GitHub Desktop و GitKraken وغيرها كتير ممكن تشوفهم من هنا

في المقالات ده هستخدم ال cli command line interface اللي هي الترمينال

كيف استخدم ال git #

عشان نستخدم ال git في ملف او فولدر او مشروع نحن محتاجين نعمل تهيئة لل git داخل المشروع او الفولدر ده.

طيب كيف بنعمل تهيئة ليهو ؟؟ طيب بسيطة حسب التوثيق بتاع ال git قال ليك عشان تعمل تهيئة استخدم الامر

git-initial
git init

ولازم انت تكون داخل مسار الملف العاوز تعمل تهيئة لل git فيهو

ما هو ال git init #

git.bash
git init

هو اول امر ينبغي ان نكتبه لانشاء مستودع git جديد , اي يكتب لكي نهيئ به الريبو اولا وبتم كتابته مرة واحد في كل مشروع , وبتم تعقب المشروع من اعلي لاسفل بمعني ال git بتعقب الملفات البتتنشي داخل الفولدر بداية من المسار الفيهو لكل الملفات الهتتنشي داخله وكل اوامر ال git هتشتغل في الفولدر الريئسي الاتنشاء منو الريبو

ما هو ال git Repo #

المستودع هو مساحة عمل تتعقب وتدير الملفات داخل المجلد واي مستودع بكون عندو تاريخ وقت تقدر ترجع ليهو , ممكن تنشي عدة مستودعات

طيب نحن عملنا الريبو واي حاجة وكمان عملنا كم ملف بداخل الفولدر عاوزن تعرف هل تم تعقب الملفات ده ول لا نعرفها كيف ؟؟

طيب ال git وفر ليك امر تقدر تعرف بيو الحاجه اللي هو بتكتب

git.bash
git status

ما هو ال git status #

git.bash
git status

تعطي الحالة status الحالة الحالية لمستودع git ومحتوياته وتعطي معلومات مفيدة

ما هو ال git add #

git.bash
git add

يستخدم الامر git add لاضافة الملفات معينة لمنطقة التدريج ( stage area) ويمكنك اضافة عدة ملفات معينة بالفصل بيها بي مسافة

git.bash
git add  file1  file2 file 3

ما هو ال git commit #

git.bash
git commit -m " test"

يستخدم الامر git commit لاجراء التغيرات فعليا من منطقة التدريج( stage area) الي repo او المستودع ويجب ان نكتب رسالة مع الامر تلخص التغيرات التي تمت في commit

يستخدم الflag -m لكتابة رسالة مع commit في سطر واحدة اذا كنت بتستخدم cli

الصورة تمثل git work flow

git work flow

يمكنك التراجع عن اضافة ملف من منطقة التدريج (stage area) عن طريق الامر

git.bash
git restore --staged file-name

يمكنك ايضا رؤية كل ال commit التي جرت محليا (local) في الريبو عن طريق الامر

git.bash
git log

دائما عشان تجري اي commit لازم قبلها تضيف كل التعديلات لل stagearea وبتستخدم الامر git add ولكن في اختصار ممكن تكتبو هيضيف ليك طوالي وبعمل ليك commit الملفات التي اتعدلت او اتحذفت ولكن لا يضيف الملفات الجديد او التم انشاءها الامر هو تضيف ال flag -a مع امر ال commit

git-add-and-commit
git commit -a -m "yourmessage"

ما هو ال git Reset #

ال git Reset يستخدم للتراجع عن commit معين محليا local ويستخدم معها HEAD ومعه علامة ~ مثلا HEAD~2 يعني التراجع عن اخر اثنين commit حصلت

git.bash
git reset HEAD~2

احيانا بنحتاج نكتب commit يكون كتير فممكن تستخدم الامر

git.bash
git commit

وهيفتح معاك في الترمينال كمحرر vim عشان تكتب ال commit حقك الكتير في كم سطر ومعظم الناس صعب عليها التعامل معاو ممكن تغير الضبط تخلي يفتح مثلا في المحرر البتستخدمو لكتابة الكود مثلا vs code استخدم الامر ده

git.bash
git config --global core.editor "code --wait"

تكتب الرسالة حقتك وتحفظو وتتطلع من الملف وهيتم ال commit حقتك

بالنسبة لباقي المحررات ممكن تشوفو ال git docs

ما هو ال git log #

الامر git log يتيح لكل عرض كل ال commit التي اجريت علي الريبو عن طريق الامر ادناه وبعد ان يفتح للخروج منه اضغط علي الحرف q

git.bash
git log 

وايضا يمكن اظهار كل ال commit في ال log في سطر واحد باستخدام ال flag --oneline

git.bash
git log --oneline  

وايضا يمكنك اختصار الcommit hash البطلع مع الcommit باستخدام ال flag --abbrev-commit

git.bash
git log  --abbrev-commit

طيب لنفترض انك غلطت في كتابة رسالة الcommit السابق او عاوز تعدل علي ملف معين ممكن تستخدم الامر

git.bash
git commit --amend

مع ملاحظة لو عندك ملف نسيت تضيفو لل areastage تعمل اولا

git.bash
git add filename

بعدها تكتب الامر السابق وهيفتح معاك نفس رسالة ال commit السابقة وتعدل عليها وتحفظو

نلاحظ كثير بعد فتح ال log وجود كلمة HEAD -> master

ما هو HEAD

اذن ما هو HEAD هو مؤشر يشير الي موقعك الحالي في git ودائما يشير الي اخر commit في البرانش الموجود فيه ولكن يمكنك تحريكه وهو ما نستخدمه لمسح او التراجع عن اي commit معين كما فعلنا ذلك اعلاه

ما هو ال gitignore. #

هو ملف يخبر الgit اي من الملفات التي يمكن تجاهلها وعدم تعقبها و اضافتها للريبو او عمل commit لها مثلا الملفات التي تحتوي علي كلمات السر او المتغيرات المحلية وغيرها ويتم انشاء الملف في جزر المشروع ويتم تسميته هكذا gitignore. ويكتب داخله الملفات التي لا تود ان يتعقبها ال git امثلة

env. log.* وهذا يعني كل الملفات التني تتنهي بامتداد log node_moudle

في موقع ممكن تنشئ منو ملف gitignore

ما هو ال branch #

branch او الفرع هو جزء اساسي من ال git من خلالها يمكن العمل علي الكود في عدة سياقات دون التاثير علي اي كود اخر في نفس المشروع يمكنك تقسيم الكود الي عدة branch . في ال git يوجد branch افتراضي يسمي master ولكن حديثا عام 2020 github غيرت البرانش الافتراضي الي main ولكن في git لازال هو master لعرض كافة الفروع في الريبو نستخدم الامر

view-branch
git branch

او الامر

view-branch
git branch --list

ممكن ايضا استخدام الflag -v لعرض البرانش مع اخر commit تم مع هاش مختصر لكل commit عن طريق الامر

veiw-all-branch-with-hash-commit
git branch -v 

ولانشاء فرع جديد نستخدم الامر

create-branch
git branch <name-new-branch>

هذا ينشئ فرع جديد ولكن لا يبدل الفرع الموجود فيه

طيب كيف نبدل بين البرانش باستخدام الامر switch

switch-branch
git switch  <branch-name>

في طريقة تانية ايضا تقدر تبدل بين ال branchs عن طريق استخدام الامر

checkout-branch
git checkout  <branch-name>

والطريقتين بشتغلو كويس ونفس الفهم

ايضا يمكنك انشاء فرع branch والتبديل اليه مباشرة عن طريق استخدام ال flag -c و ال -c بتعني create هيكون الامر كالاتي :

create-and-switch-branch
git switch -c  <branch-name>

ووممكن برضو باستخدام checkout بس هنا باستخدام ال flag -b هيكون كالاتي :

create-and-checkout
git  checkout -b <branch-name>

طيب نحن عملنا فروع كتيرة جدا طيب كيف نمسح فرع من الفروع ده عن طريق الامر

delete-branch
git branch -d  <branch-name>

طيب اذا طلع خطا وقال لا يمكن حذف الفرع الا بعد عمل دمج له في امر تستخدم تقدر تحذف الفرع غض النظر عن حالته عن طريق اضافة ال flag -D وده هيعمل force فرض اجباري يحذف وهو اختصار للامر --force

delete-force-branch
git branch -D  <branch-name>

يعني كانك بتعمل نفس الامر

delete-force-branch
git branch -d <branch-name> --force

طيب لو عايزن نغير اسم الفرع لاسم تاني اولا لازم نكون في نفس الفرع بعدها نكتب الامر ده

rename-branch
git branch -m  <name>

طيب قسمنا الشغل لعدة branch واي زول اشتغل علي فرع محدد محتاجين بعد كده ندمج كل الفروع ده في فرع واحد عملية الدمج ده بتم عن طريق الامر merge انت بتكون في البرانش العاوز تعمل فيهو دمج وتكتب الامر ده :

merge-branch
git merge <branch-name>

لمن نعمل دمج نحن هنا فعليا بنعمل دمج للHEAD لانو قلنا اي برانش له HEAD بشير له وبشير لاخر commit فيه وايضا يمكن تحريكه بين الcommit الداخل تلك البرانش

في بعض الاحيان بحصل تعارض conflict لمن نعمل merge

هيظهر التعارض زي ما في الصورة ادناه

conflict merge

وهيكون شكلو داخل الملف كما في الصورة ادناه

conflict merge

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

1- نفتح الملف الحصل فيه تعارض conflict

2- حدد هتقبل التغيرات القادمة من البرانش محدد او هتقبل التغيرات الموجودة مسبقا ام هتقبل كل التغيرات مع بعض

3- احفظ الملف واعمل add لكل التغيرات ثم commit لكل التغيرات

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

شارك المقال علي وسائل التواصل :


فيسبوكلينك اندتويترقيت هبالمدونة