你可以在git pretty输出中放置git log log正则表达式匹配组吗?

3
假设我有以下查询:
git log -100 -i --grep="^\[.*JIRA.*\]"

这假定了一个类似于git注释的东西。
"[JIRA1234] Adding the graph to the customer balance page"

我希望将输出格式化,只显示与之匹配的组,例如[JIRA1234]

现在我认为我应该能够使用以下方法实现:

git log -100 -i --grep="^\[.*JIRA.*\]" --pretty="%1"

但是那样做行不通。

另一种方法是通过管道传输到grep中。

git log -100 -i --grep="^\[.*JIRA.*\]" --pretty=oneline | grep -o '\[.*JIRA.*'

但是这样你就失去了使用 git log --pretty 命令添加作者名称和其他技巧的能力。

我的问题是:你是否可以在 git pretty 输出中放置 git log 正则匹配组?

1个回答

0

我找不到任何直接的方法来满足这个请求。如果模式"^\[.*JIRA.*\]"只在提交日志消息中出现一次,那么这个命令可以帮助解决:

git log -100 -i --grep="^\[.*JIRA.*\]" --pretty=%H | while read line
do 
  p=$(git log -1 $line --pretty=%B | grep -i -o -e "^\[.*JIRA.*\]")
  git log -1 $line --pretty="$p %h %an %cn foo bar"
done

如果模式出现多次,则需要一些额外的命令,例如head -1或另一个while循环。

愚蠢的问题 - 如果你将它管道传输到grep中,为什么需要两次git日志?为什么不能像问题示例中使用一次管道grep那样呢? - hawkeye
@hawkeye 在 while 循环中,第一个 git log 用于获取与模式匹配的字符串,第二个用于获取格式化日志。 --pretty=oneline 忽略提交日志消息正文,仅显示主题。此外,您的示例可能会匹配多个模式。 - ElpieKay
每当你的 --pretty 格式只是 %H 时,你最好直接使用 git rev-listgit loggit rev-list 接受相同的选项,因为它们在源代码方面几乎只是一个命令)。(我现在更喜欢使用 --no-walk 而不是 -1,尽管这实际上拼写更长 :-) 并且性能基本相同。) - torek
@torek 感谢您的建议。如果可能的话,我更喜欢使用瓷质命令,因为它们对任何 Git 用户更加友好。 - ElpieKay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接