【问题标题】:Extraction of diff hash from GITHub commit url从 GITHub 提交 url 中提取 diff 哈希
【发布时间】:2017-05-16 08:22:49
【问题描述】:

如果你打开一个 GITHub 提交,点击“更改文件”链接并点击任何一个更改的文件,浏览器中的提交 url 将附加一个 diff 哈希 id,如下所示:

'#diff-3db08c3ce067ae92af324b2d8bd6b5e2'.

完整网址 - https://github.com/google/guava/commit/19c39725be34efafa59edf6238713e97f6565eb1#diff-3db08c3ce067ae92af324b2d8bd6b5e2

谁能解释一下这个 diff hash id 到底是什么,是否有任何 git 命令可以为更改的文件生成这个 id?

【问题讨论】:

  • 这是一个 SHA-1 哈希,它唯一地(嗯,几乎是唯一地)标识给定的提交。
  • @TimBiegeleisen 你能详细说明 “几乎独一无二” 部分吗?
  • 两次提交在您的存储库中具有相同哈希值的可能性非常。但在此之前,地球的轨道很可能会衰减并螺旋进入太阳。
  • 我不明白这是怎么发生的,因为 git 不允许存储两个具有相同哈希的提交

标签: git github


【解决方案1】:

#diff- 之后的部分不是 SHA-1 哈希,因为它不是 40 个字符而是 32 个字符。事实上,如果你在你的 repo 中运行这个命令:

git rev-parse 3db08c3ce067ae92af324b2d8bd6b5e2

你会得到这个:

致命:不明确的参数“3db08c3ce067ae92af324b2d8bd6b5e2”:未知修订版或路径不在工作树中。

所以,如果我不得不猜测,我会说这是 GitHub 生成的 GUID,用于跟踪提交中包含的文件。

【讨论】:

  • 为什么 github 没有使用更明显的东西,例如文件的哈希值 .. 你会用 git ls-files 得到的文件???真烦人!
【解决方案2】:

目前是带有路径的文件名的 SHA256。

echo -n "path/file" | sha256sum

【讨论】:

    【解决方案3】:

    我碰巧请求了支持,而 github 向我表示这是未记录的。 我们应该改为使用某种 API 来恢复 URI。

    我不喜欢这个答案,但就是这样。

    【讨论】:

      【解决方案4】:

      “diff-”后面的 32 个字符是路径和文件名的 MD5 哈希。这是一个使用 node.js 的示例:

      const crypto = require('crypto');
      var hash = crypto.createHash('md5').update(path+'/'+filename).digest('hex');
      

      【讨论】:

        猜你喜欢
        • 2012-08-26
        • 2021-11-03
        • 2023-03-16
        • 1970-01-01
        • 2012-02-19
        • 1970-01-01
        • 2020-03-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多