我已经阅读了
的文档git log --format
但是我没有看到使用命令git log --format提取Change-Id的方法(如下面的例子:Change-Id:Ic8aaa0728a43936cd4c6e1ed590e01ba8f0fbf5b)。
$ git log -1
commit 29a6bb1a059aef021ac39d342499191278518d1d
Author: A. U. Thor <author@example.com>
Date: Thu Aug 20 12:46:50 2009 -0700
Improve foo widget by attaching a bar.
We want a bar, because it improves the foo by providing more
wizbangery to the dowhatimeanery.
Bug: #42
Change-Id: Ic8aaa0728a43936cd4c6e1ed590e01ba8f0fbf5b
Signed-off-by: A. U. Thor <author@example.com>
CC: R. E. Viewer <reviewer@example.com>
有办法做到这一点吗?提前谢谢!
答案 0 :(得分:4)
就git而言,没有更改ID。 (它只是邮件正文中的一行,git可以为您提供邮件正文,或者禁止邮件正文,但它不会为您提供单独的行 消息体。 1 )
要将git log
的输出限制为仅限邮件正文,请使用%b
。要将输出限制为仅限邮件主题,请使用%s
。获得&#34;原始身体&#34; (主题+正文)使用%B
。
在任何情况下,您都需要一些外部程序来从消息体中截取有趣的行。正如其他人已经评论过的那样,grep
非常适合这一点。
1 除非你计算第一行(主题,%s
,部分)并且指的是&#34;原始身体&#34; (%B
部分)当你说&#34; body&#34;。然后%s
将为您提供第一行。像往常一样,这些描述有些模糊和松散,以至于当有人说“消息体”时#34;它经常值得澄清这意味着什么。 &#34;你的意思是原始的主体和身体,还是身体减去主体?&#34;这是使用实际格式指令(%s
,%b
,%B
)真正闪耀的地方,因为这些是明确的。
答案 1 :(得分:0)
您想从http://blog.lost-theory.org/post/how-to-parse-git-log-output/
开始然后将body标志的“%b”添加到脚本中的格式以获取提交消息的正文。
最后,您将正文条目拆分为行,然后找到以Change-Id开头的行并将其解析。
#!/usr/bin/python
GIT_COMMIT_FIELDS = ['id', 'author_name', 'author_email', 'date', 'message', 'body']
GIT_LOG_FORMAT = ['%H', '%an', '%ae', '%ad', '%s', '%b']
GIT_LOG_FORMAT = '%x1f'.join(GIT_LOG_FORMAT) + '%x1e'
p = Popen('git log --format="%s"' % GIT_LOG_FORMAT, shell=True, stdout=PIPE)
(log, _) = p.communicate()
log = log.strip('\n\x1e').split("\x1e")
log = [row.strip().split("\x1f") for row in log]
log = [dict(zip(GIT_COMMIT_FIELDS, row)) for row in log]
for row in log:
for line in row['body'].split("\n"):
if line.startswith('Change-Id:'):
row['changeId'] = line.split(':')[1].strip()