【问题标题】:GIT: filter log by group of authorsGIT:按作者组过滤日志
【发布时间】:2014-05-23 00:27:09
【问题描述】:

我们公司分为多个团队,在将代码发送给 QA 人员之前,我们会进行代码审查。

通常,我们接触的任何代码都由同一团队中的某个人 (A) 进行审查,但在某些情况下,我们还需要接触另一个团队 (B) 的代码。

对于这些情况,代码审查应分为两部分:一部分由 A 团队审核,另一部分由 B 团队审核

我们的问题是很多时候 A 团队没有将代码发送给 B 团队审查,这导致 B 团队不知道这个新代码。

我想做的是定期运行一个脚本来查找代码的某些部分(通常是我们团队处理的模块的子目录)中由任何不属于我们团队的人制作的提交 ,但不幸的是git log 中的--not 参数似乎不适用于--author,所以我不能愉快地运行git log --not --author "John" --author "Paul" --author "Ringo" module/A module/B module/C

我的要求转化为类似“列出所有涉及模块/A、模块/B 或模块/C 的提交,这些提交由非 John、Paul 或 Ringo 的人完成

有没有办法使用“官方”工具来做到这一点?我也会对开源脚本感兴趣,如果这意味着这样做会导致单行或接近。

【问题讨论】:

    标签: git filter commit author


    【解决方案1】:

    编辑:这应该显示作者姓名不包含“John”“Paul”或“Ringo”的提交。需要使用 PCRE 构建 git。

    git log --perl-regexp --author='^(?!(.*(John|Paul|Ringo)))'

    我将把以前的变​​种留在下面,因为它们仍然可能有一些用处:


    如果你的 git 是用 PCRE 支持编译的,你应该能够使用否定的后向断言来做到这一点。这样的事情应该做你想做的事:

    git log --perl-regexp --author='(?<!(john|paul|ringo))@'

    请注意,正则表达式实际上是在寻找@ 不是前面有john|paul|ringo。让它与名称一起使用会比较棘手,因为可能没有一种方便的方法来查找前面没有您要排除的名称的“锚点”。

    您可以尝试锚定作者行的开头并仅显示不以John|Paul|Ringo 开头的提交(即仍会显示以 John 作为中间名的提交):

    git log --perl-regexp --author='^(?!(John|Paul|Ringo))'

    【讨论】:

    • 不知道用 PCRE 构建的 git,很好的答案!我会再等一会儿,看看是否有其他人可以提供另一个不需要自定义 GIT 编译的解决方案。
    • 对于它的价值,在 ubuntu 上预构建的 git 包确实启用了 PCRE。
    • 在 Ubuntu 13.10 上试过,它确实启用了 PCRE。但它不在 12.04 上,那是我真正需要它的地方:(
    • 您可以在这里获得更多最新的 git 版本 (1.9.x) 用于 ubuntu 12.04:launchpad.net/~git-core/+archive/ppa 它确实包含 perl 正则表达式支持。
    【解决方案2】:

    虽然这个问题在 7 年前就已经得到解答,但值得分享另一个解决方案,大约一年后它变得可行(git 2.4,2015 年)。

    正如answer to a similar questionslightly different problem still involving regexes 的答案中所述,可以通过指定--invert-grep 来反转正则表达式模式。

    因此,要解决您提到的具体情况,您需要运行:

    git log --perl-regexp --invert-grep --author='(John|Paul|Ringo)'
    

    @ArtemB 的解决方案当然仍然有效。我在这个解决方案中看到的唯一好处是提高了可读性(通过放弃 ?! 构造)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多