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

حفظ التغييرات وعرضها باستخدام غيت Git في مشاريع بايثون


Naser Dakhel

يمكنك الاستمرار بكتابة الشيفرة البرمجية لمشروعك بعد إضافة ملفات جديدة إلى المستودع، وعندما تريد حفظ تعديل (تعديلات) ما، يمكنك تنفيذ الأمر git add .‎ لإدراج جميع الملفات المعدلة ثم كتابة الأمر git commit -m <commit message>‎‎‎‎ لإيداع أو حفظ جميع الملفات المُدرجة، لكن فعل ذلك أسهل باستخدام الأمر git commit -am <commit message>‎‎‎‎:

C:\Users\Al\wizcoin>‎‎‎git commit -am "Fixed the currency conversion bug."
[master (root-commit) e1ae3a3] Fixed the currency conversion bug.
 1 file changed, 12 insertions(+)

إذا كنت تريد إيداع بعض الملفات المعدّلة فقط بدلًا من كل ملف معدل، فيمكنك حذف الخيار ‎-a من ‎-am وتحديد الملفات التي تريدها بعد رسالة التنفيذ، مثل:

git commit -m <commit message>‎‎‎ file1.py file2.py

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

إذا نسيت إضافة راية سطر الأوامر ‎-m "<message>‎‎‎"‎، فسوف يفتح لك غيت محرر نص فيم Vim في الطرفية. لكن شرح التعامل مع محرر فيم خارج نطاق هذه السلسلة، لذا اضغط على مفتاح ESC وأدخل ‎!‎qa للخروج بأمان من محرر فيم Vim وإلغاء عملية الإيداع، ثم أدخل الأمر git commit مرةً أخرى لكن وهذه المرة باستخدام سطر الأوامر  ‎-m "<message>"‎‎‎‎.

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

الملفات مودعة الآن بأمان في مستودع غيت. نفّذ git status مرةً أخرى لعرض حالتها:

C:\Users\Al\wizcoin>git status
On branch master
nothing to commit, working tree clean

من خلال إيداع الملفات المُدرجة، تُنقل إلى حالة الإيداع، فقد أخبرنا غيت هنا أن شجرة العمل working tree نظيفة؛ بمعنى آخر، لا توجد ملفات معدلة أو مُدرجة. باختصار، عندما أضفنا الملفات إلى مستودع غيت، انتقلت الملفات من حالة غير مُتتبعة (untracked) إلى مُدرجة (staged) ثم إلى حالة الإيداع (committed). الملفات جاهزة الآن للتعديل في المستقبل.

لاحظ أنه لا يمكنك تثبيت المجلدات في مستودعات غيت، إذ يُضمّن غيت المجلدات تلقائيًا في المستودع عند تنفيذ ملف فيها، ولكن لا يمكنك إنشاء مجلد فارغ.

إذا كان هناك خطأ إملائي في رسالة الإيداع، فيمكنك إعادة كتابتها باستخدام الأمر التالي:

git commit --amend -m "<new commit message>‎‎‎"‎

استخدام git diff لعرض التغييرات قبل الإيداع

يجب عليك مراجعة التغييرات التي ستودعها عند تنفيذ git commit قبل إيداع الشيفرة البرمجية، إذ يمكنك عرض الاختلافات بين الشيفرة الموجودة حاليًا في مجلد العمل الخاص بك والشيفرة في آخر إيداع باستخدام الأمر git diff.

دعنا ننظر إلى مثال عن استخدام git diff؛ افتح الملف "README.md" في محرر النصوص أو بيئة التطوير IDE، إذ ينبغي أن تكون قد أنشأت هذا الملف عند تنفيذ أداة Cookiecutter. إذا لم يكن موجودًا، فأنشئ ملفًا نصيًا فارغًا واحفظه باسم README.md. هذا الملف هو بتنسيق مارك داون Markdown، ولكن كما هو الحال مع نصوص بايثون، فهو مكتوب على أنه نص عادي. غيّر TODO - fill this in later في قسم Quickstart Guide بما يلي واحتفظ بالخطأ الإملائي في xample في الوقت الحالي، وسنصححه لاحقًا:

Quickstart Guide
----------------

Here's some xample code demonstrating how this module is used:

    >>> import wizcoin
    >>> coin = wizcoin.WizCoin(2, 5, 10)
    >>> str(coin)
    '2g, 5s, 10k'
    >>> coin.value()
    1141

قبل أن نضيف README.md ونودعه، نفّذ الأمر git diff لرؤية التغييرات التي أجريناها:

C:\Users\Al\wizcoin>git diff
diff --git a/README.md b/README.md
index 76b5814..3be49c3 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,14 @@ To install with pip, run:
 Quickstart Guide
 ----------------

-TODO - fill this in later
+Here's some xample code demonstrating how this module is used:
+
+    >>> import wizcoin
+    >>> coin = wizcoin.WizCoin(2, 5, 10)
+    >>> str(coin)
+    '2g, 5s, 10k'
+    >>> coin.value()
+    1141

 Contribute
 ----------

