Git鉤子詳解

鉤子

Git鉤子是在Git倉庫中特定事件發生時自動運行的腳本。能夠定製一些鉤子,這些鉤子能夠在特定的狀況下被執行,分爲Client端的鉤子和Server端的鉤子。Client端鉤子被operation觸發,好比commit,merge等,Server端鉤子被網絡動做觸發。python

鉤子位置

$project_name/.git/hooks
-rwxr-xr-x 1 wubaoguo staff 478B 11 6 00:34 applypatch-msg.sample
-rwxr-xr-x 1 wubaoguo staff 896B 11 6 00:34 commit-msg.sample
-rwxr-xr-x 1 wubaoguo staff 189B 11 6 00:34 post-update.sample
-rwxr-xr-x 1 wubaoguo staff 424B 11 6 00:34 pre-applypatch.sample
-rwxr-xr-x 1 wubaoguo staff 1.6K 11 6 00:34 pre-commit.sample
-rwxr-xr-x 1 wubaoguo staff 1.3K 11 6 00:34 pre-push.sample
-rwxr-xr-x 1 wubaoguo staff 4.8K 11 6 00:34 pre-rebase.sample
-rwxr-xr-x 1 wubaoguo staff 1.2K 11 6 00:34 prepare-commit-msg.sample
-rwxr-xr-x 1 wubaoguo staff 3.5K 11 6 00:34 update.samplegit

常見鉤子

pre-commit pre-commit腳本在每次你運行git commit命令時,Git向你詢問提交信息或者產生提交對象時被執行。
prepare-commit-msg prepare-commit-msg鉤子在pre-commit鉤子在文本編輯器中生成提交信息以後被調用。這被用來方便地修改自動生成的squash或merge提交。
commit-msg commit-msg鉤子和prepare-commit-msg鉤子很像,但它會在用戶輸入提交信息以後被調用。
post-commit post-commit鉤子在commit-msg鉤子以後當即被運行 。
post-checkout post-checkout鉤子和post-commit鉤子很像,但它在你用git checkout查看引用的時候被調用。
pre-rebase pre-rebase鉤子在git rebase發生更改以前運行
pre-receive p re-receive鉤子在有人用git push向倉庫推送代碼時被執行。
update update鉤子在pre-receive以後被調用,分別被每一個推送上來的引用分別調用。
post-receive post-receive鉤子在成功推送後被調用,適合用於發送通知。網絡

鉤子使用示例

經過post-commit發送commit通知
#!/usr/bin/env python
import smtplib
from email.mime.text import MIMEText
from subprocess import check_output
# 得到新提交的git log --stat輸出
log = check_output(['git', 'log', '-1', '--stat', 'HEAD'])
# 建立一個純文本的郵件內容
msg = MIMEText("Look, I'm actually doing some work:\n\n%s" % log)
msg['Subject'] = 'Git post-commit hook notification'
msg['From'] = 'mary@example.com'
msg['To'] = 'boss@example.com'
# 發送信息
SMTP_SERVER = 'smtp.example.com'
SMTP_PORT = 587
session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
session.ehlo()
session.starttls()
session.ehlo()
session.login(msg['From'], 'secretPassword')
session.sendmail(msg['From'], msg['To'], msg.as_string())
session.quit()session

相關文章
相關標籤/搜索