在Git中,如何找到包含字符串模式的对象数据库中所有斑点的SHA-1 ID? git-grep
只提供文件路径而不提供sha1 ID。Git:获取所有模式的斑点
回答
,因为它已经接受了我不能删除这个答案,但skaar's answer回答OP的问题更好。 (它仍然需要做一个不寻常的事情,但我可以看到有为什么你可能需要的原因。)
可以使用镐头选项尝试git的日志:
git log -Sstring --all
请参阅“How to find commit SHA1 of a tree containing a file containing a given string”
这只能通过参考文献进行搜索。并非像OP这样的所有对象都想要。一旦提交/分支被删除,您的搜索将不起作用。我发布了一个使用您的解决方案的修改版本的答案。 – vman
编辑:基于使用Git版本2.7.4
看起来像新的测试结果更新我发布的解决方案只通过reflog。因此,如果您删除了一条reflog条目,即使对象仍然存在,该条目也不会被搜索。
所以,你将不得不做这样的事情:Git - how to list ALL objects in the database
旧的解决方案:只有当对象是在引用日志
要查找的字符串作品“文本
{
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
从派生“in all local objects:
git log --reflog -Stext
要查找所有本地对象的模式“模式”:
git log --reflog --grep=pattern
这将通过所有的搜索对象,所以它会工作,即使提交/分支被删除。一旦从本地存储库中删除了一个对象(例如通过gc),它将不再包含在搜索中。
我通常不需要搜索已删除的元素(不要忘记reflog是本地的repo:如果再次克隆,reflog将为空)。但是对于同一回购商的本地搜索,这确实会起作用。 +1 – VonC
对,我同意搜索所有对象并不常见。然而,这是OP想要的。这可能很有用,我能想到的一个例子是,如果你错误地提交了一个密码,并想从本地存储库中删除它。另一种情况是,如果你从reflog中删除了一些内容并想恢复它(假设gc没有删除blob)。 – vman
我已经尝试过,但它没有工作(grep只是不工作这种情况下,文件说git-rev-list --grep是提交消息,但不blob内容,也许这是原因?)。但是我发现了另一个解决方案:'git grep'text'$(git fsck --unreachable | grep'^ unreachable blob'| cut -d''-f3)''搜索了所有不可用的文本块 –
我做了以下弄清楚,如果一些代码,我会写永远失去了,或者也许是隐藏在一些“不可达”承诺:
# Assuming you're at the root of the git repository
> cd .git/objects
# Search all objects for a given string (assuming you're in .git/objects)
> find ?? -type f | sed s!/!! | git cat-file --batch | grep --binary-files=text <SEARCH_STRING>
这将产生输出,如果任何 git的对象包含<SEARCH_STRING>
。但是,它不会告诉你哪个对象包含它。但是通过这样做,我发现了我缺少的代码,最终我找回了它。
- 1. 获取文档中所有图像的列表(包括斑点)
- 2. Git的 - 让所有提交和斑点他们创造
- 3. Git的指针和斑点
- 4. 获得没有斑点本身的斑点大小
- 5. PDO有哪些所有获取模式?
- 6. 获取所有表的MySQL模式
- 7. 模式来获取所有标签
- 8. 在Oracle中获取多个斑点
- 9. 访问Sharepoint数据库以读取所有斑点数据
- 10. 获取所有节点
- 11. Django模型 “斑点” 字段
- 12. MongoMapper:获取所有模型
- 13. 没有斑点的Git克隆裸回购
- 14. 提取斑点特征
- 15. jstree获取根的所有子节点
- 16. 获取树节点的所有uid
- 17. Firebase获取节点的所有数据
- 18. 获取所有的HTML节点文本
- 19. 获取UIBezierPath的所有顶点
- 20. 点击获取一行的所有值
- 21. 获取Radius中的所有Vector2点
- 22. 获取矩形的所有顶点
- 23. 获取内核模块中的所有挂载点
- 24. 获取android.content.ActivityNotFoundException与斑马线
- 25. MediaRecorder没有定义斑点
- 26. 获取XML文档中引用的所有模式的列表
- 27. 获取所有表的计数的模式
- 28. 从git存储库中提取所有未获取的更改
- 29. Git获取旧子模块
- 30. 如何显示数据库的所有斑点(图片)
我想使用Git除文件管理以外的其他东西。不同的“文件”具有不同的“类型”(在文件中编码的字符串类型),我想查找特定类型的对象数据库中的所有对象。 –
我想没有直接的办法。我会将此标记为答案,因为这表明了这一点。我查看了git-grep源代码,我认为可以直接修改它以输出SHA-1 ID。 –
您的解决方案仅适用于当前签出的分支,OP希望搜索所有对象。 – vman