【问题标题】:Parse git - log file with python解析 git - 使用 python 的日志文件
【发布时间】:2011-07-13 17:30:37
【问题描述】:

所以我需要像这样解析:

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 是对的,但不知何故,当我读取 i 文件并尝试解析它时,我将整个文件作为名称,然后最后插入和删除,所以它匹配整个文件,但不匹配单个提交... [.+]获取整个文件,但不是提交的一部分...

【问题讨论】:

    标签: python regex git git-log


    【解决方案1】:

    有一个模块用于使用 Python 解析 Git 日志。看起来很生活:

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

    【讨论】:

      【解决方案2】:

      如果您可以访问 repo 而不是 git log 的某些文本转储,请省去解析麻烦并生成不同的日志输出:

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

      将产生以下形式的输出:

      作者姓名

      lines_inserted lines_deleted modified_file

      您甚至不需要正则表达式。如果要保留正则表达式,则需要在插入后匹配(+),否则它将根本不匹配并且无法捕获数字。

      【讨论】:

      • 那么您将不得不为您需要的每种类型的信息每次运行日志命令。
      【解决方案3】:

      您应该使用(直接或借用代码)现有包,例如GitPython,但关于您的正则表达式问题,所提供文本的正则表达式返回[('Name', '21', '11')],所以我认为它是正确的。

      【讨论】:

        【解决方案4】:

        所以我的问题的答案是:

        re.findall(r"Author: (\S+) <.+\n.+\n\n.+\n\n.+ (\d+) insertions\S+, (\d+) deletions",gitLog)
        

        不过还是谢谢你的回答。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-17
          相关资源
          最近更新 更多