جيت – Git هو برنامج لتتبع التغييرات في أي مجموعة من الملفات، وعادة ما يستخدم لتنسيق العمل بين المبرمجين الذين يطورون بشكل تعاوني شفرة المصدر أثناء تطوير البرمجيات. تشمل أهدافه السرعة وتكامل البيانات ودعم تدفقات العمل الموزعة. جيت برنامج مجاني ومفتوح المصدر موزع بموجب رخصة GPL-2.0-only.
تم إنشاء جيت في الأصل بواسطة Linus Torvalds في 2005 لتطوير نواة Linux ، مع مطوري kernel الآخرين الذين ساهموا في تطويرها الأولي. منذ 2005، كان جونيور هامانو المشرف الأساسي. كما هو الحال مع معظم أنظمة التحكم في الإصدارات الموزعة الأخرى، وعلى عكس معظم أنظمة الخادم والعميل، فإن كل دليل على الحاسوب هو مستودع كامل مع محفوظات وقدرات كاملة لتتبع الإصدار، بغض النظر عن الوصول إلى الشبكة أو الخادم المركزي.
1. إعداد وتهيئة Git
أولا لابد من تثبيت الاصدار المناسب لجهازك من الرابط التالي تحميل اداه جيت ثم تحقق من إصدار جيت الخاص بك باستخدام الأمر التالي، والذي سيؤكد أيضًا أنه مثبت:
$ git --version
يتيح لك جيت تكوين عدد من الإعدادات التي سيتم تطبيقها على جميع المستودعات على جهازك المحلي. على سبيل المثال، قم بتكوين اسم مستخدم سيستخدمه جيت لإضافتك لأي تغييرات تجريها على المستودع المحلي:
$ git config --global user.name “firstname lastname”
- قم بتكوين عنوان بريد إلكتروني ليتم ربطه بكل علامة سجل:
$ git config --global user.email “valid-email”
- قم بتكوين محرر النصوص المفضل لديك أيضًا:
$ git config --global core.editor “nano”
- يمكنك تهيئة دليل العمل الحالي كمستودع جيت باستخدام init:
$ git init
- لنسخ مستودع جيت موجود مستضاف عن بُعد ، ستستخدمه git clone مع عنوان URL الخاص بالمستودع أو موقع الخادم :
$ git clone https://www.github.com/username/repo-name
- اعرض المستودع البعيد لدليل جيت الحالي:
$ git remote
- لمزيد من الإخراج المطول ، استخدم -v العلامة:
$ git remote -v
- أضف Git upstream ، والذي يمكن أن يكون عنوان URL أو يمكن استضافته على خادم (في الحالة الأخيرة، اتصل بـ ssh):
$ git remote add upstream https://www.github.com/username/repo-name
2. انطلاق
عندما تقوم بتعديل ملف ووضع علامة عليه لحفظ التعديلات الجديدة ، فإنه يعتبر ملفًا مرحليًا.
- تحقق من حالة مستودع جيت الخاص بك، بما في ذلك الملفات المضافة غير المقسمة والملفات التي تم تنظيمها على مراحل:
$ git status
لتنظيم الملفات المعدلة، استخدم add الذي يمكنك تشغيله عدة مرات قبل التنفيذ. إذا قمت بإجراء تغييرات لاحقة تريد تضمينها، فيجب عليك التشغيل add مرة أخرى.
- يمكنك تحديد ملف معين باستخدام add:
$ git add my_script.py
- باستخدام. يمكنك إضافة جميع الملفات في الدليل الحالي، بما في ذلك الملفات التي تبدأ بـ. :
$ git add.
- إذا كنت ترغب في إضافة جميع الملفات الموجودة في الدليل الحالي بالإضافة إلى الملفات الموجودة في الدلائل الفرعية، فيمكنك استخدام العلامة -all أو -A العلامة:
$ git add -A
- يمكنك إزالة ملف من التدريج مع الاحتفاظ بالتغييرات داخل دليل العمل الخاص بك باستخدام reset:
$ git reset my_script.py
3. تسجيل التغيرات
بمجرد الانتهاء من إعداد التحديثات الخاصة بك، فأنت على استعداد لتنفيذها، مما سيسجل التغييرات التي أجريتها على المستودع.
- للقيام بتنفيذ الملفات المرحلية، ستقوم بتشغيل commit بحيث يمكنك تتبع التغيرات:
$ git commit -m "Commit message"
- يمكنك تكثيف تقسيم جميع الملفات المتعقبة عن طريق الالتزام بها في خطوة واحدة:
$ git commit -am "Commit message"
- إذا كنت بحاجة إلى تعديل رسالة الالتزام الخاصة بك ، فيمكنك القيام بذلك باستخدام –amend :
$ git commit --amend -m "New commit message"
4. الفروع
الفرع هو مؤشر متحرك لأحد الالتزامات في المستودع ، فهو يسمح لك بفصل العمل وإدارة تطوير الميزات والتكامل.
- قائمة بجميع الفروع الحالية ستظهر علامة النجمة (*) بجوار الفرع النشط حاليًا:
$ git branch
- إنشاء فرع جديد. ستبقى في فرعك النشط حاليًا حتى تقوم بالتبديل إلى الفرع الجديد:
$ git branch new-branch
- قم بالتبديل إلى أي فرع موجود وتحقق من ذلك في دليل العمل الحالي الخاص بك:
$ git checkout another-branch
- يمكنك دمج عملية الإنشاء والسحب لفرع جديد باستخدام -b:
$ git checkout -b new-branch
- أعد تسمية اسم فرعك:
$ git branch -m current-branch-name new-branch-name
- أدمج محفوظات الفرع المحدد في السجل الذي تعمل فيه حاليًا:
$ git merge branch-name
- تجاهل الدمج في حال وجود متعارضات:
$ git merge --abort
- يمكنك أيضًا تحديد التزام معين لدمجه مع cherry-pick السلسلة التي تشير إلى الالتزام المحدد:
$ git cherry-pick f7649d0
- عندما تقوم بدمج فرع ولم تعد بحاجة إليه، يمكنك حذفه:
$ git branch -d branch-name
- إذا لم تقم بدمج فرع إلى main ، ولكنك متأكد من رغبتك في حذفه، فيمكنك فرض حذف الفرع:
$ git branch -D branch-name
5. التعاون والتحديث
- لتنزيل التغييرات من مستودع آخر، مثل المستودع البعيد، ستستخدم fetch:
$ git fetch upstream
- دمج الالتزامات التي تم جلبها. لاحظ أن بعض المستودعات قد تستخدم master بدلاً من main:
$ git merge upstream/main
- دفع أو نقل التزامات الفرع المحلي إلى فرع المستودع البعيد:
$ git push origin main
- جلب ودمج أي التزامات من فرع التتبع البعيد:
$ git pull
6. عرض سجل التغيرات
- عرض محفوظات الالتزام للفرع النشط حاليًا:
$ git log
- أظهر الالتزامات التي غيرت ملفًا معينًا. يتبع هذا الملف بغض النظر عن إعادة تسمية الملف:
$ git log --follow my_script.py
- أظهر الالتزامات الموجودة على أحد الفروع وليس على الفرع الآخر. سيُظهر هذا الالتزامات a-branch التي لم تكن في b-branch:
$ git log a-branch..b-branch
- النظر إلى السجلات المرجعية ( reflog) لمعرفة آخر مرة تم فيها تحديث الفروع والمراجع الأخرى داخل المستودع:
$ git reflog
- عرض أي كائن في جيت عبر سلسلة الالتزام أو التجزئة بتنسيق أكثر قابلية للقراءة:
$ git show de754f5
7. إظهار التغييرات
يعرض git diff التغييرات بين الالتزامات والفروع.
- قارن الملفات المعدلة الموجودة في منطقة التدريج:
$ git diff --staged
- عرض فرق ما هو موجود a-branch ولكنه ليس موجودًا b-branch:
$ git diff a-branch..b-branch
- أظهر الفرق بين التزامين محددين:
$ git diff 61ce3e6.e221d9c
- تتبع تغييرات المسار عن طريق حذف ملف من مشروعك وقم بإجراء هذه الإزالة للالتزام:
$ git rm file
- أو قم بتغيير مسار ملف موجود ثم تنظيم النقل:
$ git mv existing-path new-path
- تحقق من سجل التنفيذ لمعرفة ما إذا كان قد تم نقل أي مسارات:
$ git log --stat -M
8. حفظ العمل محليا فقط
ستجد أحيانًا أنك أجريت تغييرات على بعض التعليمات البرمجية، ولكن قبل أن تنتهي، عليك أن تبدأ في العمل على شيء آخر. لست مستعدًا تمامًا لتنفيذ التغييرات التي أجريتها حتى الآن، لكنك لا تريد أن تفقد عملك. سيسمح لك الأمر git stash بحفظ التعديلات المحلية والعودة إلى دليل العمل الذي يتماشى مع أحدث التزام.
- خبأ عملك الحالي:
$ git stash
- تعرف على ما قمت بتخزينه حاليًا:
$ git stash list
سيتم تسمية مخابئك stash@{0}، stash@{1} وهكذا.
- إظهار معلومات حول مخبأ معين:
$ git stash show stash@{0}
- لإخراج الملفات الموجودة في المخبأ الحالي من المخزن مع الاحتفاظ بالمخزون، استخدم apply:
$ git stash apply stash@{0}
- إذا كنت تريد إخراج الملفات من المخزن، ولم تعد بحاجة إلى المخبأ، فاستخدم pop:
$ git stash pop stash@{0}
- إذا لم تعد بحاجة إلى الملفات المحفوظة في مخبأ معين، فيمكنك drop التخزين:
$ git stash drop stash@{0}
- إذا كان لديك العديد من المخبأ المحفوظة ولم تعد بحاجة إلى استخدام أي منها ، فيمكنك استخدامها clear لإزالتها:
$ git stash clear
9. تجاهل الملفات
إذا كنت تريد الاحتفاظ بالملفات في دليل جيت المحلي الخاص بك، ولكن لا تريد إلزامها بالمشروع، يمكنك إضافة هذه الملفات إلى ملفك gitignore. حتى لا تسبب تعارضات.
استخدم محرر نصي مثل nano لإضافة ملفات إلى gitignore. الملف:
$ nano .gitignore
10. إعادة التأسيس
يسمح لنا تغيير القاعدة بتحريك الفروع من خلال تغيير الالتزام الذي تستند إليه. مع إعادة التأسيس، يمكنك سحق الالتزامات أو إعادة صياغتها.
- يمكنك بدء تغيير العنوان الأساسي إما عن طريق الاتصال بعدد عمليات الإيداع التي قمت بها والتي تريد إعادة تحديدها:
$ git rebase -i HEAD~5
- بدلاً من ذلك، يمكنك إعادة العنوان استنادًا إلى سلسلة تنفيذ أو تجزئة معينة:
$ git rebase -i 074a4e5
- بمجرد قيامك بسحق الالتزامات أو إعادة صياغتها، يمكنك إكمال إعادة تأسيس الفرع الخاص بك لأحدث إصدار من رمز المنبع الخاص بالمشروع. لاحظ أن بعض المستودعات قد تستخدم master بدلاً من main:
$ git rebase upstream/main
11. التراجع وإعادة الضبط
- يمكنك التراجع عن التغييرات التي أجريتها على التزام معين باستخدام revert. يجب أن تكون شجرة العمل الخاصة بك نظيفة حتى يتحقق ذلك:
$ git revert 1fc6665
في بعض الأحيان، بما في ذلك بعد تغيير الأساس، تحتاج إلى إعادة تعيين شجرة العمل الخاصة بك.
- يمكنك إعادة التعيين إلى التزام معين، وحذف جميع التغييرات، باستخدام الأمر التالي:
$ git reset --hard 1fc6665
لفرض دفع آخر التزام معروف غير متعارض إلى مستودع الأصل، ستحتاج إلى استخدام –force:
تحذير: غالبًا ما يكون الدفع الإجباري إلى الفرع الرئيسي (في بعض الأحيان master) أمرًا مستهجنًا ما لم يكن هناك سبب مهم حقًا للقيام بذلك. استخدمه باعتدال عند العمل في مستودعاتك الخاصة، واعمل على تجنب ذلك عندما تتعاون.
$ git push --force origin main
- لإزالة الملفات والأدلة الفرعية المحلية التي لم يتم تعقبها من دليل جيت لفرع عمل نظيف، يمكنك استخدام git clean:
$ git clean -f -d
إذا كنت بحاجة إلى تعديل مستودعك المحلي بحيث يبدو مثل الفرع الرئيسي الحالي (أي، هناك الكثير من المتعارضات)، يمكنك إجراء إعادة تعيين ثابت:
ملاحظة: سيؤدي تنفيذ هذا الأمر إلى جعل المستودع المحلي الخاص بك يبدو تمامًا مثل المنبع. سيتم تدمير أي التزامات قمت بها ولكن لم يتم سحبها في المنبع.
$ git reset --hard upstream/main