文章目录
一、前言
-
缘由
打工时,在项目的热更迭代分支,修改了主工程某个A类的代码并且热更工程也使用了最新的主工程A类代码。
然后热更时,将最新的热更工程作为dll导入玩家手机上,而玩家手机上的主工程代码中并不存在修改的最新A类的代码。简单来说:最新的热更代码与玩家手机上的主工程代码不匹配,所以会热更失败出错。
导致延迟开服时间,挨批。。。
-
此文档目的
以防下次再犯,所以需要一个在非Master分支(热更分支),提交主工程代码时候提醒我,待手动确认后再提交的功能
二、设置一个项目的PreCommit
(一)、步骤
-
进入.git/hooks目录
-
新建pre-commit文件,注意没有后缀
-
编辑pre-commit文件
#!/bin/sh # 获取当前工作目录 repo_path=$(pwd) # 获取当前分支名称 current_branch=$(git branch --show-current) # 如果当前分支不是master分支,执行检测逻辑 if [ "$current_branch" != "master" ]; then # 获取待提交的文件列表 files_to_commit=$(git diff --cached --name-only) # 初始化变量 main_detected=0 # 检查每个待提交文件的目录,查找名为Main的文件夹 for file_path in $files_to_commit; do if [[ $file_path == *"/Main/"* ]]; then echo "$file_path, 包含Main主工程的修改. 请修改它再提交" main_detected=1 fi done # 如果检测到Main文件夹,阻止提交 if [ $main_detected -eq 1 ]; then exit 1 fi fi # CodeBy liujianjie # 如果没有检测到Main文件夹,允许提交 exit 0
-
最重要的一步:让pre-commit文件生效
-
在pre-commit文件的文件夹下,也就是.git/hooks下
-
右键空白处,点击git base here
-
输入:chmod +x pre-commit,并回车
-
(二)、测试效果
-
测试用例
要提交的代码路径中存在Main文件夹
-
进入有.git文件夹的当前文件夹
-
进行正常添加和commit,就可以看到效果了
三、设置多个项目的PreCommit
-
说明
一个项目需要在项目的.git/hooks设置precommit
但是如果存在多个项目的话,需要在每个项目的hooks文件夹都设置precommit,会很麻烦,所以需要设置统一的precommit
-
步骤
-
在某个地方新建文件夹,并且拷贝已经设置了的precommit的hooks文件夹
-
并按照之前的设置pre-commit生效的步骤操作
-
打开cmd.exe,使这个全局文件夹作为所有git项目的hooks即可
git config --global core.hooksPath G:\GitHook\hooks
-
-
测试sourceTree提交效果
四、FAQ
(一)、如果非要提交热更分支的主工程代码,该如何正常提交
-
说明情况
设置好Precommit后,只要提交的路径包含Main都会阻止该次提交
该如何让这次提交成功commit呢? -
打开全局的hook或者当前项目的hook下的pre-commit文件
需要手动将sys.exit(1)修改成sys.exit(0)
即可让这次提交成功commit,记得commit成功后,修改回sys.exit(1)
(二)、如果误报,该如何解决
-
说明情况
如果提交的文件路径存在Main文件夹,但是不是主工程代码的Main路径,而是 Resource/Main或者 MyFloder/Main文件夹下的文件被阻止提交该如何解决
-
打开全局的hook或者当前项目的hook下的pre-commit文件
将‘/Main/'修改成具体项目中的主工程的路径,如:‘Scripts/Main’
五、相关讲解Hooks链接
https://zhuanlan.zhihu.com/p/521707440