任务编号= JIRA问题编号=****(例如:7600)
假设我有一个提交列表,其中包含以下消息:
PRJ-7600 - first message
PRJ-8283 - second message
PRJ-8283 - third message
PRJ-1001 - fourth message
PRJ-8283 - fifth message
PRJ-7600 - sixth message
Run Code Online (Sandbox Code Playgroud)
第一个用于最早的提交.
通缉输出:
1001
7600
8283
Run Code Online (Sandbox Code Playgroud)
我使用以下命令列出了我的提交:
git log --author="First Last" --oneline --grep=PRJ --pretty=format:"%s" | sort
Run Code Online (Sandbox Code Playgroud)
哪里
--grep=PRJ指定忽略自动生成的注释(" 合并分支... ")(替代--no-merges)--pretty=format:"%s" 仅显示消息(删除哈希)实际产量:
PRJ-1001 - fourth message
PRJ-7600 - first message
PRJ-7600 - sixth message
PRJ-8283 - fifth message
PRJ-8283 - second message
PRJ-8283 - third message
Run Code Online (Sandbox Code Playgroud)
是否有可能提取这些数字(可能使用正则表达式或类似子字符串)只显示一次?
细节:
这将在bash或git bash中执行:
git log --author="First Last" --oneline --grep=PRJ --pretty=format:"%s" | sort | cut --delimiter='-' --fields=2 | uniq
Run Code Online (Sandbox Code Playgroud)
因此,在问题中发布的第一部分的基础上,额外的是:
| cut --delimiter='-' --fields=2 | uniq
Run Code Online (Sandbox Code Playgroud)
这会对已排序的输出进行管道处理,cut并通过连字符" - " 来提取第二个字段,然后输出结果uniq以显示不同的值.
此解决方案的分隔符形式存在缺陷cut- 如果日志消息的格式发生更改,则可能会中断.一个更好的解决方案是使用正则表达式搜索(而不是cut)用于问题密钥("/ PRJ-.+\ss /"我认为......)并输出数字部分.
因此,经过一些挖掘后,可以更加可靠地使用grep查找项密钥(在这种情况下为PRJ):
git log ... | grep -oP --regexp="PRJ-\K\d+" | uniq
Run Code Online (Sandbox Code Playgroud)
-o告诉grep仅输出该行的匹配部分
-P是使用正则表达式的PCRE(perl/PHP)风格,从而使我们能够使用
\K导致匹配事先(到那一点)的选项被排除在外