如何获得 git log -p as json
How to get git log -p as json
我想 运行 git log -p
并得到 JSON 的结果。
我无法从 pretty format documentation 中找到实现它的方法,但我可能遗漏了一些东西。
我想要的结果是这样的:
[{
"commit": SHA,
"author": AUTHOR,
"date": DATE,
"commit_message": COMMIT_MSG,
"full_diff": FULL_DIFF
}]
用git log
实现是不可能的,因为diff没有格式。可以使用管道命令编写脚本:
echo '['
git rev-list HEAD | while read sha1; do
full_diff="$(git show --format='' $sha1 | sed 's/\"/\\"/g')"
git --no-pager show --format="{%n \"commit\": \"%H\",%n \"author\": \"%an\",%n \"date\": \"%ad\",%n \"commit_message\": \"%s\",%n \"full_diff\": \"$full_diff\"%n}," -s $sha1
done
echo ']'
一些注意事项:
git rev-list HEAD | while read sha1; do…done
表示“运行 通过所有提交,将每个散列读入变量 sha1
”。
full_diff="$(…)"
提取提交的完整差异。将 "
替换为 \"
以避免生成损坏的 JSON.
git show --format="…" -s $sha1
以给定格式打印有关提交的信息。单独添加完整差异。
我想 运行 git log -p
并得到 JSON 的结果。
我无法从 pretty format documentation 中找到实现它的方法,但我可能遗漏了一些东西。
我想要的结果是这样的:
[{
"commit": SHA,
"author": AUTHOR,
"date": DATE,
"commit_message": COMMIT_MSG,
"full_diff": FULL_DIFF
}]
用git log
实现是不可能的,因为diff没有格式。可以使用管道命令编写脚本:
echo '['
git rev-list HEAD | while read sha1; do
full_diff="$(git show --format='' $sha1 | sed 's/\"/\\"/g')"
git --no-pager show --format="{%n \"commit\": \"%H\",%n \"author\": \"%an\",%n \"date\": \"%ad\",%n \"commit_message\": \"%s\",%n \"full_diff\": \"$full_diff\"%n}," -s $sha1
done
echo ']'
一些注意事项:
git rev-list HEAD | while read sha1; do…done
表示“运行 通过所有提交,将每个散列读入变量 sha1
”。
full_diff="$(…)"
提取提交的完整差异。将 "
替换为 \"
以避免生成损坏的 JSON.
git show --format="…" -s $sha1
以给定格式打印有关提交的信息。单独添加完整差异。