我在索引中添加了一个文件:
git add somefile.txt
Run Code Online (Sandbox Code Playgroud)
然后我得到了这个文件的SHA1:
git hash-object somefile.txt
Run Code Online (Sandbox Code Playgroud)
我现在有一个SHA1,我想使用SHA1检索索引中对象的文件名.
git show 5a5bf28dcd7944991944cc5076c7525439830122
Run Code Online (Sandbox Code Playgroud)
此命令返回文件内容,但不返回文件名.
如何从SHA1获取完整的文件名和路径?
我想获取指定子模块的当前提交ID.我想当我进入子模块目录并运行git rev-parse HEAD后,我发现这是一个超级项目当前ID.git submodule status | grep <submodule_name>也试过,但它对我来说很慢.知道如何更快地获取这些信息吗?
嘿,
出于好奇,我测试了 GIT 为图像文件“tech01.jpg”生成的 SHA1,但是 GIT 生成的 SHA1 与其他工具生成的 SHA1 不同。
据我了解,无论系统如何,相同文件、二进制内容或相同文本的 SHA1 应该相同。
那么为什么 GIT 生成的 SHA1 与其他工具生成的 SHA1 不同呢?GIT 是否使用不同的加密算法或任何其他修改文件/文本的方式,或者可能只是我对 SHA1 的 GIT 使用的理解中遗漏了一些东西。
这就是我得到的:
我目前正在通过 Bash 使用 git 版本 2.13.0.windows.1(MingWWindows 7 64 位机器,如果有的话。
在同一个文件上使用 '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 - 在 index 中找到单个文件的 SHA1。这个线程解释了为什么 'git hash-object' 和 'git ls-files -s' …