Git - 在索引中查找单个文件的SHA1

时间:2009-01-20 06:50:03

标签: git sha1

我在'index'中添加了一个文件:

git add myfile.java

如何查找此文件的SHA1?

3 个答案:

答案 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 -a1openssl 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