为什么 'git ls-files -s' 和 'git log' 输出不同的 SHA 散列?
Why does 'git ls-files -s' and 'git log' output a different SHA hash?
在同一文件上使用 '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 log'.[=20 的输出之间的差异=]
git log
与路径列表 提交更改记录在该路径。
git ls-files
的路径列出了 您当前结帐时在该路径.
中记录的内容
原因是:
git log
返回的散列是标识提交的散列。
git ls-files -s
返回的散列是 文件 blob 的标识符。
在同一文件上使用 '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 log'.[=20 的输出之间的差异=]
git log
与路径列表 提交更改记录在该路径。
git ls-files
的路径列出了 您当前结帐时在该路径.
原因是:
git log
返回的散列是标识提交的散列。git ls-files -s
返回的散列是 文件 blob 的标识符。