根据消息从git log获取任务列表

ROM*_*eer 6 git git-log

任务编号= 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)

哪里

  • committer = author(在这种情况下)
  • --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)

是否有可能提取这些数字(可能使用正则表达式或类似子字符串)只显示一次?

细节:

  • Windows 7的
  • git 1.9.5(msysgit) - >从cmd使用,而不是从Git Bash控制台使用

Raa*_*aad 6

这将在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导致匹配事先(到那一点)的选项被排除在外