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
  1. 命令ls -a 可得:
    可以看到有一个.git的隐藏目录
      cd  .git
      cd hooks
  1. 可以看到下图

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:你的邮箱地址
   ```















   
  
  



  	 

评论