假设我有一个文件可能已经在 git 存储库中,并且它可能驻留在多个路径名下,甚至在同一个提交中。
如何查找包含 blob 的所有提交以及与该文件对应的哈希值,并列出这些提交以及每个文件所在的路径名?
是否有一种按哈希查找文件的技术也可以搜索索引和工作目录?
好的,扩展一下接受的答案…
至于查找带有路径名的所有提交,那么接受的答案中的脚本唯一不为您做的事情就是打印路径名。但不用担心——它很容易修改。
如果您转到附近的 Git 存储库并运行git ls-tree -r HEAD
您将看到此命令转储由命名提交引用的整个树层次结构(HEAD
在我们的例子中)——同时具有 SHA-1 名称和“正常”文件名。答案中的脚本grep
使用此输出来查找 SHA-1 名称并忽略其余部分。
所以我们可以将其修改为:
#!/bin/sh
obj_name="$1"
shift
git log "$@" --pretty=format:'%T %h %s' \
| while read tree commit subject ; do
git ls-tree -r "$commit" | while read _ _ sha name; do \
if [ "$sha" == "$obj_name" ]; then
echo "$sha\t$name"
break
fi
done
done
…现在它还会打印与目标 blob 关联的文件的名称以及提交名称。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)