يوضّح الخرج أن ملف README.md في نسخة العمل الخاصة بك قد تغير عن README.md كما هو موجود في آخر إيداع من المستودع. أزيلت الأسطر التي تبدأ بعلامة الطرح -، واُضيفت الأسطر التي تبدأ بعلامة الجمع +.

أثناء مراجعة التغييرات، ستلاحظ أيضًا أننا ارتكبنا خطأ إملائيًا من خلال كتابة xapmle بدلًا من example. يجب ألا نودع هذا الخطأ المطبعي. لذا دعنا نصححه ثم ننفذ git diff مرةً أخرى لفحص التغيير وإضافته وإيداعه في المستودع:

C:\Users\Al\wizcoin>git diff
diff --git a/README.md b/README.md
index 76b5814..3be49c3 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,14 @@ To install with pip, run:
 Quickstart Guide
 ----------------

-TODO - fill this in later
+Here's some example code demonstrating how this module is used:
--snip--
C:\Users\Al\wizcoin>git add README.md

C:\Users\Al\wizcoin>git commit -m "Added example code to README.md"
[master 2a4c5b8] Added example code to README.md
 1 file changed, 8 insertions(+), 1 deletion(-)

التصحيح مودع الآن بأمان في المستودع.

استخدام git difftool لعرض التغييرات ضمن واجهة رسومية GUI

من الأسهل رؤية التغييرات باستخدام برنامج يستخدم واجهة رسومية، إذ يمكنك تنزيل WinMerge على نظام ويندوز؛ وهو برنامج مفتوح المصدر ومجاني لاستعراض الفرق بين الملفات ، ثم تثبيته. أما في نظام لينكس أوبنتو، يمكنك تثبيت إما Meld باستخدام الأمر التالي:

sudo apt-get install meld

أو تثبيت Kompare باستخدام الأمر التالي:

sudo apt-get install kompare

بينما يمكنك على ماك macOS تثبيت tkdiff باستخدام الأوامر التي تثبّت وتُهيّئ Homebrew ثم استخدام Homebrew لتثبيت tkdiff:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew install tkdiff

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

git config diff.tool <tool_name>‎

إذ يكون <tool_name> هو winmerge أو tkdiff أو meld أو kompare، ثم نفذ الأمر git difftool <filename>‎ لعرض التغييرات المُجراة على ملف في واجهة المستخدم الرسومية، كما هو موضح في الشكل 5.

winmerge-gui.png

الشكل 5: أداة واجهة المستخدم الرسومية -في هذه الحالة WinMerge- وهي أسهل للقراءة من إخراج نص git diff.

إضافةً إلى ذلك، يمكنك تنفيذ الأمر التالي:

git config --global difftool.prompt false

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

كم مرة يجب أن أحفظ التغييرات؟

على الرغم من أن نظام التحكم في الإصدارات يسمح لك باستعادة ملفاتك إلى إيداع سابق، فقد تتساءل عن عدد المرات التي يجب أن تجري فيها الإيداع (الحفظ)؛ فإذا كنت تودع بصورةٍ متكررة، فستواجه مشكلة في فرز عدد كبير من الإيداعات غير المهمة للعثور على إصدار الشيفرة الذي تبحث عنه؛ أما إذا كنت تودع بصورةٍ غير متكررة، فسيحتوي كل إيداع على عدد كبير من التغييرات، وستؤدي العودة إلى إيداع معين إلى التراجع عن تغييرات أكثر مما تريد. يميل المبرمجون عمومًا إلى الإيداع بصورةٍ أقل مما ينبغي.

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

الخلاصة

يتتبع غيت git الملفات في مجلد العمل الخاص بك التي يمكن أن توجد جميعها في واحدة من ثلاث حالات: مُودعة committed (تسمى أيضًا غير معدلة أو نظيفة)، أو معدلة modified، أو مُدرجة staged. تحتوي أداة سطر أوامر غيت على العديد من الأوامر، مثل git status أو git log التي تتيح لك عرض هذه المعلومات، ولكن يمكنك أيضًا تثبيت العديد من أدوات خارجية إضافية لواجهة المستخدم الرسومية لغيت.

ينشئ الأمر git init مستودعًا جديدًا فارغًا على حاسوبك. ينسخ الأمر git clone المستودع من خادم بعيد، مثل موقع غيت هب GitHub الشهير. في كلتا الحالتين. بمجرد حصولك على المستودع، يمكنك استخدام git add و git commit لإجراء تغييرات في مستودعك، واستخدام git push لدفع هذه الإيداعات إلى مستودع غيت =هب عن بُعد. وصفنا أيضًا العديد من الأوامر في هذا الفصل للتراجع عن الإيداعات المُجراة حيث يسمح لك إجراء التراجع بالعودة إلى إصدار سابق من ملفاتك.

ترجمة -وبتصرف- للفصل 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.


×
×
  • أضف...