首页 > 编程问答 >在 GitLab 中创建新分支时挂钩失败

在 GitLab 中创建新分支时挂钩失败

时间:2024-05-31 22:41:01浏览次数:26  
标签:bash git gitlab hook

我们安装了一个自我管理的 gitlab,其中有一个非常简单的 git 预接收钩子,用于检查提交消息格式:

#!
#!/bin/bash
while read oldrev newrev refname; do
    if [ "$oldrev" -eq 0 ]; then
        #git rev-list $(git for-each-ref --format='%(refname)' refs/heads/* | sed 's/^/\^/') "$newrev";
        commits=$(git rev-list $newrev --not --branches=*)
    否则
        commits=$(git rev-list $oldrev..$newrev)
    fi
    ticket=false
    for commit in $commits; do
        message=$(git log --format=%B -n 1 $commit)
        if [[ $message =~ ^[Tt]icket\ [0-9]+ ]]; then
            ticket=true
            break
        fi
    完成
    if !$ticket; then
        echo "GL-HOOK-ERR:至少有一次提交的信息必须以 Ticket 开头,后跟空格和票据编号";
        退出 1
    fi
完成
退出 0

如果我们克隆一个仓库,创建一个新分支,然后推送它,它就能完美运行,但如果我们使用 gitlab 网页界面创建新分支,它就会失败。 我在 gitlab 文档中没有找到任何线索,最终我同意在通过网页界面创建分支时跳过检查,但我该如何检测呢?


问题在于,当通过 GitLab 的 Web 界面创建分支时,不会触发预接收钩子。这是因为 Web 界面通常不进行“推送”操作,而是直接在服务器端创建分支。

因此,无法在预接收钩子中检测到通过 Web 界面创建的分支。

为了解决这个问题,可以考虑以下几种方法:

1. 使用服务器端钩子:

  • GitLab 提供了其他类型的钩子,例如 update 钩子,它们在仓库更新时被触发,包括通过 Web 界面创建分支。可以在 update 钩子中添加类似的提交消息检查逻辑。
  • 可以使用 system hooks ,它们在全局范围内对所有仓库生效。

2. 修改工作流程:

  • 鼓励开发人员通过命令行创建分支,以便始终触发预接收钩子。
  • 在 GitLab 中禁用直接通过 Web 界面创建分支的功能,强制用户使用命令行或合并请求。

3. 放宽提交消息策略:

  • 如果经常通过 Web 界面创建分支,可以考虑放宽提交消息策略,例如,只要求在合并到主分支时包含 Ticket 号。

4. 使用 GitLab CI/CD:

  • 可以在 GitLab CI/CD 中添加一个作业,用于检查提交消息格式,并在不符合要求时使流水线失败。这种方法更灵活,可以进行更复杂的检查。

最佳解决方案取决于的具体需求和工作流程。如果希望强制执行严格的提交消息策略,则使用服务器端钩子或修改工作流程是更好的选择。如果需要更灵活的解决方案,则可以使用 GitLab CI/CD 进行检查。

标签:bash,git,gitlab,hook
From: 78560700

相关文章

  • 使用git报错:error: RPC failed; curl 18 transfer closed with outstanding read data
    今天在使用git下载项目时发生报错:error:RPCfailed;curl18transferclosedwithoutstandingreaddataremainingerror:4790bytesofbodyarestillexpectedfatal:earlyEOFfetch-pack:unexpecteddisconnectwhilereadingsidebandpacketfatal:fetch-pack:in......
  • 从零开始:配置 SSH 并将 Git 项目推送到 GitHub(windows)
    项目推送到github总是遇到如下问题:fatal:unabletoaccess'https://github.com/lw1725908379/power_supply.git/':Failedtoconnecttogithub.comport443after21060ms:Timedout当你使用HTTPS协议推送代码到GitHub时,Git尝试在端口443上与GitHub的服务器建......
  • 向GitHub远程仓库同步文件使用经验【2】
    新手流畅一顿操作由于没搞懂CSDN的更新文档策略,只能把新写的内容作为新文章发布了。前一篇文章在这将本地仓库与远程仓库同步当本地仓库没修改,但远程仓库修改了,这时可以吧远程仓库同步到本地仓库===方法一===gitfetch //将本地仓库中的远程分支更新成了远程仓库相应......
  • git-05标签操作
    1.创建标签首先,确保你在要打标签的分支上。例如,如果你想给main分支打标签,可以先切换到main分支:gitcheckoutmain然后,使用以下命令创建标签:例如,创建一个名为v1.0的标签:gittag<tagname>gittagv1.02.创建带有注释的标签例如,创建一个名为v1.0的带有注释的......
  • GitLab clone 地址不对的解决办法
    1丶问题描述2丶解决方案解决方案:找到挂载到宿主机配置文件:gitlab.rbvigitlab.rb改成自己的ip 重启容器dockerrestartgitlab如果发现容器一直重启,可采用粗暴的方法,直接干掉当前容器,重新运行一个#停掉容器dockerstop容器id #删除容器 dockerrm容器id  重新运行......
  • Git 远程代码执行漏洞(CVE-2024-32002)复现
    Git远程代码执行漏洞(CVE-2024-32002)漏洞标题:Git远程代码执行漏洞(CVE-2024-32002)影响版本:version2.45.*<2.45.1version2.44.*<2.44.1version2.43.*<2.43.4version2.42.*<2.42.2version2.41.*<2.41.1version2.40.*<2.40.2version2.39.*<2.39.4修复......
  • Repo, git相关经验
    RepoRepocomplementsGitbysimplifyingworkacrossmultiplerepositories.Fromhttps://source.android.com/docs/setup/create/repo基本语法repocontentcommandHelpRepohelpCommandHelpRepo<command>--helpinitRepoinit-uurl[option......
  • 【React】react函数式编程常用hooks讲解
    ReactHooks是React16.8版本引入的一项重要特性,它极大地简化和优化了函数组件的开发过程。React中常用的Hooks,包括useState、useEffect、useContext、useReducer、useCallback、useMemo、useRef、useLayoutEffect等。这些Hooks涵盖了状态管理、副作用处理、性能......
  • idea将代码上传到gitee上
    先将代码上传到git本地仓库中操作流程:如图注意项目介绍不能为空,随便写写就行这样就上传到了本地仓库之后在上传到gitee远程仓库中    gitee官网地址:Gitee-基于Git的代码托管和研发协作平台面向企业提供一站式研发管理解决方案,包括代码管理、项目管理、文......
  • gitlab之cicd的gitlab-runner集成-dockerfile构建环境
    目录概述离线资源docker-compose问题docker-compose问题1问题2gitlab-runner集成gitlab概述  cicd引文目录是想通过dockerfile构建maven、jdk、docker环境的gitlab-runner运行环境。但docker最后测试的时候有点问题,且最后使用kubectl时有麻烦,所以放弃。但有......