اذهب إلى المحتوى

استخدامات متقدمة لنظام التحكم بالإصدار Git لإدارة مشاريع بايثون


Naser Dakhel

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

حذف ملفات من مستودع

إذا لم تعد بحاجة لغيت لتتبع الملف، فلا يمكنك ببساطة حذف الملف من نظام الملفات، إذ يجب عليك حذفه من خلال غيت باستخدام الأمر git rm، الذي يخبر غيت أيضًا بإلغاء تتبع الملف. للتمرن على ذلك، نفذ الأمر التالي لإنشاء ملف صغير يسمى deleteme.txt يحتوي النص "Test file":

echo "Test file"> deleteme.txt

ثم أودعه في المستودع عن طريق تنفيذ الأوامر التالية:

C:\Users\Al\wizcoin>echo "Test file" > deleteme.txt
C:\Users\Al\wizcoin>git add deleteme.txt
C:\Users\Al\wizcoin>git commit -m "Adding a file to test Git deletion."
[master 441556a] Adding a file to test Git deletion.
 1 file changed, 1 insertion(+)
 create mode 100644 deleteme.txt
C:\Users\Al\wizcoin>git status
On branch master
nothing to commit, working tree clean

لا تحذف الملف باستخدام الأمر del في نظام التشغيل ويندوز، أو الأمر rm في نظامي ماك macOS ولينكس Linux، وإذا نفذت ذلك، يمكنك تنفيذ ‎git restore <filename>‎ لاستعادته أو ببساطة الاستمرار في الأمر git rm لإزالته من المستودع، واستخدم بدلًا من ذلك الأمر git rm لحذف ملف deleteme.txt وإدراجه كما يوضح هذا المثال:

C:\Users\Al\wizcoin>git rm deleteme.txt
rm deleteme.txt'

يحذف الأمر git rm الملف من نسخة العمل الخاصة بك، لكنك لم تنته بعد. يُدرج الأمر  git rm الملف، مثل git add، وتحتاج إلى تنفيذ حذف الملف تمامًا مثل أي تغيير آخر:

C:\Users\Al\wizcoin>git status
On branch master
Changes to be committed:
 1 (use "git reset HEAD <file>..." to unstage)

        deleted:    deleteme.txt

C:\Users\Al\wizcoin>git commit -m "Deleting deleteme.txt from the repo to finish the deletion test."
[master 369de78] Deleting deleteme.txt from the repo to finish the deletion test.
 1 file changed, 1 deletion(-)
 delete mode 100644 deleteme.txt
C:\Users\Al\Desktop\wizcoin>git status
On branch master
nothing to commit, working tree clean

على الرغم من أنك حذفت deleteme.txt من نسخة العمل الخاصة بك، إلا أنها لا تزال موجودة في محفوظات المستودع. يصف قسم "استرداد التغييرات القديمة" لاحقًا في هذه المقالة كيفية استرداد ملف محذوف أو التراجع عن تغيير.

يعمل الأمر git rm فقط على الملفات الموجودة في حالة الإيداع، دون أي تعديلات. بخلاف ذلك، يطلب منك غيت إيداع التغييرات أو التراجع عنها باستخدام الأمر git reset HEAD <filename>‎‎‎، ويذكّرك خرج git status بهذا الأمر في السطر 1. يمنعك هذا الإجراء من حذف التغييرات غير المودعة بها عن طريق الخطأ.

إعادة تسمية ونقل الملفات في المستودع

على غرار حذف ملف، لا ينبغي عليك إعادة تسمية ملف موجود في المستودع أو نقله إلا إذا كنت تستخدم غيت، وإذا حاولت فعل ذلك دون استخدام غيت، سيعتقد أنك حذفت ملفًا ثم أنشأت ملفًا جديدًا يحتوي على نفس المحتوى. بدلًا من ذلك، استخدم الأمر git mv متبوعًا بالأمر git commit. دعنا نعيد تسمية الملف README.md إلى README.txt عن طريق تنفيذ الأوامر التالية:

C:\Users\Al\wizcoin>git mv README.md README.txt
C:\Users\Al\wizcoin>git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        renamed:    README.md -> README.txt


C:\Users\Al\wizcoin>git commit -m "Testing the renaming of files in Git."
[master 3fee6a6] Testing the renaming of files in Git.
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename README.md => README.txt (100%)

بهذه الطريقة، يتضمن تاريخ التغييرات المُجراة على الملف README.txt أيضًا تاريخ README.md.

