git push前強制檢查衝突

引言

有時候同事間會因爲疏忽而沒有完全處理衝突,而git本身是支持未解決衝突的代碼push的,因此就給包括測試、生產的多個部署環境帶來可能的運行runtime bug隱患。藉助git本身的hook鉤子函數,想要強制push前檢查衝突是否完整還是非常簡單的。

解決方案

1. 定位git hook鉤子文件

git的所有配置文件一般統一存放在.git目錄下,而鉤子文件就放在該文件下:
在這裏插入圖片描述

如上圖顯示是在vscode中將hook目錄完全展開的情況,有些編輯器例如上面的vscode會默認隱藏.git目錄,這時候只要在配置中查詢file.exclude配置項,將其中的.git值從true改成false就可以。

上面所有的.sample結尾的樣本鉤子文件就是git默認爲我們準備好的shell腳本,有需要深入瞭解更多hook函數的可以參考git的官方文檔。這裏因爲要求我們就只定位pre-push.sample文件,因爲這就是處理在push之前的操作。

2. 修改pre-push

筆者是直接從pre-push.sample中複製黏貼後再將後綴名.sample去掉的,用戶直接創建同名空文件也沒有問題,藉着就是貼上效驗衝突的shell腳本內容:

# 獲取當前分支的衝突檢查情況

git --no-pager diff --check 
if [ $? = 0 ]; then
	exit 0
else
	echo 還有衝突未解決
	exit 1
fi

代碼寫的非常簡單,核心是通過git diff --check來檢查,如果返回0,也就是沒有問題,說明沒有衝突,直接push,如果有問題,簡單的提示信息,然後中斷push。
用戶也可以完全按照自己需要修改,保存後就可以測試了。

後記

筆者原本想要做成一個單獨npm包,來進行更廣泛的傳播,奈何npm publish一直不成功。

npm ERR! publish Failed PUT 404
npm ERR! code E404
npm ERR! 404 User not found : git-prepush-check
npm ERR! 404
npm ERR! 404  'git-prepush-check' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章