通过TortoiseGit钩子实现提交前检查作者信息是否正确

5 篇文章 0 订阅

1、需求背景

从事嵌入式开发的人运行软件依赖于特定的电脑硬件,可能会存在多人在同一台电脑上开发的需求。

我们使用git进行软件代码版本管理,通过提交时的用户名和邮箱区分某次代码是哪个人提交的信息。git自身支持提交的时临时一次设置成其他的用户信息,但是需要单独命令配置,难免偶尔会忘记。

为了避免疏忽引起提交错误的用户信息,我利用TortoiseGit的钩子功能,在提交代码前触发弹出用户交互界面,引导用户选择或设定正确的账户信息,并根据选择情况修改git仓库配置,随后提交的代码即会按照新的信息记录。

2、实现方法

2.1、环境要求

安装git、TortoiseGit、Python。

2.2、Python获取最近提交者信息列表

工程根目录下直接新建confirm.py文件,编辑内容如下:

import re
import sys
import subprocess
import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showerror


def popen(args):
    p = subprocess.Popen(args, -1, None, -1, -1, -1, encoding='u8')
    return p.stdout.read().strip()


def verify():
    mail = var.get().strip()
    m = re.fullmatch('(.+)<(.+@.+)>', mail)
    if not m:
        return showerror('Error', 'Mail format should like "张三 <zs@example.com>"')
    top.destroy()
    popen('git config --local user.name  "%s"' % m.group(1).strip())
    popen('git config --local user.email "%s"' % m.group(2).strip())


def history(n):
    name = popen('git config user.name')
    mail = popen('git config user.email')
    mails = ['%s <%s>' % (name, mail)]
    for mail in popen('git log -%d --format="%%an <%%ae>"' % n).splitlines():
        if mail not in mails:
            mails.append(mail)
    return mails


mails = history(20)

top = tk.Tk()
top.title('确认作者信息')
top.resizable(0, 0)

var = tk.StringVar(value=mails[0])

txt = ttk.Label(top, text='作者:').pack(side='left')
box = ttk.Combobox(top, width=25, values=mails, textvariable=var).pack(side='left')
btn = ttk.Button(top, width=5, text='确定', command=verify).pack(side='left')

top.update_idletasks()
x = (top.winfo_screenwidth()  - top.winfo_reqwidth())  / 2
y = (top.winfo_screenheight() - top.winfo_reqheight()) / 2
top.geometry('+%d+%d' % (x, y))

top.mainloop()

2.3、启用TortoiseGit钩子

TortoiseGit钩子可以在 TortoiseGit设置 - Hook脚本 中添加 Start Commit Hook 类型的钩子:

也可以在工程根目录下直接新建.tgitconfig文件,编辑内容如下:

[hook "startcommit"]
	cmdline = python confirm.py
	wait = true
	show = false

2.4、运行效果

运行时自动获取当前版本库的作者名和邮箱配置信息,以及最近20次提交的作者信息,去重后显示在列表中。如果用户信息不在列表中,支持手动设置。

点击确定后,当即配置当前版本库作者信息,在随后的提交中会以新的作者信息生效。

如果点击关闭,不会发生任何变更。

需要注意:

第一次运行时会提示是否执行Hook脚本,点击运行并选择对此脚本不再询问即可:

运行效果:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值