Git bisect: จะระบุจุดบกพร่องในโค้ดของคุณได้อย่างไร?



บทความเกี่ยวกับ git bisect นี้เรียนรู้ว่าคำสั่ง 'git bisect' ช่วยในการตรวจจับการกระทำที่ไม่ดีครั้งแรกที่แนะนำข้อบกพร่องโดยใช้อัลกอริทึมการค้นหาแบบไบนารีได้อย่างไร

รหัสของฉันใช้งานได้ดีจนถึงเมื่อวานนี้ แต่ไม่นานจนกระทั่งการดึงจากที่เก็บระยะไกลทำลายรหัส !!!

หากคุณอยู่ในสถานการณ์ที่คล้ายกันและไม่ทราบ อะไรเปลี่ยนแปลง ทำลายรหัส หรือ Who จากผู้ร่วมให้ข้อมูลจำนวนมาก เป็นเจ้าของ นี้ จุดบกพร่อง / คุณลักษณะ ดังนั้น git bisect คือทางออกของคุณ ดังนั้นในบทความเกี่ยวกับ git bisect นี้คุณจะได้เรียนรู้ว่าคอมไพล์ทวิสต์คำสั่งมาถึง ช่วยในการตรวจจับการกระทำที่ไม่ดีครั้งแรกที่แนะนำข้อบกพร่องโดยใช้อัลกอริทึมการค้นหาแบบไบนารี

หัวข้อที่กล่าวถึงในบทความนี้มีดังนี้:





ทำไมต้องใช้ git bisect

ไม่ต้องสงสัยเลยว่าคุณมีแนวโน้มที่จะสร้างคอมมิชชันจำนวนมากสำหรับการเปลี่ยนแปลงเล็กน้อยทุกครั้ง . ในสถานการณ์เช่นนี้การดีบักโค้ดจะกลายเป็นงานที่น่าเบื่อเนื่องจากคุณต้องย้อนเวลากลับไปที่การแก้ไขสแน็ปช็อตโครงการทุกครั้งด้วยตนเองเพื่อทดสอบโค้ดที่ใช้งานได้และตรวจหาจุดบกพร่อง ตอนนี้สิ่งนี้ได้รับมากขึ้น ซับซ้อน เมื่อคุณมีงานอื่นที่ต้องตรวจสอบโดยไม่มีจุดนำไปสู่การขอให้แต่ละคนสะสางข้อผิดพลาดของตนเองก็ไม่ได้ฟังดูเป็นไปได้เช่นกัน
ในระหว่างนี้คุณอาจสร้างและละทิ้งสาขา 'คุณลักษณะ' (หรือโปรแกรมแก้ไขด่วน) จำนวนหนึ่งในกระบวนการและท้ายที่สุดเสียเวลาและความพยายามในขณะที่เบี่ยงเบนจากสายการพัฒนาหลัก



ดังนั้นเพื่อหลีกเลี่ยงสถานการณ์ดังกล่าวคุณสามารถใช้ไฟล์คอมไพล์ทวิสต์คำสั่งเพื่อค้นหาการแก้ไขโครงการที่ไม่ดี (หรือสแนปชอต) และในที่สุดแก้ไขด้วยไฟล์git เปลี่ยนกลับคำสั่ง

'git bisect' ค้นหาอย่างไร



คำสั่งนี้ แบ่งครึ่ง (แบ่ง) ประวัติของคุณระหว่าง ดี และ ไม่ดี กระทำ พิสัย. มันชี้ให้คุณเห็น ปัจจุบัน โครงการ สถานะ ถึงก ช่วงกลาง กระทำ ภาพรวม จากนั้นคำสั่ง git bisect จะเคลื่อนผ่าน ทุกรหัสการกระทำ ระหว่างช่วงนี้ในขณะที่ หยุดชั่วคราว ในแต่ละภาพรวมเพื่อให้คุณสามารถ ทดสอบรหัส . หากมีจุดบกพร่องอยู่คุณจะประกาศการคอมมิตเป็น ไม่ดี ถ้าไม่เป็น ดี เว้นแต่การค้นหาจะสิ้นสุดลง

ไวยากรณ์

