git hash-object 命令以某种方式检测blob的内容是文本文件还是二进制文件。
还有一个git配置上下文问题(https://help.github.com/articles/dealing-with-line-endings/)。如果您将git配置为将某些类型的文件视为二进制内容,那么git将采取不同的行为。不知道上下文,您可能会生成错误的哈希码。对吗?
我认为最安全的方法是在项目的上下文中调用 git 哈希对象some_file 然后你可以100%确定它会给出正确的结果
我是对的还是我错过了什么?
下面是代码,它是一种再现情况的方法。
import org.apache.commons.codec.digest.DigestUtils
import org.apache.commons.lang3.ArrayUtils
class Test3 {
public static void main(String[] args) {
def bytesU = "this \n is a text".bytes
def fileU = File.createTempFile("someFileU", ".tmp")
fileU << bytesU;
println DigestUtils.sha1Hex(ArrayUtils.addAll("blob ${bytesU.length}\0".bytes, bytesU))
println "git hash-object ${fileU.absolutePath}".execute().text
def bytesW = "this \r\n is a text".bytes
def fileW = File.createTempFile("someFileW", ".tmp")
fileW << bytesU;
println DigestUtils.sha1Hex(ArrayUtils.addAll("blob ${bytesW.length}\0".bytes, bytesW))
println "git hash-object ${fileW.absolutePath}".execute().text
println DigestUtils.sha1Hex(ArrayUtils.addAll("blob 0\0".bytes, [] as byte[]))
println DigestUtils.sha1Hex(ArrayUtils.addAll("blob 7\0foobar".bytes, [] as byte[]))
}
}
以下是该程序的输出。第三行是git hash-obeject的结果,因为行结尾而不同。
这是一个较旧的帖子,对我来说是锁定的所以我决定创建单独的问题。请将其合并到How to assign a Git SHA1's to a file without Git?
答案 0 :(得分:1)
我认为最安全的方法是在项目的上下文中调用
git hash-object some_file
,然后您可以100%确定它会给出正确的结果。
没错。除了换行符约定,您还可以提供自定义过滤器以规范化/本地化内容,例如替换并删除特定于repo的设置和诸如此类的东西,并git hash-object
将这些设置删除并运行它们。