يمكننا أيضًا استخدام الأمر git mv لنقل ملف إلى مجلد جديد. أدخل الأوامر التالية لإنشاء مجلد جديد يدعى movetest وانقل الملف README.txt إليه:

C:\Users\Al\wizcoin>mkdir movetest
C:\Users\Al\wizcoin>git mv README.txt movetest/README.txt
C:\Users\Al\wizcoin>git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        renamed:    README.txt -> movetest/README.txt

C:\Users\Al\wizcoin>git commit -m "Testing the moving of files in Git."
[master 3ed22ed] Testing the moving of files in Git.
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename README.txt => movetest/README.txt (100%)

يمكنك أيضًا إعادة تسمية ملف ونقله في الوقت نفسه عن طريق إدخال اسم وموقع جديدين في الأمر git mv. دعنا نعيد الملف README.txt إلى مكانه الأصلي في جذر مجلد المشروع ونمنحه اسمه الأصلي:

C:\Users\Al\wizcoin>git mv movetest/README.txt README.md
C:\Users\Al\wizcoin>git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        renamed:    movetest/README.txt -> README.md

C:\Users\Al\wizcoin>git commit -m "Moving the README file back to its original place and name."
[master 962a8ba] Moving the README file back to its original place and name.
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename movetest/README.txt => README.md (100%)

لاحظ أنه على الرغم من عودة الملف README.md إلى مجلده الأصلي واسمه الأصلي، يتذكر مستودع غيت التنقلات وتغييرات الاسم. يمكنك رؤية هذا السجل باستخدام الأمر git log، الموضح في القسم التالي.

عرض سجل الإيداع

يُخرج الأمر git log قائمة بجميع الإيداعات:

C:\Users\Al\wizcoin>git log
commit 962a8baa29e452c74d40075d92b00897b02668fb (HEAD -> master)
Author: Al Sweigart <al@inventwithpython.com>
Date:   Wed Sep 1 10:38:23 2021 -0700

    Moving the README file back to its original place and name.

commit 3ed22ed7ae26220bbd4c4f6bc52f4700dbb7c1f1
Author: Al Sweigart <al@inventwithpython.com>
Date:   Wed Sep 1 10:36:29 2021 -0700

    Testing the moving of files in Git.

--snip

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

إذا كنت ترغب بإستعادة ملفاتك إلى إيداع أقدم من آخر إيداع، فأنت بحاجة أولًا إلى العثور على قيمة التعمية الخاصة بالإيداع commit hash، وهي سلسلة مكونة من 40 حرفًا من الأرقام بنظام العد الست عشري (تتكون من الأرقام والأحرف من A إلى F)، التي تعمل بمثابة معرّف فريد للإيداع. على سبيل المثال، قيمة التعمية الكاملة لأحدث إيداع في المستودع الخاص بنا هي:

962a8baa29e452c74d40075d92b00897b02668fb

لكن من الشائع استخدام أول سبعة أرقام فقط: 962a8ba.

بمرور الوقت، يمكن أن يصبح السجل طويلًا جدًا، ولذلك يجزِّء الأمر ‎--oneline الخرج إلى قيمة تعمية مختصرة للإيداعات، إضافةً إلى السطر الأول من كل رسالة إيداع. أدخل git log --oneline في سطر الأوامر:

C:\Users\Al\wizcoin>git log --oneline
962a8ba (HEAD -> master) Moving the README file back to its original place and name.
3ed22ed Testing the moving of files in Git.
15734e5 Deleting deleteme.txt from the repo to finish the deletion test.
441556a Adding a file to test Git deletion.
2a4c5b8 Added example code to README.md
e1ae3a3 An initial add of the project files.

إذا كان السجل لا يزال طويلًا جدًا، فيمكنك استخدام ‎-n لتقييد الخرج إلى أحدث عملية إيداع. حاول إدخال git log --oneline -n 3 لعرض الإيداعات الثلاثة الأخيرة فقط:

C:\Users\Al\wizcoin>git log --oneline -n 3
962a8ba (HEAD -> master) Moving the README file back to its original place and name.
3ed22ed Testing the moving of files in Git.
15734e5 Deleting deleteme.txt from the repo to finish the deletion test.

يمكنك تنفيذ الأمر git show <hash>: <filename>‎‎‎ لعرض محتويات الملف كما كانت في إيداع معين، إلا أن أدوات واجهة المستخدم الرسومية لغيت ستوفر واجهةً أكثر ملاءمة لفحص سجل المستودع مقارنةً بما توفره أداة سطر الأوامر لغيت.

