git hooks 使用
配置管理示意圖
image.png
git hooks 使用說明
-
客戶端 hooks
- pre-commit 鉤子在鍵入提交信息前運行司草。
- prepare-commit-msg 鉤子在啟動提交信息編輯器之前净薛,默認信息被創(chuàng)建之后運行。
- post-commit 鉤子在整個提交過程完成后運行杖玲。
- applypatch-msg 你可以用該腳本來確保提交信息符合格式胧华,或直接用腳本修正格式錯誤温数。
- pre-applypatch 在 git am 運行期間被調(diào)用
- post-applypatch 運行于提交產(chǎn)生之后撞牢,是在 git am 運行期間最后被調(diào)用的鉤子率碾。
- pre-rebase 鉤子運行于變基之前,以非零值退出可以中止變基的過程屋彪。
- post-rewrite 鉤子被那些會替換提交記錄的命令調(diào)用所宰。
- post-checkout 在 git checkout 成功運行后調(diào)用。
- post-merge 在 git merge 成功運行后調(diào)用畜挥。
- pre-push 在 git push 運行期間仔粥, 更新了遠程引用但尚未傳送對象時被調(diào)用。
- pre-auto-gc 會在垃圾回收開始之前被調(diào)用蟹但,可以用它來提醒你現(xiàn)在要回收垃圾了件炉,或者依情形判斷是否要中斷
-
服務端 Hooks
- pre-receive 處理來自客戶端的推送操作時最先被調(diào)用。
- update 它會為每一個準備更新的分支各運行一次矮湘。
- post-receive 在整個過程完結(jié)以后運行,可以用來更新其他系統(tǒng)服務或者通知用戶口糕。
測試驗證
服務器 | 功能 | 目錄結(jié)構(gòu) |
---|---|---|
10.90.11.227 | 系統(tǒng)管理員本地倉庫 | /software/process_config |
172.31.4.123 | 中轉(zhuǎn)倉庫/數(shù)據(jù)存放倉庫 | 中轉(zhuǎn)倉庫: /software/workspace/project 數(shù)據(jù)存放倉庫: /software/workspace/project-local/project |
-
初始化中轉(zhuǎn)倉庫
git init 和 git init --bare 的區(qū)別
初始化出來的倉庫是不一樣的缅阳,前者初始化的是一個普通的倉庫,其中 .git 文件夾是隱藏的景描,并且能看見該倉庫下所有的源碼十办。而后者初始化出來的倉庫中的文件,就是 .git 中的文件夾超棺,但不能像前者那樣直接瀏覽或修改倉庫中的代碼向族。$ 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ù)存儲倉庫--其實就是做中轉(zhuǎn)倉的檢出
$ cd /software/workspace/project-local $ git clone /software/workspace/project drwxr-xr-x 6 root root 72 Apr 26 00:08 project
-
配置中轉(zhuǎn)倉-- hooks
$ cd /software/workspace/project/hooks $ cat post-receive # 系統(tǒng)管理員每次提交時指定 remote 倉庫 后自動觸發(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)管理員本地倉庫添加remote 源
# 克隆版本庫的時候,所使用的遠程主機自動被Git命名為origin棠绘。如果想用其他的主機名件相,需要用git clone命令的-o選項指定再扭。 $ 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)管理員本地倉庫提交測試
$ vim nginx.conf $ git add . $ git commit -m "test hooks" [master 7b05314] test hooks 1 file changed, 1 insertion(+) $ git push deploy # 此處如果想直接全部提交到遠程倉庫進行如下配置 ######## 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: 來自 /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] %
配置文件管理完畢