2011-01-05 103 views
34

这是一个非常简单的问题:作为一名Git新手,我想知道是否有一种方法可以将我的git日志输出到文件中,最好是以某种类型的XML,JSON或YAML的序列化格式输出。有什么建议么?Git日志输出到XML,JSON或YAML?

回答

48

输出到文件:

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

参见:

+1

这工作就像一个魅力,谢谢!对于未来的读者,以下是“格式”使用的简码的链接:http://www.kernel.org/pub/software/scm/git/docs/git-log.html – Andrew 2011-01-05 04:47:31

+0

@andrew aww ...链接已破解... – Marty 2012-01-23 01:53:51

+0

嗯。那么,我可以找到所有的参考指向同一个破碎的页面,所以无论谁在没有重定向的情况下取下了git文档,都感到惭愧。嘘。 – Andrew 2012-01-23 21:08:05

10

我做了这样的事情来创建一个最小的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正是如此:

var out = ("" + stdout).replace(/"/gm, '\\"').replace(/\^@\^/gm, '"'); 
if (out[out.length - 1] == ',') { 
    out = out.substring (0, out.length - 1); 
} 

,结果是不错的JSON不破引号。

+0

在提交消息中转义特殊字符的快速解决方法是在格式字符串中使用'%f'而不是'%s':'%f:清理主题行,适用于文件名' – 2013-11-03 16:02:51

+0

FWIW,使用此项目的项目方法[在这里](https:// github。com/timboudreau/gittattle) – 2013-11-08 10:47:36

+0

值得一提的是,您现在可以使用ES6模板字符串来执行此操作,否则无需使用^ @ ^分隔符和节点字符串替换。 – Gary 2017-12-18 15:24:48

0

看哪https://github.com/dreamyguy/gitlogg,最后git-log => JSON解析器你永远都需要!

一些Gitlogg的特点是:

  • 解析git log多个存储库到一个JSON文件
  • 引入repository键/值。
  • 引入files changedinsertionsdeletions键/值。
  • 引入impact键/值,它表示提交的累积更改(insertions - deletions)。
  • 通过将双引号"转换为单引号'对所有允许用户输入或由用户输入创建的值(如subject)进行消毒。
  • 几乎所有的pretty=format:占位符都可用。
  • 通过注释/取消注释可用键,可轻松包含/排除哪些键/值将被解析为JSON
  • 易于阅读的代码已经过全面评论。
  • 控制台上的脚本执行反馈。
  • 错误处理(因为需要正确设置存储库的路径)。

Success, the JSON was parsed and saved. 成功,解析并保存了JSON。

Error 001 错误001:存储库的路径不存在。

Error 002 错误002:存储库路径存在,但是为空。