سلسلة اتعلم git
ابوبكر هلال محمد
منذ 16 ساعة تقريباً
10 دقائق للقراءة
1990 كلمة
[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 init
ولازم انت تكون داخل مسار الملف العاوز تعمل تهيئة لل git فيهو
ما هو ال git init #
git init
هو اول امر ينبغي ان نكتبه لانشاء مستودع git جديد , اي يكتب لكي نهيئ به الريبو اولا وبتم كتابته مرة واحد في كل مشروع , وبتم تعقب المشروع من اعلي لاسفل بمعني ال git بتعقب الملفات البتتنشي داخل الفولدر بداية من المسار الفيهو لكل الملفات الهتتنشي داخله وكل اوامر ال git هتشتغل في الفولدر الريئسي الاتنشاء منو الريبو
ما هو ال git Repo #
المستودع هو مساحة عمل تتعقب وتدير الملفات داخل المجلد واي مستودع بكون عندو تاريخ وقت تقدر ترجع ليهو , ممكن تنشي عدة مستودعات
طيب نحن عملنا الريبو واي حاجة وكمان عملنا كم ملف بداخل الفولدر عاوزن تعرف هل تم تعقب الملفات ده ول لا نعرفها كيف ؟؟
طيب ال git وفر ليك امر تقدر تعرف بيو الحاجه اللي هو بتكتب
git status
ما هو ال git status #
git status
تعطي الحالة status الحالة الحالية لمستودع git ومحتوياته وتعطي معلومات مفيدة
ما هو ال git add #
git add
يستخدم الامر git add لاضافة الملفات معينة لمنطقة التدريج ( stage area) ويمكنك اضافة عدة ملفات معينة بالفصل بيها بي مسافة
git add file1 file2 file 3
ما هو ال git commit #
git commit -m " test"
يستخدم الامر git commit لاجراء التغيرات فعليا من منطقة التدريج( stage area) الي repo او المستودع ويجب ان نكتب رسالة مع الامر تلخص التغيرات التي تمت في commit
يستخدم الflag -m لكتابة رسالة مع commit في سطر واحدة اذا كنت بتستخدم cli
الصورة تمثل git work flow
يمكنك التراجع عن اضافة ملف من منطقة التدريج (stage area) عن طريق الامر
git restore --staged file-name
يمكنك ايضا رؤية كل ال commit التي جرت محليا (local) في الريبو عن طريق الامر
git log
دائما خلي اي commit يكون مركز علي حاجة واحدة بتكلم عن تغيرات معينه او مشكلة معينة تم اصلاحها , ده بخلي الرجوع لاي commit ممكن او التراجع عنو ممكن و برضو بخلي مراجعة الكود والمشروع اسهل , ودائما خلي اي commit يكون مجموعة من التغيرات ما كل حاجة تعمل ليها commit طوالي ده بخلي ال commit تكون كتيرة وصعبة المراجعة .
دائما عشان تجري اي commit لازم قبلها تضيف كل التعديلات لل stagearea وبتستخدم الامر git add ولكن في اختصار ممكن تكتبو هيضيف ليك طوالي وبعمل ليك commit الملفات التي اتعدلت او اتحذفت ولكن لا يضيف الملفات الجديد او التم انشاءها الامر هو تضيف ال flag -a مع امر ال commit
git commit -a -m "yourmessage"
ما هو ال git Reset #
ال git Reset يستخدم للتراجع عن commit معين محليا local ويستخدم معها HEAD ومعه علامة ~ مثلا HEAD~2 يعني التراجع عن اخر اثنين commit حصلت
git reset HEAD~2
احيانا بنحتاج نكتب commit يكون كتير فممكن تستخدم الامر
git commit
وهيفتح معاك في الترمينال كمحرر vim عشان تكتب ال commit حقك الكتير في كم سطر ومعظم الناس صعب عليها التعامل معاو ممكن تغير الضبط تخلي يفتح مثلا في المحرر البتستخدمو لكتابة الكود مثلا vs code استخدم الامر ده
git config --global core.editor "code --wait"
تكتب الرسالة حقتك وتحفظو وتتطلع من الملف وهيتم ال commit حقتك
بالنسبة لباقي المحررات ممكن تشوفو ال git docs
ما هو ال git log #
الامر git log يتيح لكل عرض كل ال commit التي اجريت علي الريبو عن طريق الامر ادناه وبعد ان يفتح للخروج منه اضغط علي الحرف q
git log
وايضا يمكن اظهار كل ال commit في ال log في سطر واحد باستخدام ال flag --oneline
git log --oneline
وايضا يمكنك اختصار الcommit hash البطلع مع الcommit باستخدام ال flag --abbrev-commit
git log --abbrev-commit
طيب لنفترض انك غلطت في كتابة رسالة الcommit السابق او عاوز تعدل علي ملف معين ممكن تستخدم الامر
git commit --amend
مع ملاحظة لو عندك ملف نسيت تضيفو لل areastage تعمل اولا
git add filename
بعدها تكتب الامر السابق وهيفتح معاك نفس رسالة ال commit السابقة وتعدل عليها وتحفظو
نلاحظ كثير بعد فتح ال log وجود كلمة HEAD -> master
اذن ما هو 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 لعرض كافة الفروع في الريبو نستخدم الامر
git branch
او الامر
git branch --list
ممكن ايضا استخدام الflag -v لعرض البرانش مع اخر commit تم مع هاش مختصر لكل commit عن طريق الامر
git branch -v
ولانشاء فرع جديد نستخدم الامر
git branch <name-new-branch>
هذا ينشئ فرع جديد ولكن لا يبدل الفرع الموجود فيه
طيب كيف نبدل بين البرانش باستخدام الامر switch
git switch <branch-name>
في طريقة تانية ايضا تقدر تبدل بين ال branchs عن طريق استخدام الامر
git checkout <branch-name>
والطريقتين بشتغلو كويس ونفس الفهم
ايضا يمكنك انشاء فرع branch والتبديل اليه مباشرة عن طريق استخدام ال flag -c و ال -c بتعني create هيكون الامر كالاتي :
git switch -c <branch-name>
ووممكن برضو باستخدام checkout بس هنا باستخدام ال flag -b هيكون كالاتي :
git checkout -b <branch-name>
طيب نحن عملنا فروع كتيرة جدا طيب كيف نمسح فرع من الفروع ده عن طريق الامر
git branch -d <branch-name>
طيب اذا طلع خطا وقال لا يمكن حذف الفرع الا بعد عمل دمج له في امر تستخدم تقدر تحذف الفرع غض النظر عن حالته عن طريق اضافة ال flag -D وده هيعمل force فرض اجباري يحذف وهو اختصار للامر --force
git branch -D <branch-name>
يعني كانك بتعمل نفس الامر
git branch -d <branch-name> --force
طيب لو عايزن نغير اسم الفرع لاسم تاني اولا لازم نكون في نفس الفرع بعدها نكتب الامر ده
git branch -m <name>
طيب قسمنا الشغل لعدة branch واي زول اشتغل علي فرع محدد محتاجين بعد كده ندمج كل الفروع ده في فرع واحد عملية الدمج ده بتم عن طريق الامر merge انت بتكون في البرانش العاوز تعمل فيهو دمج وتكتب الامر ده :
git merge <branch-name>
لمن نعمل دمج نحن هنا فعليا بنعمل دمج للHEAD لانو قلنا اي برانش له HEAD بشير له وبشير لاخر commit فيه وايضا يمكن تحريكه بين الcommit الداخل تلك البرانش
في بعض الاحيان بحصل تعارض conflict لمن نعمل merge
هيظهر التعارض زي ما في الصورة ادناه
وهيكون شكلو داخل الملف كما في الصورة ادناه
وده بكون بسبب انو في اكتر من شخص شغال في نفس الملف واي واحد عمل تغيرات او حذف حاجه محدد هنا الدمج ما بحصل الا تعالج التعارضات ده يدويا وده بتم بعدة مراحل وهي :
1- نفتح الملف الحصل فيه تعارض conflict
2- حدد هتقبل التغيرات القادمة من البرانش محدد او هتقبل التغيرات الموجودة مسبقا ام هتقبل كل التغيرات مع بعض
3- احفظ الملف واعمل add لكل التغيرات ثم commit لكل التغيرات
تم تحرير الملف باستخدام محرّر دَوّن شكرا جزيلا لمطوره عبدالهادي الأندلسي المحرر مميز جدا خصوصا يدعم اللغة العربية وواجهته جميلة جدا عن المحرر