คอมไพล์ทวิสต์

เพื่อให้เข้าใจ git bisect ได้ดีขึ้นให้เราสร้างโปรเจ็กต์ที่พัฒนาโค้ดสำหรับแอพนำทางอย่างง่ายที่จะใช้ในรถยนต์

การตั้งค่าโครงการเริ่มต้น

ในการสร้างโปรเจ็กต์ที่พัฒนาโค้ดสำหรับแอพนำทางอย่างง่ายที่จะใช้ในรถยนต์คุณสามารถทำตามขั้นตอนด้านล่าง:

ขั้นตอนที่ 1: สร้างไดเร็กทอรีใหม่ในโฟลเดอร์ $ HOME ของคุณ:

cd $ HOME mkdir my_nav_app

ขั้นตอนที่ 2: ไปที่ไดเร็กทอรีใหม่:

ซีดี $ my_nav_app

ขั้นตอนที่ 3: โคลนเพื่อดาวน์โหลดโครงการจากหน้า GitHub ของฉัน:

วิธีการแปลงเป็นไบนารีใน python
git clone https://github.com/divyabhushan/my_nav_app.git

ตอนนี้ให้เราเข้าใจไดเร็กทอรีโครงการและเค้าโครงไฟล์ตามที่พิมพ์โดยคำสั่ง:ls -lTR

เค้าโครงซอร์สโค้ด - Git Bisect - Edureka

ต่อไปให้เราดูสมุดรายวันประวัติโครงการเพื่อดูข้อตกลงที่ฉันทำเพื่อสร้างรหัสนี้ -

ตัวอย่างเช่นคำสั่ง git log อย่างง่ายจะพิมพ์ประวัติโดยละเอียดอย่างไรก็ตามฉันชอบจัดรูปแบบและปรับแต่งประวัติ ดังนั้นให้เรา ตั้งชื่อแทน - 'ประวัติ' ใช้ git นามแฝง คำสั่งดังที่แสดงด้านล่าง:

git alias.hist 'log --pretty = format:'% C (yellow)% h% Creset% ad | % C (สีเขียว)% s% Creset% C (สีแดง)% d% Creset% C (สีน้ำเงิน) [% an] '- กราฟ --decorate - วันที่ = สั้น'

ตอนนี้ฉันกำลังจะนำคุณลักษณะการแก้ไขข้อบกพร่องนี้ไปใช้ในสาขาแยกต่างหากเพื่อที่จะไม่รบกวนการพัฒนาหลักในสาขา 'หลัก' โดยทำตามชุดคำสั่งด้านล่าง:

  • สร้างสาขา 'dev': [master] $git branch dev
  • เปลี่ยนไปใช้ 'dev' สาขา: $git checkout dev
  • แสดงรายการบันทึกประวัติ: [dev] $ไปที่ประวัติศาสตร์[หมายเหตุ: ใช้คำสั่ง 'alias' ที่นี่]

นอกจากนี้ฉันได้เน้นการกระทำที่ดีล่าสุดที่ฉันรู้ว่าสคริปต์ของฉันทำงานได้ดีกับผลการทดสอบที่คาดหวังสแนปชอตการคอมมิตนี้คือ ติดแท็ก เป็น v1.0

ดังนั้นเมื่อเรารู้ถึงความมุ่งมั่นสุดท้ายที่ดีของเราแล้วให้เราไปต่อในบทความเรื่อง 'git bisect' และทดสอบแอปพลิเคชัน

ทดสอบแอปพลิเคชัน

เรียกใช้สคริปต์เป็น - $./scripts/myApplication.sh[ทดสอบครั้งแรก]



เห็นได้ชัดว่าสถานะโครงการปัจจุบันของฉันอยู่ใน ข้อผิดพลาด และฉันไม่แน่ใจว่าฉันได้ทำการเปลี่ยนแปลงอะไรในข้อตกลงที่ทำให้เกิดการเปลี่ยนแปลงนี้ ดังนั้นต่อไปในบทความเรื่อง git bisect ให้เราดูวิธีระบุการกระทำที่ไม่ดี

การระบุการกระทำที่ไม่ดี

