防止在git存储库中的master分支上直接提交并仅接受合并?

时间:2011-08-13 19:10:06

标签: git merge commit

我的git存储库有两个分支,'master'和'dev'。

致力于'dev'的代码在测试之前会经过自动构建过程。然后将传递此代码的代码合并到“主”分支中。

是否有可能使用钩子或其他东西阻止“master”分支上的正常直接提交,并且只接受从“dev”到“master”的合并?

6 个答案:

答案 0 :(得分:9)

不是直接答案:考虑使用repos而不是分支。想象一下三个回购:本地,开发和祝福。本地=您自己的回购地点。 Dev =您将所有提交推送到的repo以及您的构建过程监视更改的那个。 Blessed =只有构建过程可以推送到的内容以及您从中获取的内容。因此,您将提交到本地并将更改推送到开发人员。自动构建会对您推送和成功的提交进行全部测试,将它们推向祝福。然后你(或任何其他人)可以从祝福中接过它们并继续从那里开始工作。

答案 1 :(得分:4)

您可能希望使用commit-msg挂钩来检查消息中是否出现单词merge以进行暂定提交。像

这样的东西
grep -iq merge "$1" || exit 1

检查分支后。你可能想让RE比这更严格。当然,这只是一种启发式方法,任何对中央仓库具有写访问权限的人都可以规避此检查。

答案 2 :(得分:4)

如果您正在使用GitHub,它们具有保护分支的功能。转到存储库的GitHub设置,然后分支并查看受保护的分支设置。

您可以选择要保护的分支,以及每个分支如何保护它。您可以阻止强制推送,要求更改从另一个分支合并,甚至要求您的自动化测试已通过。

请参阅https://help.github.com/articles/defining-the-mergeability-of-pull-requests/

Bitbucket提供了类似的功能。

答案 3 :(得分:1)

考虑使用像gitolite

这样的git访问控制层

答案 4 :(得分:0)

npm install -D husky

npm i git-branch-is

通过package.json配置它

    "husky": {
      "hooks": {
        "pre-commit": "git-branch-is -r \"^((?!master).)*$\""
    }
  }

enter image description here

答案 5 :(得分:-6)

制作本地分支

 command: git branch <branch name>

转到分支

Command: git checkout <branch name>     

现在你所有的本地工作保存(通过添加。&amp; commit)到分支,然后通过左推送到远程

command : git push origin <branch name>

之后你可以制作拉取请求来掌握并合并到主人。 这是基于linux(Ubuntu)系统环境的答案。

如果有任何遗漏,请告诉我?