问题描述
我通过提供git文件blob(文件内容哈希)来使用git log --find-object
至identify commits。
这很好用,我通过使用git hash-object
但是,当我为同一文件发出git hash-object
时,并且我已经设置 core.autocrlf=true
,我得到的是另一个blob(哈希值)。
因此git log --find-object
不能标识与该“新” blob对应的提交。
这里发生了什么?这是否意味着git hash-object
在core.autocrlf=true
时不起作用?
解决方法
将文件写入数据库时,core.autocrlf
告诉git
对所有输入文件运行过滤器,以将CRLF行尾转换为LF。它必须在计算blob的哈希之前执行此操作,因为根据定义,您更改的每个字节都会影响哈希。
由于git hash-object
是用于执行此操作的管道命令,因此它也必须执行这些过滤器。如果要禁止这种情况,并在没有运行过滤器的情况下查找文件的哈希,则可以使用--no-filters
选项。 Manual summary:
-无过滤器
按原样哈希内容,忽略属性机制会选择的任何输入过滤器,包括行尾转换。如果从标准输入中读取文件,则始终暗含该含义,除非给出了--path选项。