我的git存储库有两个分支,'master'和'dev'。
致力于'dev'的代码在测试之前会经过自动构建过程。然后将传递此代码的代码合并到“主”分支中。
是否有可能使用钩子或其他东西阻止“master”分支上的正常直接提交,并且只接受从“dev”到“master”的合并?
答案 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).)*$\""
}
}
答案 5 :(得分:-6)
制作本地分支
command: git branch <branch name>
转到分支
Command: git checkout <branch name>
现在你所有的本地工作保存(通过添加。&amp; commit)到分支,然后通过左推送到远程
command : git push origin <branch name>
之后你可以制作拉取请求来掌握并合并到主人。 这是基于linux(Ubuntu)系统环境的答案。
如果有任何遗漏,请告诉我?