Git bisect: كيفية التعرف على الخلل في التعليمات البرمجية الخاصة بك؟



في هذه المقالة حول git bisect ، تعرف على كيفية مساعدة الأمر 'git bisect' في اكتشاف أول التزام خاطئ يقدم خطأً باستخدام خوارزمية بحث ثنائية.

كان الكود الخاص بي يعمل بشكل جيد حتى يوم أمس ، ولكن ليس حتى كسر السحب الأخير من المستودع البعيد الرمز !!!

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

الموضوعات التي يتم تناولها في هذه المقالة هي كما يلي:





لماذا استخدام git bisect؟

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



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

كيف يتم البحث عن 'git bisect'؟



هذا الأمر شطر (يقسم) تاريخك بين حسن و ال سيئة ارتكب نطاق. يشير الخاص بك تيار مشروع حالة إلى أ متوسط ​​المدى ارتكب لمحة. ثم ينتقل الأمر git bisect كل معرف ارتكاب بين هذا النطاق توقف في كل لقطة للسماح لك بذلك اختبر الكود . إذا كان الخطأ موجودًا ، فأنت تعلن عن الالتزام كـ سيئة، إن لم يكن كذلك حسن ما لم ينتهي البحث.

بناء الجملة

بوابة شطر

لفهم git bisect بشكل أفضل ، دعنا ننشئ مشروعًا يطور الكود لتطبيق ملاحة بسيط لاستخدامه في السيارة.

الإعداد الأولي للمشروع

لإنشاء مشروع يطور رمز تطبيق تنقل بسيط لاستخدامه في السيارة ، يمكنك اتباع الخطوات التالية:

الخطوة 1: قم بإنشاء دليل جديد في مجلد $ HOME الخاص بك:

cd $ HOME mkdir my_nav_app

الخطوة 2: انتقل إلى الدليل الجديد:

القرص المضغوط $ my_nav_app

الخطوه 3: استنساخ لتنزيل المشروع من صفحة GitHub الخاصة بي:

استنساخ بوابة https://github.com/divyabhushan/my_nav_app.git

الآن ، دعنا نفهم أدلة المشروع وتخطيط الملفات ، كما هو مطبوع بواسطة الأمر:ls -lTR

تخطيط رمز المصدر - Git Bisect - Edureka

بعد ذلك ، دعنا نرى مجلة محفوظات المشروع لعرض الالتزامات التي قمت بها لإنشاء هذا الرمز-

على سبيل المثال ، يقوم أمر git log البسيط بطباعة السجل بالتفصيل ، ومع ذلك ، أود تنسيق السجل وتخصيصه بشكل جميل. لذلك دعونا تعيين اسم مستعار - 'اصمت' باستخدام الاسم المستعار git الأمر كما هو موضح أدناه:

كيفية تنفيذ الطريقة المجردة في جافا

git alias.hist 'log --pretty = التنسيق:'٪ C (أصفر)٪ h٪ Creset٪ ad | ٪ C (أخضر)٪ s٪ Creset٪ C (أحمر)٪ d٪ Creset٪ C (أزرق) [٪ an] '- رسم بياني - تاريخ = قصير'

الآن ، سأقوم بتنفيذ ميزة إصلاح الأخطاء هذه في فرع منفصل ، حتى لا تتداخل مع التطوير الرئيسي في الفرع 'الرئيسي'. للقيام بذلك ، اتبع مجموعة الأوامر أدناه:

  • إنشاء فرع 'dev': [سيد] $فرع بوابة ديف
  • التبديل إلى الفرع 'dev': $بوابة الخروج ديف
  • قائمة بسجلات التاريخ: [ديف] $اذهب اصمت[ملاحظة: استخدام أمر 'الاسم المستعار' هنا]

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

والآن ، بعد أن علمنا بآخر التزاماتنا الجيدة ، دعنا نتقدم في هذه المقالة حول 'git bisect' ونختبر التطبيق.