ในการเริ่มต้นการตรวจสอบการกระทำที่ไม่ถูกต้องคุณต้องทำตามขั้นตอนด้านล่าง:

  • เริ่มคำสั่ง bisect :git bisect เริ่มต้น
  • พูดถึงรหัสการกระทำที่ไม่ถูกต้อง: git แบ่งส่วนหัวที่ไม่ดีหรือgit ทวิ c5b3ca8
  • พูดถึง id สุดท้ายที่รู้จักกันดี: git แบ่งเป็น v1.0 ดีหรือgit ทวิ 93859d8

สิ่งนี้แบ่งช่วงประวัติการกระทำโดยประมาณกึ่งกลางระหว่างการกระทำที่ดีและไม่ดีที่นำเราไปสู่รหัสการกระทำ: f61a7e8

ดังนั้นคำสั่งได้ตรวจสอบเวอร์ชันของโครงการตามที่อยู่ในรหัสการคอมมิตนี้ ตอนนี้ให้เราทดสอบแอปพลิเคชันของเราอีกครั้ง

คำสั่งเพื่อเรียกใช้แอปพลิเคชัน : $./scripts/myApplication.sh[ทดสอบครั้งที่สอง]


ตั้งแต่การสมัคร ผ่านการ ในการกระทำนี้การกระทำนี้ไม่ใช่การกระทำที่ไม่ดีอย่างแน่นอน ดังนั้นต่อไปคุณต้องแจ้งคำสั่งเดียวกันกับคำสั่งแบ่งครึ่งเป็น - $git แบ่งเป็นสองส่วนดี


ตอนนี้สิ่งนี้จะ จำกัด ผลการค้นหาให้แคบลงเป็นครึ่งแรกของช่วงดังที่แสดง -


ทดสอบแอปพลิเคชันของคุณอีกครั้ง - Command: $./scripts/myApplication.sh[ทดสอบครั้งที่สาม]


ดังนั้นเนื่องจากเราเห็นข้อผิดพลาดข้างต้นนี่เป็นการกระทำที่ไม่ถูกต้อง

แจ้งให้คำสั่ง bisect ทราบเรียกใช้ $git แบ่งเป็นสองส่วนไม่ดี


ซึ่งจะทำให้การค้นหาแคบลงและนำคุณไปสู่การแก้ไขตรงกลางที่ล้อมรอบด้วยสีน้ำเงินล่าสุด: a6ac769

ดังนั้นฉันจึงทดสอบแอปพลิเคชันของฉันเป็นครั้งสุดท้ายโดยใช้คำสั่งเดียวกัน: $./scripts/myApplication.sh[ทดสอบครั้งที่สี่]

ตอนนี้เนื่องจากแอปพลิเคชันล้มเหลวอีกครั้งจึงถือว่าเป็นการกระทำที่ไม่ถูกต้อง ดังนั้นให้รันคำสั่งต่อไปนี้:

เรียกใช้คำสั่ง: git แบ่งเป็นสองส่วนไม่ดี

วิธีสร้างพารามิเตอร์ในฉาก

พบการกระทำที่ไม่ถูกต้อง

นี่เป็นการสรุปการกระทำสุดท้ายที่เหลือซึ่งไม่ดี -


คุณก็รู้ว่านี่คือจุดที่โค้ดพัง อะไรต่อไป?

ทำความเข้าใจว่าไฟล์ใดมีจุดบกพร่อง

ในกรณีนี้ผลลัพธ์จะให้ข้อมูลเล็กน้อยเกี่ยวกับไฟล์ รหัสกระทำ , ชื่อผู้แต่ง , และ วันที่เขียน พร้อมกับ ส่งข้อความ และ เส้นทาง ที่แก้ไข

หากคุณต้องการแก้ไขข้อบกพร่องเพิ่มเติมคุณต้อง อ่าน ที่ กระทำ id วัตถุ .

คำสั่ง: git แสดง a6ac76994b3f6c7519204f910fc787b7928cf8ef

สิ่งนี้จะอ่านวัตถุการกระทำและพิมพ์ข้อความบันทึกและความแตกต่างของข้อความ

