为什么 git blame --ignore-rev/--ignore-revs-file 对我不起作用?

Way*_*ner 8 git ignore revision-history

git blame --ignore-revs-file显然是现代 Git 中存在的一个选项。

只有一个问题。它不起作用。

或者至少,它对我不起作用:

您可以将其添加到 shell 脚本中:

mkdir -p /tmp/blarp
cd /tmp/blarp
git init
cat << EOF > file.txt
one
two
three
EOF
git add file.txt
git commit --author "One <one@example.com>" -m 'one commit'
cat << EOF > file.txt
one
awesome
three
EOF
git add file.txt
git commit --author "Two <two@example.com>" -m 'two commits'
cat << EOF > file.txt
one
awesome
sauce
EOF
git add file.txt
git commit --author "One <one@example.com>" -m 'three commits'
git rev-parse HEAD~1 > ignore.txt
git blame --ignore-revs-file=ignore.txt file.txt
Run Code Online (Sandbox Code Playgroud)

对我来说,这表明:

^b6d40d5 (One 2019-12-30 21:47:15 +0000 1) one
1c185c4c (Two 2019-12-30 21:47:15 +0000 2) awesome
d8b9bafd (One 2019-12-30 21:47:15 +0000 3) sauce
Run Code Online (Sandbox Code Playgroud)

但我希望看到

^b6d40d5 (One 2019-12-30 21:47:15 +0000 1) one
^b6d40d5 (One 2019-12-30 21:47:15 +0000 2) two
d8b9bafd (One 2019-12-30 21:47:15 +0000 3) sauce
Run Code Online (Sandbox Code Playgroud)

或者

^b6d40d5 (One 2019-12-30 21:47:15 +0000 1) one
d8b9bafd (One 2019-12-30 21:47:15 +0000 2) awesome
d8b9bafd (One 2019-12-30 21:47:15 +0000 3) sauce
Run Code Online (Sandbox Code Playgroud)

但事实并非如此。我确实发现,如果更改只是空白更改,它们将被忽略……但 git 文档对此并不明确,只是建议:

--ignore-revs-文件

忽略文件中列出的修订,该文件的格式必须与 fsck.skipList 相同。此选项可能会重复,并且这些文件将在使用blame.ignoreRevsFile 配置选项指定的任何文件之后进行处理。空文件名“”将清除以前处理过的文件中的转速列表。

任何线索为什么git blame --ignore-revs-file=revs-to-ignore对我来说似乎不能正常工作?

Von*_*onC 4

检查 Git 2.29(2020 年第 4 季度)是否修复了以下问题:“ git blame --ignore-rev/--ignore-revs-fileman未能验证其输入是否有效修订,并且未能考虑到用户可能想要提供带注释的标签而不是提交,这有已更正。

\n

请参阅Junio C Hamano ( )的提交 610e2b9提交 f58931c(2020 年 9 月 24 日)。\n (由Junio C Hamano 合并 -- --提交 230ff3e中,2020 年 10 月 4 日)gitster
gitster

\n
\n

blame:验证并剥离忽略列表上的对象名称

\n
\n
\n

该命令从命令行或文件读取要放置在忽略列表中的对象名称列表,但不会检查它们的对象类型(从文件中读取的对象甚至不会检查对象是否存在)。

\n

扩展oidset_parse_file()API 并允许它接受一个回调,该回调可用于终止(例如,当读取不适当的输入时)或修改读取的对象名称(例如,当读取指向提交的标记,并且调用者想要一个提交对象时) name),并在处理忽略列表的代码中使用它。

\n
\n
\n

在 Git 2.30(2021 年第一季度)中,“ ( man ) ”学会了忽略输入中不存在的对象名称,而不是抱怨。git blame --ignore-revs-file=<file>

\n

请参阅Ren\xc3\xa9 Scharfe ( )的提交 c714d05(2020 年 11 月 10 日)。\n (由Junio C Hamano 合并 -- --提交 b4e245a中,2020 年 11 月 18 日)rscharfe
gitster

\n
\n

blame:静默忽略无效的忽略文件对象

\n

报告人:Jean-Yves Avenard
\n签署人:Ren\xc3\xa9 Scharfe
\n审阅人:Barret Rhoden

\n
\n
\n

610e2b9240(“ blame:验证并剥离忽略列表上的对象名称”,2020-09-24,Git v2.29.0-rc0 -批量 #19中列出的合并man报告检查文件中是否指定了对象加载和配置选项是实际对象,如果不是,则死亡。目的是向用户报告拼写错误。git blame--ignore-rev--ignore-revs-fileblame.ignoreRevsFile

\n

这也破坏了对多个存储库使用单个忽略文件的能力。
\n文件中的拼写错误可能比命令行中的可能性小,因此警报在这里不太有用。
\n通过跳过非提交而不死来恢复该功能。

\n
\n