git hooks 使用
配置管理示意圖

image.png
git hooks 使用說(shuō)明
-
客戶端 hooks
- pre-commit 鉤子在鍵入提交信息前運(yùn)行。
- prepare-commit-msg 鉤子在啟動(dòng)提交信息編輯器之前,默認(rèn)信息被創(chuàng)建之后運(yùn)行。
- post-commit 鉤子在整個(gè)提交過(guò)程完成后運(yùn)行。
- applypatch-msg 你可以用該腳本來(lái)確保提交信息符合格式,或直接用腳本修正格式錯(cuò)誤。
- pre-applypatch 在 git am 運(yùn)行期間被調(diào)用
- post-applypatch 運(yùn)行于提交產(chǎn)生之后,是在 git am 運(yùn)行期間最后被調(diào)用的鉤子。
- pre-rebase 鉤子運(yùn)行于變基之前,以非零值退出可以中止變基的過(guò)程。
- post-rewrite 鉤子被那些會(huì)替換提交記錄的命令調(diào)用。
- post-checkout 在 git checkout 成功運(yùn)行后調(diào)用。
- post-merge 在 git merge 成功運(yùn)行后調(diào)用。
- pre-push 在 git push 運(yùn)行期間, 更新了遠(yuǎn)程引用但尚未傳送對(duì)象時(shí)被調(diào)用。
- pre-auto-gc 會(huì)在垃圾回收開(kāi)始之前被調(diào)用,可以用它來(lái)提醒你現(xiàn)在要回收垃圾了,或者依情形判斷是否要中斷
-
服務(wù)端 Hooks
- pre-receive 處理來(lái)自客戶端的推送操作時(shí)最先被調(diào)用。
- update 它會(huì)為每一個(gè)準(zhǔn)備更新的分支各運(yùn)行一次。
- post-receive 在整個(gè)過(guò)程完結(jié)以后運(yùn)行,可以用來(lái)更新其他系統(tǒng)服務(wù)或者通知用戶。
測(cè)試驗(yàn)證
| 服務(wù)器 | 功能 | 目錄結(jié)構(gòu) |
|---|---|---|
| 10.90.11.227 | 系統(tǒng)管理員本地倉(cāng)庫(kù) | /software/process_config |
| 172.31.4.123 | 中轉(zhuǎn)倉(cāng)庫(kù)/數(shù)據(jù)存放倉(cāng)庫(kù) | 中轉(zhuǎn)倉(cāng)庫(kù): /software/workspace/project 數(shù)據(jù)存放倉(cāng)庫(kù): /software/workspace/project-local/project |
-
初始化中轉(zhuǎn)倉(cāng)庫(kù)
git init 和 git init --bare 的區(qū)別
初始化出來(lái)的倉(cāng)庫(kù)是不一樣的,前者初始化的是一個(gè)普通的倉(cāng)庫(kù),其中 .git 文件夾是隱藏的,并且能看見(jiàn)該倉(cāng)庫(kù)下所有的源碼。而后者初始化出來(lái)的倉(cāng)庫(kù)中的文件,就是 .git 中的文件夾,但不能像前者那樣直接瀏覽或修改倉(cāng)庫(kù)中的代碼。$ mkdir /software/workspace/project $ cd /software/workspace/project $ git init --bare **結(jié)果:** -rw-r--r-- 1 root root 23 Apr 25 06:10 HEAD drwxr-xr-x 2 root root 6 Apr 25 06:10 branches -rw-r--r-- 1 root root 66 Apr 25 06:10 config -rw-r--r-- 1 root root 73 Apr 25 06:10 description drwxr-xr-x 2 root root 4096 Apr 25 10:27 hooks drwxr-xr-x 2 root root 20 Apr 25 06:10 info drwxr-xr-x 41 root root 4096 Apr 25 10:26 objects drwxr-xr-x 4 root root 29 Apr 25 06:10 refs -
初始化數(shù)據(jù)存儲(chǔ)倉(cāng)庫(kù)--其實(shí)就是做中轉(zhuǎn)倉(cāng)的檢出
$ cd /software/workspace/project-local $ git clone /software/workspace/project drwxr-xr-x 6 root root 72 Apr 26 00:08 project -
配置中轉(zhuǎn)倉(cāng)-- hooks
$ cd /software/workspace/project/hooks $ cat post-receive # 系統(tǒng)管理員每次提交時(shí)指定 remote 倉(cāng)庫(kù) 后自動(dòng)觸發(fā) hooks 執(zhí)行以下代碼 必須有執(zhí)行權(quán)限 #!/bin/sh cd /software/workspace/project-local/project || exit echo ${GIT_DIR} unset GIT_DIR /usr/bin/git pull echo "pull successful 172.31.4.123" -
系統(tǒng)管理員本地倉(cāng)庫(kù)添加remote 源
# 克隆版本庫(kù)的時(shí)候,所使用的遠(yuǎn)程主機(jī)自動(dòng)被Git命名為origin。如果想用其他的主機(jī)名,需要用git clone命令的-o選項(xiàng)指定。 $ git clone -o source http://gitlab.product.co-mall:10080/liuyulong/process_configure.git $ git remote add deploy root@172.31.4.123:/software/workspace/project # root為系統(tǒng)賬戶 $ git remote -v deploy root@172.31.4.123:/software/workspace/project (fetch) deploy root@172.31.4.123:/software/workspace/project (push) source http://gitlab.product.co-mall:10080/liuyulong/process_configure.git (fetch) source http://gitlab.product.co-mall:10080/liuyulong/process_configure.git (push) -
系統(tǒng)管理員本地倉(cāng)庫(kù)提交測(cè)試
$ vim nginx.conf $ git add . $ git commit -m "test hooks" [master 7b05314] test hooks 1 file changed, 1 insertion(+) $ git push deploy # 此處如果想直接全部提交到遠(yuǎn)程倉(cāng)庫(kù)進(jìn)行如下配置 ######## git remote set-url --add --push origin http://gitlab.product.co-mall:10080/liuyulong/process_configure.git git remote add both root@172.31.4.123:/software/workspace/project git remote set-url --add --push both http://gitlab.product.co-mall:10080/liuyulong/process_configure.git git remote set-url --add --push both root@172.31.4.123:/software/workspace/project git push both ######## Counting objects: 4, done. Delta compression using up to 4 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 457 bytes | 0 bytes/s, done. Total 4 (delta 1), reused 0 (delta 0) # 以下都是自定義 hooks 腳本返回的信息 remote: . remote: 來(lái)自 /software/workspace/project remote: 7c07381..7b05314 master -> origin/master remote: 更新 7c07381..7b05314 remote: Fast-forward remote: nginx/nginx.conf | 1 + remote: 1 file changed, 1 insertion(+) remote: pull successful 172.31.4.123 To root@172.31.4.123:/software/workspace/project 7c07381..7b05314 master -> master lonny@LonnyLiuMacPro ~/Documents/process_configure/nginx (git)-[master] % 配置文件管理完畢