คุณอาจใช้คำสั่ง 'git ตำหนิ' เพื่อวิเคราะห์วิธีการและการเปลี่ยนแปลงการกระทำแต่ละบรรทัดโดยผู้เขียนเรียกใช้คำสั่งดังต่อไปนี้รหัสตำหนิ git / develop_nav.sh

หยุดการค้นหา

ในการหยุดการค้นหาให้ใช้คำสั่งต่อไปนี้:

คำสั่ง: git ทวิรีเซ็ต


ดังนั้นกระบวนการแบ่งส่วนจึงหยุดลงและคุณกลับมาที่สาขาที่คุณเริ่มค้นหา ตอนนี้ขั้นตอนต่อไปคือการแก้ไขหรือดีบักโค้ด

จะแก้ไข / ดีบักโค้ดได้อย่างไร?

มีวิธีแก้ปัญหาสองสามวิธีที่คุณสามารถทำได้เพื่อแก้ไขสถานะปัจจุบันของโครงการในตอนนี้ซึ่งคุณได้ระบุการกระทำที่ทำให้เกิดข้อบกพร่องตั้งแต่แรก
อย่างไรก็ตามหากคุณกำลังแก้ไขข้อผูกพันในไฟล์ ที่เก็บที่ใช้ร่วมกัน ที่ดีที่สุดคือ ย้อนกลับ การเปลี่ยนแปลงโดยใช้ปุ่ม ' git เปลี่ยนกลับ ‘คำสั่ง.

งาน: ยกเลิกการเปลี่ยนแปลงที่กระทำโดยการกระทำที่ไม่ถูกต้องที่กล่าวถึง

คำสั่ง: git เปลี่ยนกลับ a6ac769

ด้วยเหตุนี้การคืนค่าการเปลี่ยนแปลงที่กระทำโดยการกระทำนี้จึงทำ 2 สิ่ง:

  • ลบบรรทัดที่เพิ่ม 3 บรรทัดสุดท้าย (ระบุเป็นสีเขียว) และเพิ่มบรรทัดที่ถูกลบ (ระบุด้วยสีแดง) กลับ (ย้อนกลับของ a6ac769)
  • สร้างการคอมมิตพิเศษด้วยข้อมูลข้อความย้อนกลับ

“ คำสั่งย้อนกลับยังทำให้ง่ายต่อการติดตามการเปลี่ยนแปลงที่คุณเปลี่ยนกลับจากคอมมิตเดิม”

ใช้ 'แสดง' คำสั่งอีกครั้งเพื่ออ่านรหัสวัตถุเช่น -

คำสั่ง: git แสดง 801f029

ตอนนี้ไปข้างหน้าและทดสอบแอปพลิเคชัน มันจะดำเนินการอย่างถูกต้อง

คำสั่ง: $./scripts/myApplication.sh

ในทางตรงกันข้ามหากคุณต้องการลบการกระทำที่ไม่ดีออกจากประวัติ:

  • คุณสามารถใช้ปุ่ม ' รีเซ็ตคอมไพล์ 'สั่งการด้วยเครื่องหมาย'- ยาก” (แม้ว่าจะไม่แนะนำในที่เก็บที่ใช้ร่วมกัน)

  • ตรวจสอบเวอร์ชันก่อนหน้าของไฟล์เดียวโดยใช้ 'การชำระเงินคอมไพล์'สั่งการกับ'-‘ตัวเลือก.

ควรสังเกตว่าสิ่งนี้จะทำการเปลี่ยนแปลงในที่เก็บในเครื่องของคุณเท่านั้นจนกว่าคุณจะพุชการเปลี่ยนแปลงไปยังที่เก็บระยะไกล เนื่องจากการเปลี่ยนแปลงบางอย่างสร้างรหัสอ็อบเจ็กต์คอมมิตใหม่ดังในกรณีของเราด้านบนในกรณีเช่นนี้การพุชปกติไปยังที่เก็บระยะไกลจึงถูกปฏิเสธเนื่องจากประวัติจะถูกแยกออก คุณต้องใช้ปุ่ม ' git push 'สั่งการกับ'--บังคับ‘ตัวเลือก.

อัปเดตสาขา 'หลัก'