اختبر التطبيق

قم بتشغيل البرنامج النصي كـ - $./scripts/myApplication.sh[الاختبار لأول مرة]



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

تحديد المخالفة

لبدء فحص الالتزام السيئ ، اتبع الخطوات التالية:

  • ابدأ الأمر bisect :بداية git bisect
  • أذكر معرّف ارتكاب سيئ: بوابة المنصف رأس سيئةأوبوابة bisect c5b3ca8
  • اذكر آخر معرّف معروف جيد الالتزام: git bisect good v1.0أوبوابة bisect 93859d8

يؤدي هذا إلى تقسيم نطاق سجل الالتزام تقريبًا في منتصف الطريق بين الالتزامات الجيدة والسيئة التي تقودنا إلى معرف الالتزام: f61a7e8

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

أمر لتشغيل التطبيق : $./scripts/myApplication.sh[اختبار المرة الثانية]


منذ التطبيق تم الاجتياز بنجاح في هذا الالتزام ، هذا الالتزام ليس بالتأكيد ارتكابًا سيئًا. لذلك ، بعد ذلك ، عليك إبلاغ الأمر bisect بنفس الأمر مثل - $بوابة شطر جيدة


الآن ، سيؤدي هذا إلى تضييق نطاق نتيجة البحث في النصف الأول من النطاق كما هو موضح -


اختبر التطبيق مرة أخرى - الأمر: $./scripts/myApplication.sh[الاختبار للمرة الثالثة]


لذلك ، نظرًا لأننا نرى خطأً على النحو الوارد أعلاه ، فهذا التزام سيء.

دع الأمر bisect يعرف ، قم بتشغيل $بوابة المنصف سيئة


يؤدي ذلك إلى تضييق نطاق البحث بشكل أكبر وينقلك إلى آخر مراجعة وسط زرقاء محاطة بدائرة: a6ac769

لذلك ، أختبر طلبي للمرة الأخيرة باستخدام نفس الأمر: $./scripts/myApplication.sh[اختبار للمرة الرابعة]

الآن ، منذ فشل التطبيق مرة أخرى ، لا يزال التزامًا سيئًا. لذلك ، لنقم بتشغيل الأمر التالي:

قم بتشغيل الأمر: بوابة المنصف سيئة

تم العثور على التزام خاطئ

هذا يخلص إلى أن الالتزام الأخير الوحيد المتبقي هو أمر سيء-


لذلك أنت تعلم أن هذا هو المكان الذي انكسر فيه الرمز. ماذا بعد؟

افهم الملف الذي يحتوي على الخطأ

في هذه الحالة ، يمنحك الإخراج الحد الأدنى من المعلومات حول ملف ارتكاب معرف ، اسم المؤلف ، و ال تاريخ المؤلف جنبا إلى جنب مع ارتكاب رسالة و ال مسار الذي تم تعديله.

إذا كنت ترغب في مزيد من التصحيح تحتاج إلى اقرأ ال ارتكاب كائن معرف .

أمر: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef

سيؤدي هذا إلى قراءة كائن الالتزام وطباعة رسالة السجل والفروق النصية.

يمكنك أيضًا استخدام الأمر 'git blame' لتحليل كيف وفي أي التزام تم تغيير كل سطر بواسطة المؤلف ، قم بتشغيل الأمر على النحو التالي:git blame code / developer_nav.sh

أوقف البحث

لإيقاف البحث ، استخدم الأمر التالي:

أمر: إعادة تعيين بوابة bisect


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

كيفية إصلاح / تصحيح الكود؟

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

مهمة: التراجع عن التغييرات التي تم إجراؤها بواسطة الالتزام السيئ المذكور

أمر: بوابة العودة a6ac769

وظيفة goto c ++

