用Python解析git日志文件

3 投票
4 回答
3876 浏览
提问于 2025-04-16 21:27

我需要解析一些像这样的内容:

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的日志。这个模块看起来挺不错的:

https://github.com/gaborantal/git-log-parser

3

你应该使用现有的工具包,比如GitPython,可以直接使用或者借用里面的代码。至于你问的正则表达式问题,给出的正则表达式对于提供的文本返回了[('Name', '21', '11')],所以我想这应该是正确的。

4

如果你能直接访问代码库,而不是只看到一堆文字的git log,那就省去解析的麻烦,直接生成不同的日志输出:

git log --pretty="%an" --numstat

这样会产生类似下面的输出:

作者姓名

插入的行数 删除的行数 修改的文件

这个输出你甚至不需要用到正则表达式。如果你想用正则表达式的话,记得要匹配插入后面的(+),否则就不会匹配到,也抓不到数字。

撰写回答