git的自动化 post-commit用法
1.自行了解git基础 不懂得可以看下廖雪峰大神的git教程
2. post-commit用法
1. github上创建一个项目本地clone 下
2. 随便修改点东西 如修改readme.md (就是测试commit能否成功)
git add .
git commit -m"提交代码"
git push origin master
- 命令ls -a 可得:
可以看到有一个.git的隐藏目录
cd .git
cd hooks
- 可以看到下图
5.在hooks/目录下
// 创建文件(命名不能错)
touch post-commit
vim post-commit
复制如下代码:(我这里用的Python 也可以直接写 入你自己的脚本命名)
#! /bin/sh
# 因为你执行git commit的时候和.git在同一目录所以需要添加上路径否者找不到post-commit.py文件 我这里用的是python3(python2.7明年就过期了老铁们赶紧升级吧)
python3 .git/hooks/post-commit.py
这里贴下常见的发邮件的脚本post-commit.py (最好在pycharm编写然后复制)
# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from subprocess import check_output
#使用QQ邮箱做测试,填写QQ的smtp服务器名称
mail_host = "smtp.qq.com"
#替换成自己使用的QQ邮箱
mail_user = "xxxxx@qq.com"
#替换成自己使用的授权码(非自己的QQ密码)授权码详见:http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
mail_pass = "xxxxx"
#使用Python中的subprocess的check_output函数来捕获运行了git命令后的标准输出
#获取执行一条commit 信息并log出来所以参数如下
log = check_output(['git', 'log', '-1', '-p']).decode()
m = log.split('\n',5)[4]
#分割字符串得到最后的一个参数 email
arg = m.split(' ')[-1]
if arg[:6] == 'email:':
receiver = arg[6:]
print(receiver)
sender = mail_user
receivers = [receiver]
message = MIMEText(log)
message['From'] = Header(mail_user, 'utf-8')
message['To'] = Header(str(receivers), 'utf-8')
subject = 'This is a commit log for you!'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP_SSL(mail_host, 465)
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
smtpObj.quit()
print ("Send the diff email to:", receiver)
except smtplib.SMTPException as e:
print (e)
这是需要执行下否者会你commit的时候会提示命令无法执行被忽略
//执行shell脚本(只有post-commit是shell脚本 post-commit.py是python文件 执行shell脚本的命令是运行python脚本)
chmod +x post-commit
当然你也可以测试下脚本是否有错 这里你可以修改下 post-commit.py 的内容为:
# -*- coding: utf-8 -*-
print("aaaa")
运行 ./post-commit 是否会打印 aaaa ,如果打印aaaa表明脚本执行成功,记得改回post-commit.py的代码
返回到你clone的文件加下,我这里是在testGitHook/下
随便修改下readme.md内容
git add .
//上面的代码是以emial:为切割的起始位置的所以需要在后面加上email:你的邮箱地址
git commit -m"提交代码 email:xxxx@qq.com"
这是会提示
//同时也会通过你的QQ邮箱发一封邮件给你填下的邮箱地址
Send the diff email to:你的邮箱地址
```