【问题标题】:Git - finding the SHA1 of an individual file in the indexGit - 在索引中查找单个文件的 SHA1
【发布时间】:2010-10-02 09:32:03
【问题描述】:

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

git add myfile.java

如何找出这个文件的 SHA1?

【问题讨论】:

  • 仅供参考:the inverse question的种类
  • git rev-parse :myfile.java
  • @jthill,不知道为什么这不是一个单独的答案。

标签: git sha1


【解决方案1】:

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

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

简而言之:

如果你想获得 索引中文件的 Git 哈希 - 请参阅 the answer by CB 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" 其中 "blob" 的 sha1 总和 字面意思是一个字符串“blob”(后跟一个空格),SIZE 是以字节为单位的文件大小(ASCII 十进制),“\0” 是空字符,CONTENT 是实际文件的内容)。

如果您只想获得 “此文件的 SHA1”,正如问题中的字面意思:

sha1sum < $file

如果您没有sha1sum,您可以使用shasum -a1openssl dgst -sha1(输出格式略有不同)。

【讨论】:

  • 另一个问题,是否有根据提交的组合文件和文件夹内容计算的哈希?即两个不同的提交可能具有相同的内容(git diff 为空),仅仅是因为 cmets、时间戳或历史记录不同。给定两台机器上没有相互连接的两个 git repos,我如何确认两个提交实际上具有相同的内容?
  • @AaronMcDaid 是的,有 blob、树和提交。它们都有哈希值。不同机器上的两次提交可能具有相同的树根哈希,但由于不同的提交时间而不同的提交哈希。如果时间相同,则哈希值相同。
【解决方案2】:

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

git ls-files -s myfile.java

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

【讨论】:

  • 如何从git获取真实文件SHA1,如sha1sum README.md?
【解决方案3】:
$ git hash-object myfile.java
802992c4220de19a90767f3000a79a31b98d0df7

【讨论】:

  • 这就是为什么这个答案被评为比 Charles 更差的原因:这实际上为您提供了工作树中文件版本的 SHA1,而不是索引/分阶段版本的 SHA1。它还有一个缺点,即它需要重新计算 SHA1,即使它已经存储在索引中。
  • @JanKrüger 感谢您的澄清!非常有帮助。现在,git hash-object 仍然对某些东西有用,否则需要做类似( perl -e '$size = (-s shift); print "blob $size\x00"' foo.txt &amp;&amp; cat foo.txt ) | openssl sha1 的事情。此外,它自己生成哈希,而 ls-files -s 似乎需要一些 cutting 来隔离该哈希。
  • 如何请求真正的SHA1? git ls-files -s README.md (=git hash-object README.md) 在任何存储库中都不是sha1sum README.md
猜你喜欢
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2018-10-26
  • 2019-07-30
相关资源
最近更新 更多