【问题标题】:equivalence of: git log --exclude-author?等价于:git log --exclude-author?
【发布时间】:2022-01-10 02:40:06
【问题描述】:

在工作中,我们有一个 git 存储库,其中大部分提交都是机器人用户自动提交的。有时我更喜欢从该存储库查看 git 日志,但没有看到自动提交。我想它可以被描述为倒置的“git log --author”或“git log --exclude-author=botuser”,如果存在这样的选项的话。

目前我执行以下操作,快捷方式为 bash 别名。

git log --format="%H %aE" | grep -v -F botuser@domain | while read hash email; do git log -1 $hash; echo; done | less

我的问题是,对于我想要完成的任务,是否有不那么骇人听闻的解决方案?

【问题讨论】:

  • 如果您仍然经常访问此站点,我建议您更改此问题的已接受答案。 Hammer 只是告诉你它正在考虑包含在 git 中,quodlibetor 实际上提供了一个解决方案。
  • 为了完整起见,现在可以使用git log --author=bot --invert-grep
  • @larhat 警告:这个 (git log --author=bot --invert-grep) 将不再工作,从with Git 2.35+ (Q1 2022)开始。

标签: git


【解决方案1】:

来自https://coderwall.com/p/tzdzwa

git log --perl-regexp --author='^((?!excluded-author-regex).*)$'

这对我有用。

如果您不想每次都指定--perl-regexp,可以这样做:

git config --global grep.patternType perl

【讨论】:

  • 这需要 git 1.8.0 或更高版本。
  • 工作正常。您可以使用 --perl-regexp 而不是更改 grep 模式类型的全局配置。
  • 不幸的是,我在 mac 上收到了fatal: cannot use Perl-compatible regexes when not compiled with USE_LIBPCRE。我想我需要这样做stackoverflow.com/a/28587310/5771861
  • 如果您得到cannot use Perl-compatible regexes...this 没有帮助,请尝试brew upgrade git。对我有用。
【解决方案2】:

其他一些答案参考了这部分,但我使用我看到的策略在我的回购中取得了成功here

 git log --invert-grep --author=<pattern>

您可以根据需要添加任意数量的作者模式。就我而言,最好的模式是完整的电子邮件,因为它是独一无二的

【讨论】:

【解决方案3】:

目前不支持,尽管there seems to have been some discussion 表示将来支持-v 选项,或者使当前的git log --not--author--committer--grep 工作。

另请参阅:How to invert git log --grep pattern

【讨论】:

    【解决方案4】:

    警告,mateoranswer 将不再适用于 Git 2.35(2022 年第一季度)。

     # WRONG:
     git log --invert-grep --author=<pattern>
    

    quodlibetoranswer 仍然有效:

    git log --perl-regexp --author='^((?!excluded-author-regex).*)$'
    

    但是:不再有 git log --invert-grep --author=&lt;pattern&gt; 来排除作者。

    "git log --invert-grep --author=&lt;name&gt;"(man) 用于排除给定作者编写的提交,但现在“--invert-grep”仅影响“--grep=&lt;pattern&gt;”选项进行的匹配.

    René Scharfe (rscharfe)commit 794c000(2021 年 12 月 17 日)。
    (由 Junio C Hamano -- gitster -- 合并于 commit 2043ce8,2022 年 1 月 5 日)

    log: 让--invert-grep 只反转--grep

    报告人:Dotan Cohen
    签字人:René Scharfe

    记录了选项 --invert-grep 以过滤掉其消息与 --grep 过滤器匹配的提交。
    但是,它也会影响标头匹配(--author--committer),这是无意的。

    将该选项的处理移至grep.c,因为只有那里的代码可以区分标头中的匹配项和消息正文中的匹配项。
    如果给定--invert-grep,则启用扩展表达式(不是正则表达式类型,我们只需要'git grep'(man)s --not 工作),否定主体模式并检查如果它们中的任何一个通过搭载grep_source_1()collect_hits 机制来匹配。

    在结构grep_opt 中收集匹配项有点不确定,但使用"last_shown",我们有将状态信息写入该结构的先例。


    为什么?在initial discussion in June 2017 之后,这是discussed again in Dec. 2021

    在错误发生之前你做了什么?

    $ git log -8 --author=Shachar --grep=Revert --invert-grep
    

    您预计会发生什么?

    我希望看到来自Shachar 的最后 8 次提交,但没有 提交消息中的字符串“Revert”。

    发生了什么?

    提交列表包括Shachar以外的作者的提交。

    您的预期与实际发生的有什么不同?

    当“--invert-grep”时,“--author”过滤器似乎被忽略了 使用选项。
    我也尝试更改选项的顺序,但结果 保持不变。

    【讨论】:

    • 一方面,将反转标志传递给支持--author 的grep 显然是一种黑客行为。但另一方面,--invert-grep 适用于所有其他模式,为什么对于使用辅助标志设置的模式不适用。
    • @mateor 我同意。我发现您的解决方案更直观。
    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 2016-09-29
    • 1970-01-01
    • 2014-10-24
    • 2015-06-22
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多