You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Git中内容相同的两个文本文件SHA哈希值不同?

Git中内容相同文件哈希值不同的原因

Git计算文件的SHA-1哈希时,是基于文件的原始字节内容加上固定格式前缀(blob <文件字节数>\0)生成的,只要两个文件的字节流存在任何差异,哈希值就会不同。你遇到的情况,大概率是两个文件存在肉眼不可见的内容差异,常见原因包括:

  • 换行符格式不一致:Windows系统默认用CRLF(\r\n)作为换行符,Unix/Linux用LF(\n)。Android Studio可能因设置差异,给两个文件保存了不同的换行符格式。比如一个文件内容是hello\n,另一个是hello\r\n,肉眼看起来都是“hello”,但实际字节数不同,哈希自然不同。可以在Git Bash中用cat -A note1a.txt和cat -A note1b.txt命令查看,末尾的$代表LF,^M$代表CRLF。

  • 隐藏字符或编码差异:比如一个文件是UTF-8带BOM(开头有3个隐藏字节EF BB BF),另一个是纯UTF-8无BOM;或者其中一个文件末尾多了空格、制表符等不可见字符。这些差异肉眼无法分辨,但会改变文件的字节流。可以用hexdump -C note1a.txt和hexdump -C note1b.txt命令对比两个文件的十六进制内容,就能找到具体差异。

  • 文件元数据的间接影响:虽然Git计算blob哈希时不直接使用文件的修改时间、权限等元数据,但如果这些元数据导致Android Studio保存文件时修改了内容(比如某些插件自动添加注释、调整编码),也会间接造成内容差异。

验证方法

直接用Git命令查看两个文件的哈希对应的blob内容:

git cat-file -p <note1a的哈希值> | hexdump -C
git cat-file -p <note1b的哈希值> | hexdump -C

对比输出的十六进制内容,就能明确找到差异点。

内容的提问来源于stack exchange,提问作者mars8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:21:23