我在'index'中添加了一个文件:
git add myfile.java
如何查找此文件的SHA1?
答案 0 :(得分:75)
这是一个老问题,但有一点需要澄清:
这个问题和下面的答案谈论 与 不完全相同的文件的Git哈希“此文件的SHA1”问题中的问题。
简而言之:
如果你想获得索引中文件的 Git哈希 - 请参阅 the answer by Charles Bailey:
git ls-files -s $file
如果您想获得文件系统上任何文件的 Git哈希值< - >,请参阅 the answer by cnu:
git hash-object $file
如果你想获得文件系统上任何文件的 Git哈希并且你没有安装Git :
(echo -ne "blob `wc -c < $file`\0"; cat $file) | sha1sum
(上面显示了如何实际计算Git哈希值 - 它不是文件的sha1总和,而是字符串“blob SIZE \ 0CONTENT”的sha1和,其中“blob” 字面意思是一个字符串“blob”(后跟一个空格), SIZE 是文件大小(以字节为单位)(ASCII十进制),“\ 0”是空字符, CONTENT 是实际文件的内容。
如果你想在问题中逐字地提出“此文件的SHA1”:
sha1sum < $file
如果您没有sha1sum
,则可以使用shasum -a1
或openssl dgst -sha1
(输出格式稍有不同)。
答案 1 :(得分:55)
您需要-s
选项git ls-files
。这为您提供了索引中文件的模式和sha1哈希。
git ls-files -s myfile.java
请注意,您不需要git hash-object
,因为这会为您提供当前工作树中文件的sha1 id,而不是您添加到索引中的文件的sha1 id。在git add
之后对工作树副本进行更改后,这些内容会有所不同。
答案 2 :(得分:18)
$ git hash-object myfile.java
802992c4220de19a90767f3000a79a31b98d0df7