只想允许 git 以特定单词开头且仅包含小写字符的分支名称

want to only allow git branch names that begin with specific words and have lowercase characters only

我正在尝试设置一个 git 挂钩,用于检查 b运行ch 名称是否以特定单词开头,是否只有小写字母且不超过 15 个字符。我让它部分工作。正则表达式的 'lowercase only' 和“15 个字符或更少”部分有效。我无法使正则表达式的 'begins with specific words' 部分起作用。

这里是我的git钩子预推文件内容:

#!/usr/bin/env bash
LC_ALL=C

local_branch="$(git rev-parse --abbrev-ref HEAD)"

valid_branch_regex="^(task|master|develop|qa|tb|bug|story)\/[a-z0-9._-]{2,15}$"

message="This branch violates the branch naming rules. Please rename your branch."

if [[ ! $local_branch =~ $valid_branch_regex ]]
then
    echo "$message"
    exit 1
fi

exit 0

我在本地创建了一个名为 task_7777 和 运行 git push 的新 b运行ch。 b运行ch 名称未通过正则表达式检查,即使该名称以 'task'.

开头

我只想要 b运行ch 名称以“task、master、develop、qa、tb、bug 或 story”开头,并且只允许小写字母、数字、破折号和下划线,并且包含15 个字符或更少。我尝试按照 post 中的示例对我的代码进行建模:https://itnext.io/using-git-hooks-to-enforce-branch-naming-policy-ffd81fa01e5e

如何使正则表达式的 'begins with specific words' 部分起作用?

首先您需要将正则表达式更改为不需要关键字后的 /

^(task|master|develop|qa|tb|bug|story)[a-z0-9._-]{2,15}$

那你还有问题,你的长度限制只限制关键字后面的部分,这可能不是你想要的。要解决此问题,您需要分开测试,因为 bash 不支持 lookahead zero-length assertion:

valid_keyword_regex="^(task|master|develop|qa|tb|bug|story)"

valid_length_regex="^[a-z0-9._-]{2,15}$"

如果两个测试都成功,您就有了一个有效的分支名称。