ในขณะที่ฉันแก้ไขข้อบกพร่องในสาขา 'dev' ของฉันตอนนี้ฉันสามารถรวมการเปลี่ยนแปลงนี้กับสาขา 'master' ได้เช่นกัน -

  • เปลี่ยนเป็น 'master' คำสั่ง:git หลักชำระเงิน
  • ดึงการอัปเดตล่าสุดจาก 'origin / master' เป็น 'master' คำสั่ง:ต้นกำเนิดการดึงคอมไพล์
  • ผสานการเปลี่ยนแปลง 'dev' คำสั่ง:git ผสานยักษ์

อย่างไรก็ตามการผสานของคุณอาจสร้างความขัดแย้งหากมีการคอมมิตจากที่เก็บระยะไกลมากขึ้น แก้ไขข้อขัดแย้งและดำเนินการต่อด้วยการรวม
สุดท้ายพุชเฉพาะสาขา 'หลัก' ที่เสถียรเท่านั้นที่คอมมิชชันไปยังที่เก็บระยะไกลในขณะที่คุณทำงานสกปรก (จุดบกพร่องคุณสมบัติการปรับปรุง) ที่ทำเฉพาะในสาขาคุณลักษณะเช่น 'dev' ในตัวอย่างนี้
ยิ่งไปกว่านั้นที่ดีที่สุดคือนำตรรกะมาใช้ กลยุทธ์การแตกแขนง เพื่อปรับปรุงและรักษาความปลอดภัยของกระบวนการเวิร์กโฟลว์คอมไพล์ของคุณ

สรุปได้ว่า 'git bisect' เป็นคำสั่งที่สะดวกและมีประโยชน์อย่างรวดเร็ว แยกแยะ ที่ รหัสกระทำ ที่ แนะนำ ถึง ความผิด ในรหัสการทำงานของคุณด้วยความช่วยเหลือของไฟล์ ค้นหาไบนารี โดยมีเหตุผล หาร บันทึกการกระทำจะอยู่กึ่งกลางระหว่างไฟล์ ดี และ ไม่ดี กระทำ พิสัย . สรุปได้ว่าคุณได้เรียนรู้ที่จะ ตรวจจับ การกระทำที่ผิดพลาดและ ย้อนกลับ การเปลี่ยนแปลงที่ทำโดยมัน

นอกจากนี้ในคำสั่งย่อย 'good' และ 'bad' คุณยังสามารถใช้คำต่างๆเช่น new and old เพื่ออธิบายสถานะการแก้ไขได้อีกด้วย คุณสามารถรันคำสั่งได้หลายครั้งโดยส่งคำสั่งย่อยที่แตกต่างกันและรหัสการแก้ไข / คอมมิตเพื่อระบุรหัสคอมมิต (she-1) ที่แตกต่างกัน หรืออาจเรียกใช้สคริปต์ทดสอบอัตโนมัติเพื่อสร้างโค้ดที่เสียโดยใช้คำสั่งนี้ ค้นหาคำอธิบายโดยละเอียดของคำสั่งนี้โดยเรียกใช้git bisect - ช่วยด้วยบนเทอร์มินัล ดังนั้นเรามาจบบทความนี้ใน Git Bisect

พารามิเตอร์ในฉากคืออะไร

ความตั้งใจของ DevOps คือการสร้างซอฟต์แวร์ที่มีคุณภาพดีขึ้นอย่างรวดเร็วและมีความน่าเชื่อถือมากขึ้นในขณะที่เชิญชวนให้มีการสื่อสารและการทำงานร่วมกันระหว่างทีมมากขึ้น หากคุณรู้สึกทึ่งกับบทความนี้ค กำจัดไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก หลักสูตรการฝึกอบรม Edureka DevOps Certification ช่วยให้ผู้เรียนเข้าใจว่า DevOps คืออะไรและได้รับความเชี่ยวชาญในกระบวนการและเครื่องมือต่างๆของ DevOps เช่น Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack และ GIT สำหรับการทำหลายขั้นตอนใน SDLC โดยอัตโนมัติ

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบทความ 'Git Bisect' แล้วเราจะติดต่อกลับโดยเร็วที่สุด