استعادة التغييرات القديمة

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

ضع في الحسبان أن أنظمة التحكم في الإصدار تضيف المعلومات فقط، فحتى عند حذف ملف من المستودع، سيتذكر غيت الملف حتى تتمكن من استعادته لاحقًا. يؤدي التراجع عن تغيير في الواقع إلى إضافة تغيير جديد يعيد محتوى الملف إلى حالته في الإيداع السابق. ستجد معلومات مفصلة عن أنواع مختلفة من التراجع في المقال التراجع عن التعديلات في Git والمقال How to undo (almost) anything with Git من GitHub.

التراجع عن التغييرات المحلية غير المودعة

إذا أجريت تغييرات غير مودعة على ملف ولكنك تريد إعادته إلى الإصدار في آخر إيداع، فيمكنك تنفيذ الأمر git restore <filename>‎. في المثال التالي، نعدّل ملف README.md دون إدراج التعديل أو إيداعه:

 C:\Users\Al\wizcoin>git status 
On branch master

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

C:\Users\Al\wizcoin>git restore README.md
C:\Users\Al\wizcoin>git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

يعود محتوى README.md إلى محتوى الإيداع الأخير بعد تنفيذ الأمر restore README.md، ويعد هذا التراجع فعالًا عن التغييرات التي أجريتها على الملف (ولكن لم تُدرج أو تُودع بعد). كن حذرًا، إذ لا يمكنك التراجع عن التراجع لاستعادة التغييرات.

يمكنك أيضًا تنفيذ git checkout .‎ للتراجع عن جميع التغييرات التي أجريتها على كل ملف في نسخة العمل الخاصة بك.

التراجع عن إدراج ملف مدرج

إذا كنت قد أدرجت ملفًا معدلًا عن طريق تنفيذ الأمر git add عليه، ولكنك بت الآن ترغب في إزالته من الإدراج حتى لا يتم تضمينه في الإيداع التالي، فعليك في هذه الحالة أن تنفّذ git restore --staged <filename>‎‎‎ لإلغاء إدراجه:

C:\Users\Al>git restore --staged README.md
Unstaged changes after reset:
M   spam.txt

يظل الملف README.md معدلًا كما كان قبل أن يُدرج الأمر git add الملف، إلا أن الملف لم يعد في الحالة المُدرجة.

التراجع عن أحدث الإيداعات

لنفترض إنشائك لعدة إيداعات غير مفيدة وتريد البدء من جديد من إيداع سابق. للتراجع عن عدد محدد من أحدث إيداعات، على سبيل المثال، ثلاثة، استخدم الأمر git revert -n HEAD ~ 3..HEAD. يمكنك استبدال 3 بأي عدد من الإيداعات. على سبيل المثال، لنفترض أنك تتبعت التغييرات على رواية غامضة كنت تكتبها ولديك سجل غيت التالي لجميع إيداعاتك ورسائل إيداعاتك.

C:\Users\Al\novel>git log --oneline
de24642 (HEAD -> master) Changed the setting to outer space.
2be4163 Added a whacky sidekick.
97c655e Renamed the detective to 'Snuggles'.
8aa5222 Added an exciting plot twist.
2590860 Finished chapter 1.
2dece36 Started my novel.

قررت لاحقًا أنك تريد البدء من جديد في عملية التطوير بدءًا من الإيداع رقم 8aa5222، وهذا يعني أنه يجب عليك التراجع عن التغييرات من عمليات التنفيذ الثلاثة الأخيرة: de24642 و 2be4163 و 97c655e. نفّذ الأمر التالي للتراجع عن هذه التغييرات:

git revert -n HEAD ~ 3..HEAD

ثم نفذ الأمر git add .‎ و git commit -m "<commit message>‎‎‎"‎ لتطبيق هذا المحتوى، تمامًا كما تفعل مع أي تغيير آخر:

C:\Users\Al\novel>git revert -n HEAD~3..HEAD

C:\Users\Al\novel>git add .

C:\Users\Al\novel>git commit -m "Starting over from the plot twist."
[master faec20e] Starting over from the plot twist.
 1 file changed, 34 deletions(-)

C:\Users\Al\novel>git log --oneline
faec20e (HEAD -> master) Starting over from the plot twist.
de24642 Changed the setting to outer space.
2be4163 Added a whacky sidekick.
97c655e Renamed the detective to 'Snuggles'.
8aa5222 Added an exciting plot twist.
2590860 Finished chapter 1.
2dece36 Started my novel.

