【问题标题】:Why does 'git ls-files -s' and 'git log' output a different SHA hash?为什么 'git ls-files -s' 和 'git log' 输出不同的 SHA 哈希?
【发布时间】:2021-08-20 23:35:12
【问题描述】:

在同一个文件上使用 'git ls-files -s' 和 'git log' 时,我得到不同的 SHA 哈希值。以 repo https://github.com/preservim/nerdtree 中的文件 lib/nerdtree/nerdtree.vim 为例,标签 6.10.5。

命令git log lib/nerdtree/nerdtree.vim 产生,

commit 593c16add35a5461f189b8189abe219f7bbbd604 (tag: 6.10.5)

但是命令git ls-files -s lib/nerdtree/nerdtree.vim 产生,

100644 61a11a96ba44c7b1bf0472b598f2c967b2dce9f2 0 lib/nerdtree/nerdtree.vim

如果我尝试检查 'git log' 返回的 SHA,则该命令成功。如果我尝试检查 'git ls-files -s' 返回的 SHA,则会产生致命错误:

git checkout 61a11a96ba44c7b1bf0472b598f2c967b2dce9f2 lib/nerdtree/nerdtree.vim

fatal: reference is not a tree: 61a11a96ba44c7b1bf0472b598f2c967b2dce9f2

为什么 'git ls-files -s' 和 'git log' 会为同一个文件生成不同的 SHA 哈希?

注意:我四处寻找答案并找到了这个帖子:Git - finding the SHA1 of an individual file in the index。该线程解释了为什么'git hash-object'和'git ls-files -s'的输出之间可能存在差异,但它没有解释'git ls-files -s'和'git的输出之间的差异记录”。

【问题讨论】:

标签: git hash sha


【解决方案1】:

原因是:

  1. git log 返回的哈希是标识提交的哈希。
  2. git ls-files -s 返回的哈希是文件 blob 的标识符。

【讨论】:

    【解决方案2】:

    git log 的路径列出了更改在该路径记录的内容的提交

    git ls-files 的路径列出了您当前结帐时在该路径中记录的内容

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 2019-06-13
      • 2017-07-26
      • 2019-08-27
      • 2020-04-06
      • 2011-02-23
      • 2020-05-22
      • 2023-03-27
      • 2020-08-06
      相关资源
      最近更新 更多