Git设置PreCommit 以防热迭代提交主工程代码 - Windows环境

一、前言

  • 缘由

    打工时,在项目的热更迭代分支,修改了主工程某个A类的代码并且热更工程也使用了最新的主工程A类代码。

    然后热更时,将最新的热更工程作为dll导入玩家手机上,而玩家手机上的主工程代码中并不存在修改的最新A类的代码。简单来说:最新的热更代码与玩家手机上的主工程代码不匹配,所以会热更失败出错。

    导致延迟开服时间,挨批。。。

  • 此文档目的

    以防下次再犯,所以需要一个在非Master分支(热更分支),提交主工程代码时候提醒我,待手动确认后再提交的功能

二、设置一个项目的PreCommit

(一)、步骤

  • 进入.git/hooks目录

    请添加图片描述

  • 新建pre-commit文件,注意没有后缀

    image-20231102095710716

  • 编辑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文件生效

    1. 在pre-commit文件的文件夹下,也就是.git/hooks下

      image-20231102100121162

    2. 右键空白处,点击git base here

      image-20231102101339292

    3. 输入:chmod +x pre-commit,并回车

      请添加图片描述

(二)、测试效果

  • 测试用例

    要提交的代码路径中存在Main文件夹

    image-20231102100002343

  • 进入有.git文件夹的当前文件夹

    请添加图片描述

  • 进行正常添加和commit,就可以看到效果了

    请添加图片描述

三、设置多个项目的PreCommit

  • 说明

    一个项目需要在项目的.git/hooks设置precommit

    但是如果存在多个项目的话,需要在每个项目的hooks文件夹都设置precommit,会很麻烦,所以需要设置统一的precommit

  • 步骤

    1. 在某个地方新建文件夹,并且拷贝已经设置了的precommit的hooks文件夹

      image-20231102101945685

    2. 并按照之前的设置pre-commit生效的步骤操作

      image-20231102101423955

    3. 打开cmd.exe,使这个全局文件夹作为所有git项目的hooks即可

      请添加图片描述

      git config --global core.hooksPath G:\GitHook\hooks
      
  • 测试sourceTree提交效果

    image-20231102102345214

    image-20231102102407478

四、FAQ

(一)、如果非要提交热更分支的主工程代码,该如何正常提交

  • 说明情况

    设置好Precommit后,只要提交的路径包含Main都会阻止该次提交
    该如何让这次提交成功commit呢?

  • 打开全局的hook或者当前项目的hook下的pre-commit文件

    image-20231103204806329

    需要手动将sys.exit(1)修改成sys.exit(0)

    image-20231103204831686

    即可让这次提交成功commit,记得commit成功后,修改回sys.exit(1)

(二)、如果误报,该如何解决

  • 说明情况

    如果提交的文件路径存在Main文件夹,但是不是主工程代码的Main路径,而是 Resource/Main或者 MyFloder/Main文件夹下的文件被阻止提交该如何解决

  • 打开全局的hook或者当前项目的hook下的pre-commit文件

    image-20231103204927239

    将‘/Main/'修改成具体项目中的主工程的路径,如:‘Scripts/Main’

    image-20231103204948327

五、相关讲解Hooks链接

https://zhuanlan.zhihu.com/p/521707440

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘建杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值