Seb*_*Seb 2 git author commit filter
我们的公司分为多个团队,在将代码发送给质量检查人员之前,我们会执行代码审查。
通常,我们触摸的任何代码都会由同一团队中的某个人进行审核(A),但在某些情况下,我们还需要触摸另一个团队中的代码(B)。
在这种情况下,代码审查应分为两部分:一部分由A小组审查,另一部分由B小组审查。
我们的问题是,很多情况下,团队A不会发送要由团队B审核的代码,这会导致团队B不了解此新代码。
我想做的是定期运行一个脚本,以查找不属于我们团队的任何人所做的代码某些部分(通常是团队处理的子目录)中的提交,但是不幸的是,其中的--not论点git log似乎并不与--author我合作,所以我不能快乐地奔跑git log --not --author "John" --author "Paul" --author "Ringo" module/A module/B module/C
我的要求翻译成类似“ 列出由非John,Paul或Ringo的人完成的所有涉及模块/ A,模块/ B或模块/ C的提交 ”
有什么办法可以使用“官方”工具来做到这一点?我也对开放源代码脚本感兴趣,如果它意味着这样做会导致单行代码或接近单行代码的话。
尽管这个问题在 7 年前就已经得到了解答,但值得分享另一个解决方案,该解决方案在大约一年后变得可行(2015 年使用git 2.4)。
正如对类似问题的答案和对仍涉及正则表达式的略有不同问题的答案中提到的,可以通过指定来反转正则表达式模式--invert-grep。
因此,为了解决您提到的具体情况,您需要运行:
git log --perl-regexp --invert-grep --author='(John|Paul|Ringo)'
Run Code Online (Sandbox Code Playgroud)
@ArtemB 的解决方案当然仍然有效。我在这个解决方案中看到的唯一好处是增加了可读性(通过放弃?!构造)。
编辑:这应该显示作者名称不包含“约翰”,“保罗”或“林戈”的提交。需要使用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(即提交与约翰作为仍然会显示中间名):
git log --perl-regexp --author='^(?!(John|Paul|Ringo))'
| 归档时间: |
|
| 查看次数: |
868 次 |
| 最近记录: |