我在“索引”中添加了一个文件:
git add myfile.java
我如何找出这个文件的 SHA1?
这是一个老问题,但有一件事需要澄清:
这个问题和下面的答案讨论了一个文件的 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 -a1
或openssl dgst -sha1
(输出格式略有不同)。
您希望-s
选择git ls-files
. 这为您提供了索引中文件的模式和 sha1 哈希。
git ls-files -s myfile.java
请注意,您不需要git hash-object
,因为这会为您提供当前工作树中文件的 sha1 id,而不是您添加到索引中的文件的 sha1 id。一旦您在git add
.
$ git hash-object myfile.java
802992c4220de19a90767f3000a79a31b98d0df7