تضيف مستودعات غيت عادةً المعلومات فقط، لذا فإن التراجع عن هذه الإيداعات لا يزال يتركها في سجل الإيداع. إذا أردت في أي وقت التراجع عن هذا "التراجع"، يمكنك التراجع عنه باستخدام git revert مرةً أخرى.

التراجع إلى إيداع محدد لملف واحد

نظرًا لأن الإيداعات تلتقط حالة المستودع كاملًا بدلًا من الملفات الفردية، فستحتاج إلى أمر مختلف إذا كنت تريد التراجع عن التغييرات لملف واحد. على سبيل المثال، لنفترض وجود مستودع غيت لمشروع برمجي صغير، وأنشأنا ملف eggs.py وأضفنا الدالة spam()‎ و fish()‎، ثم أعدنا تسمية fish()‎ إلى cheese()‎. سيبدو سجل المستودع كما يلي:

C:\Users\Al\myproject>git log --oneline
895d220 (HEAD -> master) Adding email support to cheese().
df617da Renaming fish() to cheese().
ef1e4bb Refactoring fish().
ac27c9e Adding fish() function.
009b7c0 Adding better documentation to spam().
0657588 Creating spam() function.
d811971 Initial add.

لكننا قررنا أنه نريد إعادة الملف إلى قبل إضافة fish()‎ دون تغيير أي ملفات أخرى في المستودع. يمكننا هنا استخدام الأمر الآتي:

 git show <hash>: <filename>‎‎‎ 

لعرض هذا الملف كما كان بعد إيداع معين. سيبدو الأمر على النحو التالي:

C:\Users\Al\myproject>git show 009b7c0:eggs.py
<contents of eggs.py as it was at the 009b7c0 commit>

يمكننا ضبط محتويات eggs.py باستخدام git checkout <hash> - <filename>‎‎‎ على هذا الإصدار وإيداع الملف الذي تغيّر كما هو معتاد. يغيّر الأمر git checkout نسخة العمل فقط. ما زلت بحاجة إلى تنظيم وإيداع هذه التغييرات مثل أي تغيير آخر:

C:\Users\Al\myproject>git checkout 009b7c0 -- eggs.py

C:\Users\Al\myproject>git add eggs.py

C:\Users\Al\myproject>git commit -m "Rolled back eggs.py to 009b7c0"
[master d41e595] Rolled back eggs.py to 009b7c0
 1 file changed, 47 deletions(-)

C:\Users\Al\myproject>git log --oneline
d41e595 (HEAD -> master) Rolled back eggs.py to 009b7c0
895d220 Adding email support to cheese().
df617da Renaming bacon() to cheese().
ef1e4bb Refactoring bacon().
ac27c9e Adding bacon() function.
009b7c0 Adding better documentation to spam().
0657588 Creating spam() function.
d811971 Initial add.

جرى التراجع عن ملف eggs.py، وبقي المستودع كما هو.

إعادة كتابة تاريخ الإيداع

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

في الواقع، تعد إزالة هذه المعلومات من المستودع الخاص بك بحيث لا يمكن استردادها أمرًا صعبًا ولكنه ممكن، الخطوات الدقيقة لفعل ذلك هي خارج نطاق هذه السلسلة، ولكن يمكنك استخدام أمر git filter-Branch أو -الخيار الأفضل- أداة BFG Repo-Cleaner. يمكنك أن تقرأ عن كليهما على Removing sensitive data from a repository.

أسهل إجراء وقائي لهذه المشكلة هو أن يكون لديك ملف secrets.txt أو secret.py أو ملف يحمل اسمًا مشابهًا تضع فيه معلومات حساسة وخاصة وتضيفها إلى "‎.gitignore" حتى لا تودعها أبدًا عن طريق الخطأ في المستودع. يمكن لبرنامجك قراءة هذا الملف والحصول على المعلومات الحساسة بدلًا من أن تكون موجودة مباشرةً في شيفرة المصدر الخاص به.

منصة غيت هب GitHub وأمر git push

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

ملاحظة: على الرغم من أن المصطلحات يمكن أن تسبب ارتباكًا، إلا أن غيت هو برنامج للتحكم في الإصدار يحتفظ بمستودع ويتضمن الأمر git، بينما غيت هب GitHub هو موقع ويب يستضيف مستودعات غيت عبر الإنترنت.

