Git挂钩以防止从特定分支创建新分支

时间:2011-11-23 00:24:15

标签: git githooks

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

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

但是,偶尔快速移动时,一些开发人员最终会从分段回购中启动这个新分支。这导致悲伤。

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

修改

当我在此搜索更多内容时,我意识到我想要一个预检出钩子,它似乎不存在。除非有人有更好的想法,否则如果上述情况发生,我将继续在结账后挂钩中打印一个非常大的警告。

2 个答案:

答案 0 :(得分:1)

对于客户端,您可以创建 post-checkout 挂钩,该挂钩使用 git branch --merged 来查看当前分支中合并的分支。如果要阻止分支的分支在当前分支中合并,则抛出错误。

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

答案 1 :(得分:0)

我会在受祝福的回购方面抓住这个。如果开发人员在除了最新主服务器之外的其他事件上启动了分支,则拒绝推送分支。他们可以通过退出主人并再次推动来纠正。确保您的错误消息具有足够的描述性,以便他们知道如何纠正他们的情况。

此外,更新您的主人,而不是通过以下方式检查:

git fetch
git push . origin/master:master

然后从最新的主人创建一个分支:

git checkout -b somecoolfeature master

您甚至不需要更新本地主人:

git fetch
git checkout -b somecoolfeature origin/master
do awesome stuff :)