被.mailmap
记录为只能从工作树的根级别读取,但裸存储库中的杂散文件也被意外读取,已在 Git 2.31(2021 年第一季度)中更正。
请参阅Jeff King ( ) 的提交 a38cb98(2021 年 2 月 10 日)。(由Junio C Hamano 合并——在提交 9bdccbc中,2021 年 2 月 17 日)peff
gitster
mailmap
.mailmap
:只在工作树中寻找
签字人:杰夫·金
尝试查找.mailmap
文件时,我们将始终在当前目录中查找它。
这在具有工作树的存储库中是有意义的,因为我们总是在启动时进入顶级目录。
但是对于一个裸存储库,它可能会令人困惑。
使用像--git-dir
(或$GIT_DIR
在环境中)这样的选项,我们根本不需要chdir
,我们会.mailmap
在启动 Git 之前从您碰巧所在的任何目录中读取。
(请注意,--git-dir
在历史上不指定工作树意味着当前目录是工作树的根目录,但现在大多数裸存储库都会core.bare
设置,这意味着他们将意识到根本没有工作树)。
gitmailmap(5) 的文档说:
If the file `.mailmap` exists at the toplevel of the repository[...]
这同样强化了我们正在查看工作树的概念。
当我们在裸存储库中时,此补丁可防止我们查找此类文件。
这确实打破了过去的工作:
cd bare.git
git cat-file blob HEAD:.mailmap >.mailmap
git shortlog
但这从未在文档中做广告。
而现在,我们mailmap.blob
(默认为HEAD:.mailmap
)以更清洁的方式做同样的事情。
但是,还有一个更有趣的案例:我们可能根本没有存储库!( man )命令可以在其标准输入上提供输出的情况下运行,它将应用邮件映射。在这种情况下,从当前目录
读取可能确实有意义。
此补丁将继续这样做。git-shortlog
git-log
.mailmap
这导致了一种更奇怪的情况:如果您运行git-shortlog
以处理标准输入,则输入可能完全来自不同的存储库。
那么我们应该尊重in-tree.mailmap
吗?大概是。无论输入的来源是什么,如果shortlog
在存储库中运行,文档声称我们会从其.mailmap
顶层读取无论出于何种原因单独运行(man) 。git-log
git-shortlog
包含的测试涵盖了这些情况,我们现在明确记录“无回购”情况。
.mailmap
我们还添加了一个测试,即使我们从工作树的子目录开始,也可以确认我们找到了顶级“ ”。
这在此提交之前和之后都有效,但我们从未明确测试过它(它有效,因为chdir
如果有工作树,我们总是在工作树的顶层)。
git shortlog
现在在其手册页中包含:
请注意,如果git shortlog
在存储库之外运行(以处理标准输入上的日志内容),它将.mailmap
在当前目录中查找文件。