获取 GIT 尾部值并保存为变量?

Get GIT trailer value and save as variable?

我在寻找 GIT 预告片时遇到了一些问题。我正在尝试找到一种方法来获取最新的提交消息,解析预告片并将预告片中的值保存到 CI 脚本的不同变量中。

I.E.提交消息将是:

Updated level 2 geometry

Level: Assets\LevelTwo.fbx

Platform: Android

而 CI 系统会 运行 类似于:

level = git interpret-trailers --parse(Level(value))
platform = git interpret-trailers --parse(Platform(value))
ReImport $level $platform

我发现解释预告片文档在这方面没有太大帮助,因为所有示例都是关于设置更新或添加预告片的规则,而不是如何从中获取有用信息。

检查漂亮的格式选项 acquired in Git 2.22 (Q2 2019) 是否对您的情况有所帮助。

示例:

git show -s --pretty='%s%n%(trailers:key=Signed-off-by,valueonly)' aaaa881

对于随机提交消息,

1st block
blank
2nd block
blank
last block

第一个块是它的 subject,它可以有一个或多个非空行。空白块也可以有一个或多个空白行。第一个空格下面的内容是消息的body。行格式为 key:value 的最后一个块是预告片。

在你的例子中,

Updated level 2 geometry

Level: Assets\LevelTwo.fbx

Platform: Android

Updated level 2 geometry是主语,剩下的就是正文了。 Platform: Android 属于预告片,而 Level: Assets\LevelTwo.fbx 不属于预告片,因为它不包含在最后一个非空白块中。

命令git interpret-trailers --parse <file>中的文件可以是磁盘上已有的文件,也可以是上一个命令的标准输出。文件内容应该是提交消息或补丁,如 git log -1 --pretty='%B'git format-patch -1 --stdout.

的输出

例如,我们可以通过

检索提交消息的预告片
git log -1 $commit --pretty='%B' | git interpret-trailers --parse

# or
git format-patch -1 $commit --stdout | git interpret-trailers --parse

我们也可以将输出转储到一个文件,然后解析该文件。

git log -1 $commit --pretty='%B' > message.txt
git interpret-trailers --parse message.txt

# or
git format-patch -1 $commit
git interpret-trailers --parse 0001-*.patch

我不知道你的 CI 系统使用什么语言。这些语句似乎与 git 命令有点不同。

如果提交对象及其 sha1 值可用,我们还可以使用占位符 %(trailers) 来检索预告片。

git log -1 $commit --pretty='%(trailers:key=Platform,valueonly)'

它returns键的值Platform,即Android%(trailers) 打印所有键和值。仅 key=Platform returns Platform 的键和值。仅 valueonlyvalueonly=true returns Platform 的值。

注意Level: Assets\LevelTwo.fbx不属于预告片。据我所知,git interpret-trailers 或占位符 %(trailers) 不能直接从提交消息中检索它。也许还有一些我还不知道的选择。