在 X (Twitter) 上看到這則推,提到了可以讓 git blame 自動忽略掉某些 restyle 或是 reformat 的 commit:
又学到了,当你 format 了整个仓库之后, git blame 就会废掉,全是 format 的 commit。
可以创建一个 .git-blame-ignore-revs 文件,写入要忽略的 commit id。
执行命令:`git config --local blame.ignoreRevsFile .git-blame-ignore-revs` 就好了
GitHub 也会自动读取 .git-blame-ignore-revs 文件— liruifengv (@liruifengv) December 21, 2023
查了一下是在 2019 年八月出的 2.23.0 引入的,從 Documentation/RelNotes/2.23.0.txt 可以看到說明:
* "git blame" learned to "ignore" commits in the history, whose effects (as well as their presence) get ignored.
除了可以在專案內單獨設定外,也可以在 ~/.gitconfig
內設定:
[blame] ignoreRevsFile = .git-blame-ignore-revs
我是拿 rss-bridge 裡的 bridges/ARDMediathekBridge.php 測試,可以看到這個檔案最後的修改是「Reformat codebase v4」這包,也就是被放進 ignore 清單的 commit。
這個 commit 中,對 ARDMediathekBridge.php
這個檔案的 diff 則可以在「這裡」看到。
從 diff log 可以看到幾乎是所有的縮排都被改變了,但 GitHub 上面的 Blame 資訊,以及拉下來後用 git blame
或是 tig blame
可以注意到大多數有意義的地方都有被找出來「還原」,只有很簡單的內容沒有被辨識出來 (像是整行只有 /*
或是 {
之類的地方)。
看起來還是蠻有用的,先丟進 dotfiles 裡面了...