نتيجةً لذلك ، أدى التراجع عن التغييرات التي أجراها هذا الالتزام إلى شيئين:

  • تم حذف آخر 3 خطوط مضافة (المشار إليها باللون الأخضر) وإضافة السطر المحذوف (المشار إليه باللون الأحمر) مرة أخرى. (عكس a6ac769)
  • إنشاء التزام إضافي مع معلومات رسالة التراجع

'يسهّل الأمر Revert أيضًا تتبع التغيير الذي رجعته من الالتزام الأصلي'

استخدم ال 'تبين' الأمر مرة أخرى لقراءة معرف الكائن ، مثل

أمر: عرض بوابة 801f029

الآن ، تابع واختبر التطبيق. سيتم تنفيذه بشكل صحيح.

أمر: $./scripts/myApplication.sh

في المقابل ، إذا كنت تريد إزالة الالتزام السيئ من السجل:

  • يمكنك استخدام إعادة تعيين بوابة 'الأمر مع'--الصعب”(على الرغم من عدم التوصية به في مستودع مشترك).

  • تحقق من نسخة سابقة من ملف واحد باستخدامبوابة الخروج'الأمر مع'-' اختيار.

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

تحديث الفرع 'الرئيسي'

بينما أصلحت الخطأ في فرع 'dev' ، يمكنني الآن دمج هذا التغيير مع الفرع 'الرئيسي' أيضًا-

  • قم بالتبديل إلى 'رئيسي' ، الأمر:بوابة الخروج سيد
  • سحب التحديثات الأخيرة من 'الأصل / الرئيسي' إلى 'الرئيسي' ، الأمر:بوابة سحب الأصل
  • دمج تغييرات 'dev' ، الأمر:git merge العملاق

ومع ذلك ، قد يؤدي الدمج إلى حدوث تعارضات إذا كان هناك المزيد من عمليات الإيداع من المستودع البعيد. حل التعارضات واستمر في الدمج.
أخيرًا ، ادفع فقط التزامات الفرع 'الرئيسي' المستقر إلى المستودع البعيد أثناء تنفيذ عملك القذر (الأخطاء ، الميزات ، التحسينات) فقط على أفرع الميزات مثل 'dev' في هذا المثال.
علاوة على ذلك ، من الأفضل اعتماد منطقي استراتيجية التفرع لتبسيط عملية سير عمل git وتأمينها.

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

بالإضافة إلى الأمرين الفرعيين 'جيد' و 'سيئ' ، يمكنك أيضًا استخدام مصطلحات مثل الجديد والقديم لوصف حالة المراجعة. يمكنك تشغيل الأمر عدة مرات لتمرير أوامر فرعية مختلفة ومعرفات المراجعة / الالتزام لتحديد هويات الالتزام المختلفة (she-1). بدلاً من ذلك ، يمكن أيضًا تشغيل برنامج نصي للاختبار الآلي لإنشاء التعليمات البرمجية المعطلة باستخدام هذا الأمر. ابحث أيضًا عن وصف مفصل لهذا الأمر عن طريق التشغيلgit bisect - helpعلى المحطة. لذا ، يا رفاق بهذا ، ننتهي من هذه المقالة على Git Bisect.

تهدف DevOps إلى إنشاء برامج ذات جودة أفضل بسرعة أكبر وموثوقية أكبر مع دعوة المزيد من التواصل والتعاون بين الفرق. إذا كنت مفتونًا بهذه المقالة ، ج تحقق من من Edureka ، وهي شركة تعليمية موثوقة عبر الإنترنت مع شبكة تضم أكثر من 250000 متعلم راضٍ منتشرين في جميع أنحاء العالم. تساعد الدورة التدريبية لشهادة Edureka DevOps المتعلمين على فهم ما هو DevOps واكتساب الخبرة في عمليات وأدوات DevOps المختلفة مثل Puppet و Jenkins و Nagios و Ansible و Chef و Saltstack و GIT لأتمتة خطوات متعددة في SDLC.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات بمقال 'Git Bisect' وسنرد عليك في أسرع وقت ممكن.