python git log

# -*- coding: utf-8 -*-

# created by vince67 Feb.2014

# [email protected]

import re

import os

import subprocess

def run(project_dir, date_from, date_to, search_key, filename):

    bug_dic = {}

    bug_branch_dic = {}

    try:

        os.chdir(project_dir)

    except Exception, e:

        raise e

    branches_list = []

    branches_list = get_branches()

    for branch in branches_list:

        bug_branch_dic = deal_branch(date_from,

                                     date_to,

                                     branch,

                                     search_key)

        for item in bug_branch_dic:

            if item not in bug_dic:

                bug_dic[item] = bug_branch_dic[item]

            else:

                bug_dic[item] += bug_branch_dic[item]

    log_output(filename, bug_dic)

# abstract log of one branch

def deal_branch(date_from, date_to, branch, search_key):

    try:

        os.system(‘git checkout ‘ + branch)

        os.system(‘git pull ‘)

    except Exception, error:

        print error

    cmd_git_log = ["git",

                   "log",

                   "--stat",

                   "--no-merges",

                   "-m",

                   "--after="+date_from,

                   "--before="+date_to]

    proc = subprocess.Popen(cmd_git_log,

                            stdout=subprocess.PIPE,

                            stderr=subprocess.PIPE)

    stdout, stderr = proc.communicate()

    bug_branch_dic = deal_lines(date_from,

                                date_to,

                                search_key,

                                stdout)

    return bug_branch_dic

# write commits log to file

def log_output(filename, bug_dic):

    fi = open(filename, ‘w‘)

    for item in bug_dic:

        m1 = ‘--‘*5 + ‘BUG:‘ + item + ‘--‘*20 + ‘\n‘

        fi.write(m1)

        for commit in bug_dic[item]:

            fi.write(commit)

    fi.close()

# analyze log

def deal_lines(date_from, date_to, search_key, stdout):

    bug_dic = {}

    for line in stdout.split(‘commit ‘):

        if re.search(‘Bug:? \d+ ‘, line) is not None and re.search(search_key, line) is not None:

            match = re.search(‘Bug:? \d+ ‘, line).group()

            try:

                bug_id = match.split(‘Bug: ‘)[1].split(‘\n‘)[0]

            except Exception, e:

                bug_id = match.split(‘Bug ‘)[1].split(‘ ‘)[0]

            if bug_id not in bug_dic:

                bug_dic[bug_id] = [line]

            else:

                bug_dic[bug_id] += [line]

    return bug_dic

# get all branches of a project

def get_branches():

    branch_list = []

    branches = []

    tmp_str = ‘‘

    try:

        cmd_git_remote = ‘git remote show origin‘

        proc = subprocess.Popen(cmd_git_remote.split(),

                                stdout=subprocess.PIPE,

                                stderr=subprocess.PIPE)

        stdout, stderr = proc.communicate()

        tmp_str = stdout.split(‘Local branches configured‘)[0]

        try:

            tmp_str = tmp_str.split(‘Remote branches:\n‘)[1]

        except:

            tmp_str = tmp_str.split(‘Remote branch:\n‘)[1]

        branches = tmp_str.split(‘\n‘)

        for branch in branches[0:-1]:

            if re.search(‘ tracked‘, branch) is not None:

                branch = branch.replace(‘tracked‘, ‘‘).strip(‘ ‘)

                branch_list.append(branch)

    except Exception, error:

        if branch_list == []:

            print "Can not get any branch!"

    return branch_list

if __name__ == ‘__main__‘:

    # path of the .git project. example: "/home/username/projects/jekyll_vincent"

    project_dir = ""

    date_from = "2014-01-25"

    date_to = "2014-02-26"

    # only search ‘Bug: \d+‘ for default

    search_key = ""

    # name of output file. example:"/home/username/jekyll_0125_0226.log"

    filename = ""

    run(project_dir, date_from, date_to, search_key, filename)

时间: 2024-12-18 06:07:22

python git log的相关文章

git log进阶

