50

我在“索引”中添加了一个文件:

git add myfile.java

我如何找出这个文件的 SHA1?

4

3 回答 3

113

这是一个老问题,但有一件事需要澄清:

这个问题和下面的答案讨论了一个文件的 Git 哈希,它与问题中所问的“这个文件的 SHA1”不完全相同。

简而言之:

如果您想在索引中获取文件的 Git 哈希- 请参阅 CB Bailey 的答案

git ls-files -s $file

如果您想获取文件系统上任何文件的 Git 哈希- 请参阅 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(输出格式略有不同)。

于 2014-06-18T10:35:26.320 回答
66

您希望-s选择git ls-files. 这为您提供了索引中文件的模式和 sha1 哈希。

git ls-files -s myfile.java

请注意,您不需要git hash-object,因为这会为您提供当前工作树中文件的 sha1 id,而不是您添加到索引中的文件的 sha1 id。一旦您在git add.

于 2009-01-20T08:04:05.617 回答
24
$ git hash-object myfile.java
802992c4220de19a90767f3000a79a31b98d0df7
于 2009-01-20T07:00:34.370 回答