根据消息从 git 日志中获取任务编号列表
Get list of tasks numbers from git log based on message
任务号=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
第一个是最旧的提交。
想要输出:
1001
7600
8283
我使用以下命令列出了我的提交:
git log --author="First Last" --oneline --grep=PRJ --pretty=format:"%s" | sort
哪里
- 提交者 = 作者(在本例中)
--grep=PRJ
指定忽略自动生成的注释(Merge branch ...")(替代--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
是否可以提取那些只显示一次的数字(可能使用正则表达式或子字符串之类的东西)?
详情:
- Windows 7
- git 1.9.5 (msysgit) -> 从 cmd 使用,而不是从 Git Bash console
这将在 bash 或 git bash:
中完成
git log --author="First Last" --oneline --grep=PRJ --pretty=format:"%s" | sort | cut --delimiter='-' --fields=2 | uniq
所以在问题中发布的第一部分的基础上,额外的是:
| cut --delimiter='-' --fields=2 | uniq
这会将排序后的输出通过管道传输到 cut
,后者提取由连字符“-”分隔的第二个字段,然后将结果通过管道传输到 uniq
以显示不同的值。
此解决方案在用于 cut
的定界符形式上存在弱点 - 如果日志消息的格式发生变化,则可能会中断。
更好的解决方案是使用正则表达式搜索(而不是 cut
)来查找问题键(“/PRJ-.+\s/”我认为...)并输出数字部分。
编辑
所以经过一番挖掘,可以使用 grep
找到项目键(在本例中为 PRJ )来更可靠地做到这一点:
git log ... | grep -oP --regexp="PRJ-\K\d+" | uniq
-o
告诉 grep 只输出行的匹配部分
-P
使用正则表达式的 PCRE (perl/PHP) 风格,从而使我们能够使用
\K
导致之前(在那一点之前)匹配项被排除的选项
任务号=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
第一个是最旧的提交。
想要输出:
1001
7600
8283
我使用以下命令列出了我的提交:
git log --author="First Last" --oneline --grep=PRJ --pretty=format:"%s" | sort
哪里
- 提交者 = 作者(在本例中)
--grep=PRJ
指定忽略自动生成的注释(Merge branch ...")(替代--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
是否可以提取那些只显示一次的数字(可能使用正则表达式或子字符串之类的东西)?
详情:
- Windows 7
- git 1.9.5 (msysgit) -> 从 cmd 使用,而不是从 Git Bash console
这将在 bash 或 git bash:
中完成git log --author="First Last" --oneline --grep=PRJ --pretty=format:"%s" | sort | cut --delimiter='-' --fields=2 | uniq
所以在问题中发布的第一部分的基础上,额外的是:
| cut --delimiter='-' --fields=2 | uniq
这会将排序后的输出通过管道传输到 cut
,后者提取由连字符“-”分隔的第二个字段,然后将结果通过管道传输到 uniq
以显示不同的值。
此解决方案在用于 cut
的定界符形式上存在弱点 - 如果日志消息的格式发生变化,则可能会中断。
更好的解决方案是使用正则表达式搜索(而不是 cut
)来查找问题键(“/PRJ-.+\s/”我认为...)并输出数字部分。
编辑
所以经过一番挖掘,可以使用 grep
找到项目键(在本例中为 PRJ )来更可靠地做到这一点:
git log ... | grep -oP --regexp="PRJ-\K\d+" | uniq
-o
告诉 grep 只输出行的匹配部分
-P
使用正则表达式的 PCRE (perl/PHP) 风格,从而使我们能够使用
\K
导致之前(在那一点之前)匹配项被排除的选项