我开始使用git hooks,我想创建一个以防止开发人员在特定分支上创建新分支。我们公司目前的流程看起来像这样:
git checkout master
git fetch
git reset --hard origin/master
git checkout -b [branch name]
do awesome things.
但是,偶尔快速移动时,一些开发人员最终会从分段回购中启动这个新分支。这导致悲伤。
所以,我想创建一个钩子来在开发人员开始创建新分支时进行中断,检查他们所在的分支,如果分支不是exit 1
,则master
(或者,如果分支名称为staging
,则通常停止操作),否则允许。
修改
当我在此搜索更多内容时,我意识到我想要一个预检出钩子,它似乎不存在。除非有人有更好的想法,否则如果上述情况发生,我将继续在结账后挂钩中打印一个非常大的警告。
答案 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 :)