Git日志输出到XML,JSON或YAML?
这是一个非常简单的问题:作为一个Git新手,我想知道是否有一种方法可以输出我的git日志到一个文件,最好是某种像XML,JSON或YAML的序列化格式。 有什么build议么?
输出到一个文件:
git log > filename.log
指定一个格式,就像你希望一行一样
git log --pretty=oneline >filename.log
或者你想要一个通过像sendmail这样的程序通过电子邮件发送的格式
git log --pretty=email |email-sending-script.sh
生成JSON,YAML或XML它看起来像你需要做这样的事情:
git log --pretty=format:"%h%x09%an%x09%ad%x09%s"
这个要点(不是我的)在JSON中完美地格式化输出: https : //gist.github.com/1306223
也可以看看:
- http://git-scm.com/book/en/Git-Basics-Viewing-the-Commit-History
- Git如何保存预设的git log –format
- 如何parsinggit log的输出
我做了这样的事情来创build一个最小的Web API / JavaScript小部件,将显示任何存储库中的最后5个提交。
如果你是用任何一种脚本语言来做这件事的话,你真的希望用你的引用字符以外的东西来生成你的JSON,这样你就可以在提交信息中转义实际的引号了(你迟早会得到它们,这是不好的,打破的事情。)
所以我最终以惊人的,但不太可能的分隔符^@^
和这个命令行。
var cmd = 'git log -n5 --branches=* --pretty=format:\'{%n^@^hash^@^:^@^%h^@^,%n^@^author^@^:^@^%an^@^,%n^@^date^@^:^@^%ad^@^,%n^@^email^@^:^@^%aE^@^,%n^@^message^@^:^@^%s^@^,%n^@^commitDate^@^:^@^%ai^@^,%n^@^age^@^:^@^%cr^@^},\'';
然后(在node.js中)我的http响应正文是从调用stdout
到git log
构build的:
var out = ("" + stdout).replace(/"/gm, '\\"').replace(/\^@\^/gm, '"'); if (out[out.length - 1] == ',') { out = out.substring (0, out.length - 1); }
结果是不错的JSON,不与报价中断。
这个脚本包装git日志并产生JSON输出: https : //github.com/paulrademacher/gitjson
看看https://github.com/dreamyguy/gitlogg ,最后的git-log => JSON
parsing器,你将永远需要!
一些Gitlogg的function是:
- 将多个存储库的
git log
parsing为一个JSON
文件 。 - 介绍
repository
键/值。 - 引入的
files changed
,insertions
和deletions
键/值。 - 引入
impact
键/值,表示提交(insertions
–deletions
)的累积更改。 - 通过将双引号转换为单引号
'
对所有允许或由用户input创build的值(如subject
消毒。 - 几乎所有的
pretty=format:
占位符都可用。 - 通过注释/取消注释,可以轻松地包含/排除哪些键/值将被parsing为
JSON
。 - 易于阅读的代码已被彻底评论。
- 控制台上的脚本执行反馈。
- error handling(因为需要正确设置存储库的path)。
成功,JSON被parsing并保存。
错误001:存储库的path不存在。
错误002:存储库path存在,但是为空。