用Python解析git日志文件
我需要解析一些像这样的内容:
commit e397a6e988c05d6fd87ae904303ec0e17f4d79a2
Author: Name <email@email.com>
Date: Sat Jul 9 21:29:10 2011 +0400
commit message
1 files changed, 21 insertions(+), 11 deletions(-)
然后提取出作者的名字,以及插入和删除的数量。
关于名字,我有这个:
re.findall(r"Author: (.+) <",gitLog)
关于数字,我有这个:
re.findall(r" (\d+) insertions\S+, (\d+) deletions",gitLog)
但是我想用一个正则表达式得到一个包含名字、插入和删除的元组列表。
我尝试做了类似这样的事情:
re.findall(r"Author: (.+) <.+ (\d+) insertions\S+, (\d+) deletions",gitLog,re.DOTALL)
但是它什么都没返回……
那么我错在哪里呢?正则表达式应该是什么样子的呢?
更新:wRAR说得对,但当我读取一个文件并尝试解析时,我得到的却是整个文件作为名字,然后是最后的插入和删除,所以它匹配了整个文件,而不是单个提交…… [.+] 匹配的是整个文件,而不是提交的一部分……
4 个回答
1
我用过一个模块,可以用Python来解析Git的日志。这个模块看起来挺不错的:
3
你应该使用现有的工具包,比如GitPython,可以直接使用或者借用里面的代码。至于你问的正则表达式问题,给出的正则表达式对于提供的文本返回了[('Name', '21', '11')]
,所以我想这应该是正确的。
4
如果你能直接访问代码库,而不是只看到一堆文字的git log
,那就省去解析的麻烦,直接生成不同的日志输出:
git log --pretty="%an" --numstat
这样会产生类似下面的输出:
作者姓名
插入的行数 删除的行数 修改的文件
这个输出你甚至不需要用到正则表达式。如果你想用正则表达式的话,记得要匹配插入后面的(+)
,否则就不会匹配到,也抓不到数字。