格式化log输出 oneline --oneline标记将每个commit压缩成一行. 默认情况下显示一个commit ID和commit描述的第一行. 输出如下: 0e25143 Merge branch 'feature' ad8621a Fix a bug in the feature 16b36c6 Add a new feature 23ad9ad Add the initial code base decorate 许多时候知道commit是和哪一个分支或tag关联的是非常有用的.

Git -> git log笔记

显示提交关系图 git log --graph --oneline 显示最近的几条日志 git log -3 --pretty=oneline 显示每次提交的具体改动 git log -p -1 显示每次提交的变更概要 git log --state --oneline 定制输出 git log --pretty=raw -1 git log --pretty=fuller -1 git log --pretty=oneline -1Git -> git log笔记,布布扣,bubuko.com

git log 查看提交记录,参数:

git log 查看提交记录,参数:-n (n是一个正整数),查看最近n次的提交信息 $ git log -2 查看最近2次的提交历史记录 -- fileName fileName为任意文件名,查看指定文件的提交信息.(注:文件名应该放到参数的最后位置,通常在前面加上--并用空格隔开表示是文件.) $ git log file1 file2 查看file1文件file2文件的提交记录$ git log file/ 查看file文件夹下所有文件的提交记录 --branchName branchNa

Git log高级用法

格式化Log输出 首先,这篇文章会展示几种git log格式化输出的例子.大多数例子只是通过标记向git log请求或多或少的信息. 如果你不喜欢默认的git log格式,你可以用git config的别名功能来给你想要的格式创建一个快捷方式. Oneline --oneline标记把每一个提交压缩到了一行中.它默认只显示提交ID和提交信息的第一行.git log --oneline的输出一般是这样的: 0e25143 Merge branch 'feature' ad8621a Fix a b

git log 查看提交记录

1. git log 查看提交历史记录 2. git log --oneline  或者 git log --pretty=oneline 以精简模式显示 3. git log --graph 以图形模式显示 4. git log --stat 显示文件更改列表 5. git log --author= 'name' 显示某个作者的日志 6. git log -p filepath 查看某个文件的详细修改 7. git log -L start,end:filepath 查看某个文件某几行范围内

git log

git log:一.不带参数    1.如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者.提交日期.和提交说明    2.如果记录过多,则按Page Up.Page Down.↓.↑来控制显示    3.按q退出历史记录列表 二.显示参数 -p:按补丁显示每个更新间的差异,比下一条- -stat命令信息更全--stat:显示每次更新的修改文件的统计信息,每个提交都列出了修改过的文件,以及其中添加和移除的行数,并在最后列出所有增减行数小计--shortstat:

Git学习01 --git add, git commit , git log ,git status, git reset --hard, head

特点:Git极其强大的分支管理:分布式版本 集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器.中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆.集中式版本控制系统最大的毛病就是必须联网才能工作. 使用Git 1.创建版本库 首先,选择一个合适的地方,创建一个空目录,通过git init命令把这个目录变成Git可以管理

git log 高级用法

转自:https://github.com/geeeeeeeeek/git-recipes/wiki/5.3-Git-log%E9%AB%98%E7%BA%A7%E7%94%A8%E6%B3%95 内容很详细.实用. 这是一篇在原文(BY atlassian)基础上演绎的译文.除非另行注明,页面上所有内容采用知识共享-署名(CC BY 2.5 AU)协议共享. 每一个版本控制系统的出现都是为了让你记录代码的变化.你可以看到项目的历史记录--谁贡献了什么.bug是什么时候引入的,还可以撤回有问题的

git log用法【转】

转自:http://www.cnblogs.com/gbyukg/archive/2011/12/12/2285419.html PHP技术交流群 170855791 git log 查看提交记录,参数:-n      (n是一个正整数),查看最近n次的提交信息 $ git log -2 查看最近2次的提交历史记录 -- fileName     fileName为任意文件名,查看指定文件的提交信息.(注:文件名应该放到参数的最后位置,通常在前面加上--并用空格隔开表示是文件.) $ git l