2011-11-23 365 views
7

我开始玩弄git钩子,并且我想创建一个以防止开发人员在特定分支上创建新分支。我们公司的当前进程是为了看起来像这样:Git钩子阻止从特定分支创建新分支

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

然而,偶尔快速移动时,一些开发商最终从登台回购开始这个新分支。这会导致悲伤。

所以,我想创建一个挂钩,以便在开发人员开始创建新分支时检查它们在哪个分支上,并且如果该分支不是master(或者只是通常停止该操作),则可以使用exit 1如果分支名称是staging),或者以其他方式允许。

编辑:

当我搜索更多关于这个,我知道我想结帐前的钩,这似乎不存在。除非有人有更好的主意,否则如果上述方案即将通过,我将在后结帐挂钩中继续打印非常大的警告。

+0

同样,你为什么要阻止分支? – jman

+1

我们的暂存分支包含很多我们不希望推到生产中的代码,必然。 – hookedonwinter

回答

0

我会在这个幸运的回购方面看到这一点。如果一个开发者在除了最新的主控器之外的其他事物上启动了某个分支,则拒绝该分支的推送。他们可以通过脱离主人并重新推动来纠正。确保你的错误信息足够描述,以便他们知道如何纠正他们的情况。

此外,更新主没有检查出来有:

git fetch 
git push . origin/master:master 

然后创建一个分支自己的最新大师:

git checkout -b somecoolfeature master 

你不必甚至有当地主最新日期:

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

对于客户端,您可以创建一个文章-checkout使用git分支的挂钩 - 并入以查看当前分支中合并的分支。如果你想防止分支的分支被合并到当前分支中,那么你会抛出错误。在巴赫

代码应该是这样的:

 
#!/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