通过提交消息和排除分支搜索特定的git提交



我目前正在开发一个程序,用于过滤存储在命令行数据库中的慢速数据库查询。

我想搜索除指定分支之外的所有分支中的所有提交,并返回所有匹配的提交。

我的筛选条件存储在数据库中(该数据库是为我提供的(。

示例:

我在数据库中有以下条目:

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:limitobject:typetreesparse:oidcombine。如果使用组合过滤器,则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有用。

相关内容

  • 没有找到相关文章

最新更新