当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《Git-在索引中查找单个文件的SHA1》经验,为你挑选了3个好方法。

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

git add myfile.java

我怎么找到这个文件的SHA1?



1> rsp..:

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

这个问题和下面的答案讨论了一个文件的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 -a1openssl dgst -sha1(输出格式略有不同).



2> CB Bailey..:

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

git ls-files -s myfile.java

请注意,您不希望这样,git hash-object因为它为您提供当前工作树中文件的sha1 id,而不是您添加到索引中的文件.一旦您在工作树副本之后进行更改,这些将会有所不同git add.


如何从git*获取实际文件SHA1*,如`sha1sum README.md`?

3> cnu..:
$ git hash-object myfile.java
802992c4220de19a90767f3000a79a31b98d0df7


这就是为什么这个答案的评级比Charles更差的原因:这实际上为你提供了工作树中文件版本的SHA1,而不是索引/分阶段版本.它还有一个缺点,即它已经存储在索引中,它需要重新计算SHA1.
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有