我目前正在开发一个程序,用于过滤存储在命令行数据库中的慢速数据库查询。
我想搜索除指定分支之外的所有分支中的所有提交,并返回所有匹配的提交。
我的筛选条件存储在数据库中(该数据库是为我提供的(。
示例:
我在数据库中有以下条目:
ID key Query
1 ABCDEF select * from example
2 0ABCDE select * from another_example
3 1ABCDE select * from you_get_the_picture
我现在对代码中尚未修复的查询感兴趣。因此,我需要使用键作为搜索过滤器来搜索分支。
如果在提交中找到了密钥,请跳过并查找下一个。如果未找到匹配项,请将其打印到stdout。所有的代码都很好用,但我很难找到正确的git命令。
我有以下内容:
git grep 'ABCDEF' $(git rev-list ^origin/master) | xargs git show -s --format=%N%s
它应该返回除原始分支/主分支之外的所有分支中的提交消息中包含"ABCDEF"的所有提交。
但是,git命令不会返回任何不可能的内容,因为我知道这些提交是存在的。
我的git命令不正确吗?提前感谢您的指点。
这不是你想要的:
$ git rev-list ^origin/master
$
您要求git rev-list
排除origin/master
可访问的所有转速,并且不包括任何转速,因此它不会产生任何转速。
这可能就是你的意思:
$ git rev-list --branches ^origin/master
c2eb39026567499ba9fe0c679766c370462ae26f
或者您可能也需要--tags
和/或--remotes
,或者取而代之;或者甚至CCD_ 5,尽管其包括类似CCD_。
当然,正如您在示例代码中所示,这是在git grep
提交参数中进行的;它应该从那里开始工作——除了git grep
产生匹配的行,而不是提交ID。
您现在(2021年5月,七年后(使用Git 2.32(2021年第二季度(有了一个更精确的过滤机制:";CCD_ 9">(man(学习--filter=object:type=<type>
选项,该选项可用于从包对象生成的包文件中排除给定类型的对象。
请参阅Patrick Steinhardt(pks-t
(的提交9cf68b2、提交169a15e、提交7ab6aaf、提交b0c42a5(2021年4月19日(、提交9a2a4f9(2021年3月12日(和提交628d81b、提交b2025da、提交a812789(2021月9日(
(由Junio C Hamano合并——gitster
——于2021年5月7日提交8585d6c(
list-objects
:实现对象类型过滤器签字人:Patrick Steinhardt
虽然在
git-rev-list
中已经可以根据某些标准筛选对象,但还不可能只筛选出特定类型的对象。这会降低某些过滤器的用处。
CCD_ 15过滤器例如过滤斑点,使得仅返回那些小于给定限制的斑点
但是,考虑到git-rev-list
将继续打印标签、提交和树,只要求这些小水滴是不合适的。现在我们已经有了过滤标记和提交的基础设施,我们可以通过实现一个新的过滤器来改善这种情况,该过滤器根据对象的类型来选择对象
因此,上述查询可以通过以下命令简单地实现:$ git rev-list --objects --filter=object:type=blob --filter=blob:limit=200
此外,该过滤器允许针对某些其他情况进行优化:例如,如果只选择了标记或提交,则无需遍历树。
位图中还不支持新的筛选器
这将在随后的提交中实现。
git config
现在在其手册页中包括:
blob:limit
、object:type
、tree
、sparse:oid
或combine
。如果使用组合过滤器,则combine
和所有嵌套的必须允许使用筛选器类型。默认为uploadpackfilter.allow
。
rev-list-options
现在在其手册页中包括:
表单"
--filter=object:type=(tag|commit|tree|blob)
"省略了所有对象它们不是所请求的类型。
和:
rev-list
:允许过滤提供的项目签字人:Patrick Steinhardt
当提供对象过滤器时,当前不可能同时过滤所提供的项目
例如
当执行git rev-list
(man(HEAD时,该引用指向的提交将被视为用户提供的,因此被排除在过滤机制之外
这使得正确使用新的--filter=object:type
过滤器变得更加困难,因为即使用户只想看到Blob,他仍然会看到所提供引用的提交。通过在git-rev-parse(1(命令中引入一个新的
--filter-provided-objects
选项来改进这一点
如果给定,则所有用户提供的引用都将经过筛选。
rev-list-options
现在在其手册页中包括:
--filter-provided-objects
过滤显式提供的对象列表,否则始终打印,即使它们与任何过滤器都不匹配。只有对CCD_ 33有用。