انتقل إلى https://github.com وسجّل للحصول على حساب مجاني. انقر من صفحة غيت هب الرئيسية أو من نافذة المستودعات بصفحة ملفك الشخصي على زر جديد New لبدء مشروع جديد. أدخل wizcoin اسمًا للمستودع ووصف المشروع ذاته الذي قدمناه لأداة Cookiecutter سابقًا في "استخدام Cookiecutter لإنشاء مشاريع Python جديدة" في الصفحة 200، كما هو موضح في الشكل 6. حدّد المستودع على أنه عام Public وألغِ تحديد خانة إنشاء ملف اقرأني لهذا المستودع README Initialize this repository with a README باستخدام مربع الاختيار، لأننا سنستورد مستودعًا موجودًا. ثم انقر فوق إنشاء مستودع Create repository. تشبه هذه الخطوات فعليًا تنفيذ git init على موقع غيت هب.

tortoisegit-menu-overlay.png

ستجد صفحة الويب الخاصة بمستودعاتك علىhttps://github.com/<username>/<repo_name> ‎‎‎. يُستضاف في هذه الحالة مستودع wizcoin على https://github.com/asweigart/wizcoin.

إضافة مستودع موجود إلى غيت هب

لإضافة مستودع موجود من سطر الأوامر، أدخل ما يلي:

C:\Users\Al\wizcoin>git remote add origin https://github.com/<github_username>/wizcoin.git
C:\Users\Al\wizcoin>git push -u origin master
Username for 'https://github.com': <github_username>
Password for 'https://<github_username>@github.com': <github_password>
Counting objects: 3, done.
Writing objects: 100% (3/3), 213 bytes | 106.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/<your github>/wizcoin.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
 

يضيف الأمر التالي غيت هب كأنه مستودع بعيد remote يتوافق مع المستودع المحلي الخاص بك:

git remote add origin https://github.com/<github_username>‎‎‎/wizcoin.git

ثم تُضيف أي إيداعات أجريتها في المستودع المحلي الخاص بك إلى المستودع البعيد باستخدام الأمر التالي:

git push -u origin master

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

من الممكن أيضًا فعل العكس: إنشاء مستودع جديد على غيت هب واستنساخه clone على حاسوبك. أنشئ مستودعًا جديدًا على موقع غيت هب، ولكن هذه المرة، حدّد خانة أنشئ ملف اقرأني لهذا المستودع README Initialize this repository with a README باستخدام مربع الاختيار.

لاستنساخ هذا المستودع إلى حاسوبك، انتقل إلى صفحة المستودع على غيت هب وانقر على زر استنساخ أو تنزيل download لفتح نافذة يجب أن يبدو عنوان URL الخاص بها مثل https://github.com/<github_username>/wizcoin.git. استخدم عنوان URL لملف المستودع الخاص بك مع الأمر git clone لتنزيله على حاسوبك:

C:\Users\Al>‎‎‎git clone https://github.com/<github_username>‎‎‎/wizcoin.git
Cloning into 'wizcoin'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 5 (delta 0), reused 5 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), done.

يمكنك الآن إيداع وادراج التغييرات باستخدام مستودع غيت تمامًا كما لو كنت قد نفذت git init لإنشاء المستودع.

يُعد الأمر git clone مفيدًا أيضًا في حال دخول المستودع المحلي إلى حالة لا تعرف كيفية التراجع عنها. على الرغم من أنه ليس مثاليًا، يمكنك دائمًا حفظ نسخة من الملفات في مسار العمل الخاص بك، وحذف المستودع المحلي، واستخدام git clone لإعادة إنشاء المستودع. يحدث هذا السيناريو في كثير من الأحيان، حتى لمطوري البرامج ذوي الخبرة، وهو أساس النكتة الموجودة على xkcd.com.

الخلاصة

غيت هي أداة شاملة بها العديد من الميزات، وهذا الفصل يغطي فقط أساسيات نظام التحكم في الإصدارات. تتوفر لك العديد من الموارد لمعرفة المزيد حول ميزات غيت المتقدمة. لمزيد من المصادر حول أداة غبت Git، راجع قسم Git في أكاديمية حسوب ففيه عشرات المقالات المفيدة، وإن أردت التعمق أكثر، فنوصي بكتابين مجانيين يمكنك العثور عليهما عبر الإنترنت: Pro Git من تأليف سكوت شاركون Scott Charcon وكتاب Version Control by Example بواسطة اريك سينك Eric Sink .

ترجمة -وبتصرف- لقسم من الفصل Organizing Your Code Projects With Git من كتاب Beyond the Basic Stuff with Python.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...