ใช้git gui blame
เป็นเรื่องยากที่จะทำให้การใช้ในสคริปต์และในขณะที่git log -G
และgit log --pickaxe
แต่ละคนสามารถแสดงให้คุณเห็นเมื่อนิยามวิธีการปรากฏตัวขึ้นหรือหายไปฉันไม่ได้พบวิธีที่จะทำให้พวกเขาแสดงรายการการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นกับร่างกายของวิธีการของคุณ
อย่างไรก็ตามคุณสามารถใช้gitattributes
และtextconv
คุณสมบัติเพื่อรวมโซลูชันที่ทำเช่นนั้นได้ แม้ว่าคุณสมบัติเหล่านี้มีไว้เพื่อช่วยให้คุณทำงานกับไฟล์ไบนารีได้ แต่ก็ทำงานได้ดีเช่นกัน
กุญแจสำคัญคือให้ Git ลบออกจากไฟล์ทุกบรรทัดยกเว้นรายการที่คุณสนใจก่อนที่จะดำเนินการต่าง ๆ จากนั้นgit log
, git diff
ฯลฯ จะเห็นเฉพาะพื้นที่ที่คุณกำลังสนใจใน
นี่คือโครงร่างของสิ่งที่ฉันทำในภาษาอื่น คุณสามารถปรับแต่งได้ตามความต้องการของคุณเอง
เขียนเชลล์สคริปต์สั้น ๆ (หรือโปรแกรมอื่น ๆ ) ที่ใช้อาร์กิวเมนต์เดียว - ชื่อของไฟล์ต้นฉบับ - และแสดงผลเฉพาะส่วนที่น่าสนใจของไฟล์นั้น (หรือไม่มีอะไรเลยหากไม่มีสิ่งใดที่น่าสนใจ) ตัวอย่างเช่นคุณอาจใช้สิ่งsed
ต่อไปนี้:
#!/bin/sh
sed -n -e '/^int my_func(/,/^}/ p' "$1"
กำหนดtextconv
ตัวกรองGit สำหรับสคริปต์ใหม่ของคุณ (ดูgitattributes
รายละเอียดเพิ่มเติมในหน้า man) ชื่อของตัวกรองและตำแหน่งของคำสั่งสามารถเป็นอะไรก็ได้ที่คุณต้องการ
$ git config diff.my_filter.textconv /path/to/my_script
บอกให้ Git ใช้ตัวกรองนั้นก่อนคำนวณความแตกต่างของไฟล์ที่เป็นปัญหา
$ echo "my_file diff=my_filter" >> .gitattributes
ตอนนี้ถ้าคุณใช้-G.
(สังเกต.
) เพื่อแสดงรายการคอมมิตทั้งหมดที่สร้างการเปลี่ยนแปลงที่มองเห็นได้เมื่อใช้ตัวกรองของคุณคุณจะมีคอมมิตที่คุณสนใจทุกประการตัวเลือกอื่น ๆ ที่ใช้กิจวัตรต่างของ Git เช่น--patch
จะ ยังได้รับมุมมองที่ จำกัด นี้
$ git log -G. --patch my_file
โวล่า!
การปรับปรุงที่มีประโยชน์อย่างหนึ่งที่คุณอาจต้องการทำคือให้สคริปต์ตัวกรองของคุณใช้ชื่อเมธอดเป็นอาร์กิวเมนต์แรก (และไฟล์เป็นที่สอง) วิธีนี้ช่วยให้คุณสามารถระบุวิธีการใหม่ที่น่าสนใจเพียงแค่โทรgit config
แทนที่จะต้องแก้ไขสคริปต์ของคุณ ตัวอย่างเช่นคุณอาจพูดว่า:
$ git config diff.my_filter.textconv "/path/to/my_command other_func"
แน่นอนว่าสคริปต์ตัวกรองสามารถทำอะไรก็ได้ที่คุณต้องการรับข้อโต้แย้งมากขึ้นหรืออะไรก็ได้: มีความยืดหยุ่นมากกว่าที่ฉันแสดงไว้ที่นี่