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

也可以看看:

我做了这样的事情来创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响应正文是从调用stdoutgit 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 => JSONparsing器,你将永远需要!

一些Gitlogg的function是:

  • 多个存储库git logparsing为一个JSON文件
  • 介绍repository键/值。
  • 引入的files changedinsertionsdeletions键/值。
  • 引入impact键/值,表示提交( insertionsdeletions )的累积更改。
  • 通过将双引号转换为单引号'对所有允许或由用户input创build的值(如subject消毒。
  • 几乎所有的pretty=format:占位符都可用。
  • 通过注释/取消注释,可以轻松地包含/排除哪些键/值将被parsing为JSON
  • 易于阅读的代码已被彻底评论。
  • 控制台上的脚本执行反馈。
  • error handling(因为需要正确设置存储库的path)。

成功,JSON被解析并保存。 成功,JSON被parsing并保存。

错误001 错误001:存储库的path不存在。

错误002 错误002:存储库path存在,但是为空。