防止从特定分支创建新分支的 Git 钩子(Hook)

标签 git githooks

我开始尝试使用 git hooks,我想创建一个来防止开发人员在特定分支上创建新分支。我们公司目前的流程是这样的:

git checkout master
git fetch
git reset --hard origin/master
git checkout -b [branch name]
do awesome things.

但是,偶尔在快速移动时,一些开发人员最终会从暂存存储库开始这个新分支。这引起了悲伤。

所以,我想创建一个 Hook ,以便在开发人员开始创建新分支时中断,检查他们在哪个分支上,如果分支不是 exit 1 master(或者如果分支名称是 staging,则通常停止操作),否则允许它。

编辑:

当我对此进行更多搜索时,我意识到我需要一个预 checkout Hook ,但它似乎并不存在。除非有人有更好的主意,否则如果上述情况发生,我将继续在 checkout 后 Hook 中打印一个非常大的警告。

最佳答案

对于客户端,您可以创建一个post-checkout Hook ,它使用git branch --merged 查看当前分支中 merge 的分支。如果要阻止分支的分支 merge 到当前分支中,则会抛出错误。

bach 中的代码如下所示:

#!/bin/sh

getBranchName()
{
    echo $(git rev-parse --abbrev-ref HEAD)
}

getMergedBranches()
{
    echo $(git branch --merged)
}

if [ "$(getBranchName)" != "dev" ]; then
    if [[ $(getMergedBranches) == *"dev"* ]]; then
        echo "Don't create branches from the dev branch!"
        exit 1
    fi
fi

关于防止从特定分支创建新分支的 Git 钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8235813/

相关文章:

git - Visual Studio 2013 不提供在 Git pull 上进行 merge

Github pull request hooks、静态代码分析和临时回滚

git - 如何使用 github webhooks 阻止特定的推送?

git status 花费的时间太长

git - “git rm”命令的作用范围是什么,它对所有分支或HEAD分支都有效吗

c++ - 如何在visual studio中安装aquila库

git - 预推git钩子(Hook)?

git - 如何将 clang-formatting 添加到预提交 Hook ?

git - 如何设置服务器端预接收 Hook ?

git - git在哪里存储文件名?