GIT:按作者组筛选日志

时间:2014-04-09 16:35:16

标签: git filter commit author

我们公司分成小组,在将代码发送给QA人员之前,我们会进行代码审查。

通常,我们触摸的任何代码都会由同一个团队中的某个人审核(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

我的要求转换为“列出所有提交触摸模块/ A,模块/ B或模块/ C由不是John,Paul或Ringo 的人完成”

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

1 个答案:

答案 0 :(得分:5)

编辑:这应该显示提交作者姓名不包含“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作为中间名的提交):< / p>

John|Paul|Ringo