Git:获取所有带有模式的 Blob

标签 git grep

在 Git 中,如何找到对象数据库中包含字符串模式的所有 blob 的 SHA-1 ID? git-grep 仅提供文件路径,不提供 sha1 ID。

最佳答案

编辑:根据使用 Git 2.7.4 版的新测试结果进行更新

看起来我发布的解决方案只通过了 reflog。因此,如果您删除一个 reflog 条目,则不会搜索该条目 - 即使该对象仍然存在。

所以你必须做类似的事情:

{
    git rev-list --objects --all --grep="text"
    git rev-list --objects -g --no-walk --all --grep="text"
    git rev-list --objects --no-walk --grep="text" \
        $(git fsck --unreachable |
          grep '^unreachable commit' |
          cut -d' ' -f3)
} | sort | uniq

源自:Git - how to list ALL objects in the database

旧解决方案:仅当对象在 reflog 中时才有效

在所有本地对象中查找字符串“text”:

git log --reflog -Stext

在所有本地对象中查找模式“pattern”:

git log --reflog --grep=pattern

这将搜索所有对象,因此即使删除了提交/分支也能正常工作。一旦对象从本地存储库中删除(例如通过 gc),它将不再包含在搜索中。

关于Git:获取所有带有模式的 Blob ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7088855/

相关文章:

linux - 如何使用egrep查找以数字开头的字符串

grep - 我怎样才能递归地grep,但只能在具有某些扩展名的文件中?

bash - 扭矩的 job_state 值列表

git - 在 OS X 上将 Dreamweaver 与 Git 集成

c# - LibGit2Sharp 日志远程

Git 推送错误 '[remote rejected] master -> master (branch is currently checked out)'

git - 你什么时候会使用 .git/info/exclude 而不是 ~/.gitignore (core.excludesFile) 来排除文件?

ubuntu - 替换 grep 找到的字符串

regex - 使用 grep 匹配 md5 哈希

与其他用户一起更新 git 子模块