นี่เป็นวิธีแก้ปัญหาที่กำหนดนามแฝง git ดังนั้นคุณจะสามารถใช้มันได้
git rblame -M -n -L '/REGEX/,+1' FILE
ตัวอย่างผลลัพธ์:
00000000 18 (Not Committed Yet 2013-08-19 13:04:52 +0000 728) fooREGEXbar
15227b97 18 (User1 2013-07-11 18:51:26 +0000 728) fooREGEX
1748695d 23 (User2 2013-03-19 21:09:09 +0000 741) REGEXbar
คุณสามารถกำหนดนามแฝงใน. gitconfigของคุณหรือเพียงแค่เรียกใช้คำสั่งต่อไปนี้
git config alias.rblame !sh -c 'while line=$(git blame "$@" $commit 2>/dev/null); do commit=${line:0:8}^; [ 00000000^ == $commit ] && commit=$(git rev-parse HEAD); echo $line; done' dumb_param
นี่คือหนึ่งซับน่าเกลียดดังนั้นนี่คือฟังก์ชั่นทุบตีเทียบเท่า de-obfuscated:
git-rblame () {
local commit line
while line=$(git blame "$@" $commit 2>/dev/null); do
commit="${line:0:8}^"
if [ "00000000^" == "$commit" ]; then
commit=$(git rev-parse HEAD)
fi
echo $line
done
}
โซลูชัน pickaxe ( บันทึก git --pickaxe-regex -S'REGEX ' ) จะให้เฉพาะการเพิ่ม / ลบบรรทัดเท่านั้นไม่ใช่การแก้ไขอื่น ๆ ของบรรทัดที่มีนิพจน์ทั่วไป
ข้อ จำกัด ของการแก้ปัญหานี้คือการตำหนิ gitส่งคืนการจับคู่ที่ 1 ของ REGEX เท่านั้นดังนั้นหากมีการแข่งขันหลายรายการการเรียกซ้ำอาจ "กระโดด" เพื่อไปตามเส้นทางอื่น อย่าลืมตรวจสอบผลลัพธ์ประวัติเต็มรูปแบบเพื่อหา "การกระโดด" เหล่านั้นแล้วแก้ไข REGEX ของคุณเพื่อเพิกเฉยต่อเส้นกาฝาก
สุดท้ายนี่คือเวอร์ชั่นอื่นที่รันgit showในแต่ละคอมมิทเพื่อรับส่วนต่างที่สมบูรณ์:
git config alias.rblameshow !sh -c 'while line=$(git blame "$@" $commit 2>/dev/null); do commit=${line:0:8}^; [ 00000000^ == $commit ] && commit=$(git rev-parse HEAD); git show $commit; done' dumb_param