我正试图改变这个标准的git log --stat输出:
commit 8a3f15205922e524d59524fe89c4304849dd6c8c
Author: FooManChu <fooMC@email.com>
Date: Fri Jul 15 20:33:17 2016 -0400
Some Commit Message Body
foodir/foofile1.foo | 8 +
foodir/foofile2.foo | 47 +
foodir/foofile3.foo | 7049 +++++++++++++++++++++++
foodir/foofile4.foo | 3563 ++++++++++++
foodir/foofile5.foo | 24 +
foodir/foofile6.foo | 0
foodir/foofile7.foo | 41 +
7 files changed, 10732 insertions(+)
commit c8bd4ca8d683c20f3cf206fdeb8dbec2f185536e
Author: FooGirlChu <fooGC@email.com>
Date: Fri Jul 15 00:11:24 2016 -0400
Initial commit
FOO | 674 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
README.md | 1 +
2 files changed, 675 insertions(+)
进入下面看到的xml文件结构。它不必像下面那样直接映射,但仍然足够接近以便在需要时进行自定义。
<?xml version="1.0" encoding="utf-8"?>
<stats>
<commit sha1='8a3f15205922e524d59524fe89c4304849dd6c8c'>
<author email='fooMC@email.com'>FooManChu</author>
<date>Fri Jul 15 20:33:17 2016 -0400</date>
<body>Some Commit Message Body</body>
<diff-stat>
<filepathname insertions='8'>foodir/foofile1.foo</filepathname>
<filepathname insertions='47'>foodir/foofile2.foo</filepathname>
<filepathname insertions='7049'>foodir/foofile3.foo</filepathname>
<filepathname insertions='3563'>foodir/foofile4.foo</filepathname>
<filepathname insertions='24'>foodir/foofile5.foo</filepathname>
<filepathname insertions='0'>foodir/foofile6.foo</filepathname>
<filepathname insertions='41'>foodir/foofile7.foo</filepathname>
</diff-stat>
<summary changed='7' insertions='10732'/>
</commit>
<commit sha1='c8bd4ca8d683c20f3cf206fdeb8dbec2f185536e'>
<author email='fooGC@email.com'>FooGirlChu</author>
<date>Fri Jul 15 00:11:24 2016 -0400</date>
<body>Initial commit</body>
<diff-stat>
<filepathname insertions='674'>FOO</filepathname>
<filepathname insertions='1'>README.md</filepathname>
</diff-stat>
<summary changed='2' insertions='675'/>
</commit>
</stats>
我查看了Parsing Git Log Output和Understand Git Log Stat Output,但我无法复制--stat格式。
因此,我的问题可以在git中完成吗?或者我应该尝试编写一个解析程序,而不是将--stat作为输入并输出我的xml文件?
答案 0 :(得分:1)
以下是原始答案:Parse git log file names to json
解析XML文件应类似于解析JSON文件。
这是将 git log -stat 导出为json的示例。
我们定义一个函数来加载在一个git commit
中更改的文件function getcommit { \
git show --pretty="format:" --name-only $1 | \
perl -pe's/^\n//g;' | \
sed 's/\(.*\)/"\1"/g' | \
perl -0pe 's/\n(?!\Z)/,\n/g'; \
}
export -f getcommit
然后使用git log -1
显示最新的一个提交信息:
git log -1 --pretty=format:'{%n "commit": "%H",%n "author": "%an ",%n "date": "%ad",%n "message": "%f",%n "files": [ COMMIT_HASH_%H ]%n},' | \ perl -pe 'BEGIN{print "["}; END{print "]\n"}' | \ perl -pe 's/},]/}]/;s/COMMIT_HASH_(\w+)/`echo -n "";getcommit $1`/e'
示例结果
[{ "commit": "1edcef90b42afee11fbd31dcc458ae0f15a3bb6e", "author": "Bertrand Martel ", "date": "Tue Oct 13 17:35:34 2015 +0200", "message": "update-readme", "files": [ "README.md", "device.png", "screenshot.png" ] }]