使用core.autocrlf = true时文件的“ git hash-object”结果不同?

问题描述

我通过提供git文件blob(文件内容哈希)来使用git log --find-objectidentify commits

这很好用,我通过使用git hash-object

获得了文件的Blob

但是,当我为同一文件发出git hash-object时,并且我已经设置 core.autocrlf=true,我得到的是另一个blob(哈希值)。

因此git log --find-object不能标识与该“新” blob对应的提交。

这里发生了什么?这是否意味着git hash-objectcore.autocrlf=true时不起作用?

解决方法

将文件写入数据库时​​,core.autocrlf告诉git对所有输入文件运行过滤器,以将CRLF行尾转换为LF。它必须在计算blob的哈希之前执行此操作,因为根据定义,您更改的每个字节都会影响哈希。

由于git hash-object是用于执行此操作的管道命令,因此它也必须执行这些过滤器。如果要禁止这种情况,并在没有运行过滤器的情况下查找文件的哈希,则可以使用--no-filters选项。 Manual summary

-无过滤器

按原样哈希内容,忽略属性机制会选择的任何输入过滤器,包括行尾转换。如果从标准输入中读取文件,则始终暗含该含义,除非给出了--path选项。