GitHub允许你配置你的存储库,这样用户就不能强制push到master,但是有没有办法完全防止push到master呢?我希望这样做,添加到提交到master的唯一方法是通过GitHub拉请求UI。
当前回答
当前接受的答案实际上是正确的,但如果您是组织所有者或具有管理权限(如果您创建了回购,则属于这种情况),则仍然可以推送到受保护的分支。从Github文档https://help.github.com/en/articles/about-branch-restrictions:
组织所有者和具有存储库管理权限的人员总是能够推送到受保护的分支。
对于任何其他类型的协作者,git push将失败。
如果你真的想禁用推送,那么你必须在本地设置一个无效的pushRemote为一个分支,如前所述:
git配置branch.master.pushRemote no_push
或者通过创建一个预推钩子,如下所示:https://gist.github.com/vlucas/8009a5edadf8d0ff7430
其他回答
如果您正在使用Node,您可以使用husky创建一个预推送验证,以确保不会发生直接推送到master的情况。这样,您仍然可以使用管理员权限来合并pr。我想其他语言对husky也有类似的解决方案。
NPM安装husky——save-dev 在/ .huskyrc.js:
const preventPushToMaster = `branch=\`git symbolic-ref HEAD\`
if [ "$branch" = "refs/heads/master" ]; then
echo "\\033[31mDirect push to master is not allowed.\\033[0m"
exit 1
fi`;
module.exports = {
hooks: {
'pre-push': preventPushToMaster,
},
};
您可以启用分支限制,并决定允许谁(根据组织的用户和团队)推送。
https://help.github.com/articles/about-branch-restrictions/
«注意:如果“包括管理员”被选中,并且您已经在分支上启用了所需的状态检查,并且它们失败了,那么任何将更改推到基础分支的尝试也将失败,无论用户或团队的权限状态如何。»
我需要避免意外地将任何提交推到主分支。 这是一个类似于@christian-chandra的解决方案,但更简单。
转到本地工作副本,然后
$ cd .git/hooks
echo '' > pre-commit
$ chmod +x pre-commit
将此内容添加到文件(预提交)
#!/bin/sh
branch="$(git rev-parse --abbrev-ref HEAD)"
if [ "$branch" = "master" ]; then
echo "Master Branch commit is blocked"
exit 1
fi
完成了!
我希望这样做,添加到提交到master的唯一方法是通过GitHub拉请求UI。
我有一个解决方案,可以防止推送到主分支,并且不需要批准或长时间的状态检查来传递拉请求。
诀窍在于创建一个立即通过的状态检查。
在. GitHub /workflows/requirePullRequest.yml中创建以下GitHub Action。
name: require pull request
on:
pull_request:
branches:
- master
jobs:
job:
name: require pull request
runs-on: ubuntu-latest
steps:
- run: echo hello
接下来,更新存储库设置以要求通过要求拉取请求状态检查。
如果您希望管理员遵循相同的规则,则必须检查include administrators规则。
这样,GitHub将拒绝所有直接推送到主分支,拉取请求将不会被任何事情延迟。
当前接受的答案实际上是正确的,但如果您是组织所有者或具有管理权限(如果您创建了回购,则属于这种情况),则仍然可以推送到受保护的分支。从Github文档https://help.github.com/en/articles/about-branch-restrictions:
组织所有者和具有存储库管理权限的人员总是能够推送到受保护的分支。
对于任何其他类型的协作者,git push将失败。
如果你真的想禁用推送,那么你必须在本地设置一个无效的pushRemote为一个分支,如前所述:
git配置branch.master.pushRemote no_push
或者通过创建一个预推钩子,如下所示:https://gist.github.com/vlucas/8009a5edadf8d0ff7430
推荐文章
- ASP中基于角色的访问控制(RBAC)与基于声明的访问控制(CBAC)NET MVC
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- 在GitHub上有一个公共回购的私人分支?
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- 只用GitHub动作在特定分支上运行作业
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支