How to restrict access to the master branch in Git

我有一个存储库,其中有两个用户组:

  • 行政人员
  • HTML/UI 开发人员

我不希望将我的 master分支的读/写访问权限给我的 HTML 开发人员,因为他们不需要处理它,也不应该滥用核心代码。

尽管他们需要在自己的分支 ui-developers上工作?

附注: 我在用 Bitbucket


我发布这个问题的时候,我还是编程和 Git 的新手。经过两年的经验,我现在知道 Git 不允许限制任何特定分支的 READ 访问。但是像 Bitbucket、 GitLab 和 GitHub 这样的服务允许您对分支设置写入和合并限制。

另外,六个月前我转到了 GitLab:)

142593 次浏览

Git 本身没有这样的特性,但是很多托管服务提供商有。这通常被称为 branch protection。据我所知,没有办法阻止读访问。

Using Bitbucket

Bitbucket 允许对通过分支保护防止的操作进行大量定制:

  1. 转到项目中的存储库。

  2. 选择 设定分支权限

  3. 添加权限

  4. 树枝字段中,选择 分支名称分支模式分支模型

  • 分支名称 -按名称选择现有分支。

  • Branch pattern -使用分支模式语法为匹配分支名称指定分支。

  • 分支模型 -选择要限制访问的分支类型。

  1. 选择要防止的操作类型。
  • 分支删除-防止分支和标记删除。

  • 重写历史记录-防止在指定的分支(es)上重写历史记录-例如通过强制推送或重建基础。

  • 没有拉动请求的更改——防止将更改直接推送到指定的分支; 只有在拉动请求时才允许更改。

  • 所有修改-防止推送到指定的分支(es) ,并限制创建与指定的分支或模式匹配的新分支。

  1. 可选项: 添加任何选定限制的豁免。添加一个用户或组作为豁免意味着它将不适用于它们。这不是必须的; 不增加任何豁免意味着限制将适用于所有人。

  2. 单击 Create完成。

来源

Using GitHub

存储库可以有多个受保护的分支规则,这些规则影响相同的分支。

受保护的分支只能在使用 GitHub Free 的公共存储库中使用。

GitHub 中受保护的分支可以配置为:

  • 通过拉请求进行推送,并在合并前进行审查,

  • 其他分支在合并前通过状态检查,

  • 提交要签署的文件,

  • 历史是线性的,

  • 即使对于管理员,上述规则也是强制执行的,

  • 来自特定的人、团队或应用程序的推动,

力量推动和删除可以单独允许。

保护树枝:

  1. 在 GitHub 上,导航到存储库的主页。

  2. 在存储库名称下,单击 设定

  3. 在左侧菜单中,单击 树枝

  4. 在“分支保护规则”旁边,单击 Add rule

  5. Under "Branch name pattern", type the branch name or pattern you want to protect (受影响的分行被列出并计数).

  6. 如果需要,配置特定的分支规则设置。

  7. 单击 创造保存更改

来源

使用 GitLab

在 GitLab 中,保护分支需要执行以下操作:

  • 它阻止它的创建,如果还没有创建,从每个人,除了用户与主人的权限
  • 它可以阻止除了拥有 Master 权限的用户之外的所有人的推送
  • 它可以防止任何人用力推动树枝
  • it prevents anyone from deleting the branch

保护树枝:

  1. 导航到项目的主页。

  2. 在右上角,单击设置轮并选择受保护的分支。

  3. 从“分支”下拉菜单中,选择要保护的分支,然后单击“保护”。

  4. Once done, the protected branch will appear in the "Already protected" list.

然后,您可以通过检查“ Developers can merge”或“ Developers can push”来允许对具有开发人员权限的用户进行一些访问

来源

除了 @ 1615903的回答,你还可以保护 Azure DevOps中的一个分支,如下所示:

使用 Azure DevOps

在 Azure DevOps 中,使用安全权限和策略保护分支,您可以执行以下操作:

  • Add or remove users and groups to a specific branch.
  • 为拉请求声明最少的评审员数量。
  • 自动包括代码审查员
  • 自动检查链接的工作项是必需的还是可选的
  • 检查评论解析
  • 执行合并策略(无快进或压缩)
  • 构建验证

more detailed information在文档页面。

To protect the branch:

  1. 在项目主页中选择 Repos树枝打开 树枝
  2. 在列出所有分支的页面上找到您的分支。
  3. 选择 ...按钮。然后从上下文菜单中选择 分行政策分部保安
  4. 完成后,选择 Save changes以应用新的策略配置。

在 Git 本身中,您可以使用服务器中的“预接收”钩子来保护向某些用户写入分支的操作。

Using this hook you can apply your restriction policies for each file in the push.

在这里 你可以找到一个例子。

Actually for Bitbucket, you can add a branch permission for Master only to block everything:

Enter image description here

And then for feature, you do allow writing to feature branches:

Enter image description here

我已经测试过了,我不被允许直接推到主分支。

今天这里有很多信息是不正确的。

Protected branches are not "only" limited to GitHub public branches. Can you restrict read access to a branch? Yes! You can restrict read access using key management, namely SSH keys. We do it all of the time given we have contracting software developers working on projects that don’t work for us.

实际上,如果不使用已发出的 SSH 密钥进行身份验证,就无法访问(读/写)分支。后来我们变得更聪明了,开始要求每个开发人员与我们共享他们的 SSH 密钥,现在我们开发了一个脚本(用于 Bitbucket) ,在授予访问权限之前检查所有的 SSH 密钥。

给 Bitbucket 的,就是这个。

首先进入存储库设置。

Enter image description here

然后分支权限。

Select branch permissions

最后,限制你想要的方式。

Set branch permissions