我已经在'index'中添加了一个文件:
git add myfile.java
我怎么找到这个文件的SHA1?
这是一个老问题,但有一点需要澄清:
这个问题和下面的答案讨论了一个文件的Git哈希,它与问题中提到的"此文件的SHA1" 不完全相同 .
简而言之:
如果你想在索引中获取文件的Git哈希值 - 请参阅 Charles 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"(后面是space),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,而不是您添加到索引中的文件.一旦您在工作树副本之后进行更改,这些将会有所不同git add
.
$ git hash-object myfile.java 802992c4220de19a90767f3000a79a31b98d0df7