我有一些 Node.js 代码,它们从 Git(本地 Git 或通过 Github API)中提取文本文件,并在各种场景中使用 commit/tree/blob 数据。但是在我(或用户)使用文件后,我在行尾和重新计算 sha 哈希方面遇到了问题。
数据由源代码组成。它被下载/使用/链接/导入到用户项目目录并用于开发。我希望使用 git blob 哈希来检查相对于源 blob 的更改。
我的设置:
我在 Windows 上,但使用 Travis-CI 和 VM 来运行构建。
我使用此函数将 sha1-hash 计算为十六进制字符串:
var crypto = require('crypto');
function blobShaHex(data:NodeBuffer, encoding?:string):string {
return crypto.createHash('sha1').update('blob ' + data.length + '\0').update(data, encoding).digest('hex');
}
到目前为止,这似乎工作得很好:直接从 repos 中读取为原始缓冲区的数据与它们的哈希匹配,与 utf8 内容相同。
问题:
在 blob 内容的实际用户使用中,行尾会破坏 blob sha1:
该文件可能会签入 VCS,然后被行端转换破坏。即使用户从不保存文件,用户的 IDE 也可以根据用户偏好规范换行符。许多其他事情可能会发生。
注意:我的代码没有从文件结束的 Git 存储库中提取 blob 。相反,它是一个单独的东西(如依赖管理器),它只是移动 blob 源文件,可能会或可能不会在某处签入。
为了让事情变得更加混乱,我无法完全控制源代码库的行尾,因此无法保证随后会采用哪种样式。甚至可能是混合约定(如果技术上可能的话?)。
问题:
有什么方法可以恢复到原始换行符或以其他方式验证匹配吗?我可以再次提取原始文件并对其进行处理。
欢迎任何有关处理此问题的建议。
--
现在我把这一切都输入了,我开始认为尝试这个可能是一个非常不切实际的想法。也许最好强制规范化并创建和跟踪我自己的校验和或使用一些巧妙的空白忽略差异?