git log -G<regex> -p
เป็นเครื่องมือที่ยอดเยี่ยมในการค้นหาประวัติของ codebase สำหรับการเปลี่ยนแปลงที่ตรงกับรูปแบบที่ระบุ อย่างไรก็ตามมันอาจเป็นเรื่องยากที่จะค้นหาก้อนใหญ่ที่เกี่ยวข้องในเอาท์พุท diff / patch ในทะเลของนักล่าที่ไม่เกี่ยวข้องส่วนใหญ่
แน่นอนว่าเป็นไปได้ที่จะค้นหาผลลัพธ์ของgit log
สตริง / regex ดั้งเดิม แต่ก็มีน้อยที่จะลดเสียงรบกวนที่มองเห็นและการเบี่ยงเบนของการเปลี่ยนแปลงที่ไม่เกี่ยวข้องจำนวนมาก
อ่านต่อgit log
ไปฉันเห็นว่ามันมี--pickaxe-all
ซึ่งตรงข้ามกับสิ่งที่ฉันต้องการ: มันขยายเอาต์พุต (ไปยังชุดการเปลี่ยนแปลงทั้งหมด) ในขณะที่ฉันต้องการ จำกัด (เฉพาะก้อนใหญ่)
โดยพื้นฐานแล้วฉันกำลังมองหาวิธี "แยกแยะ" อย่างชาญฉลาด "ในการแยก diff / patch ลงใน hunks แต่ละอันแล้วทำการค้นหากับแต่ละก้อนใหญ่ (กำหนดเป้าหมายเพียงแค่บรรทัดที่เปลี่ยนไป) ทิ้งกลุ่ม hunks ที่ไม่ตรงกัน ที่ทำ
มีเครื่องมือเช่นที่ฉันอธิบายอยู่หรือไม่? มีวิธีการที่ดีกว่าในการได้รับการจับคู่หรือได้รับผลกระทบหรือไม่?
งานวิจัยเริ่มแรกที่ฉันทำ ...
หากเป็นไปได้ที่จะ
grep
ส่งออก diff / patch และทำให้ค่าตัวเลือกบริบทเป็นแบบไดนามิก - พูดผ่าน regexps แทนการนับจำนวนบรรทัด - ซึ่งอาจพอเพียง แต่grep
ไม่ได้สร้างแบบนั้นอย่างแน่นอน (หรือฉันไม่จำเป็นต้องขอคุณสมบัตินั้น)ฉันพบชุดpatchutilsซึ่งฟังดูคล้ายกับความต้องการของฉัน แต่หลังจากอ่าน
man
หน้าเว็บแล้วเครื่องมือจะไม่ปรากฏขึ้นเพื่อจัดการกับการจับคู่ของนักล่าตาม regexps (พวกเขาสามารถรับรายชื่อนักล่าได้แม้ว่า ... )ในที่สุดฉันก็เจอกับsplitpatch.rbซึ่งดูเหมือนว่าจะจัดการกับการแยกวิเคราะห์ของแพทช์ได้ดี แต่มันจะต้องมีการปรับปรุงอย่างมากเพื่อจัดการแพทช์การอ่านผ่าน
stdin
จับคู่ hunks ที่ต้องการแล้วส่งออก hunks