Git分支权限

32

是否可以使用git bash设置分支权限?我想在主分支上设置更严格的权限,使得一些人可以使用开发分支并提交到它,但不能自行更改主分支。

如果可以的话,我应该如何去尝试做到呢?


这个回答解决了你的问题吗?如何在Git上限制对主分支的访问 - 1615903
4个回答

32

Git没有分支特定的权限。您可以将整个仓库只读,或创建一个私有和一个公共仓库,只将开发分支推送到公共仓库中,而将主分支保留在您的私有仓库中。

编辑: 要实现分支特定权限,您需要像Gitolite这样的服务器端授权层 - 显然,这需要您管理自己的Git服务器。


32
我感到有必要强调一下,这个问题是关于GIT而不是Github的,它们是两个完全不同的东西。 :) - Matthew Blackwind
1
Gitolite 链接应为 https://git-scm.com/book/en/v1/Git-on-the-Server-Gitolite。 - gtiwari333

5

一个典型的场景是需要将官方(或发布)分支的访问权限限制在团队的一部分人员之内。在这种情况下,一个好的策略是拥有两个仓库——一个主要的仓库,其访问控制更为严格,和另一个每个团队成员都可以访问和用于设置工作分支的仓库。然后根据需要从工作分支向主仓库执行拉取操作。当然,您可以根据您的团队结构和需求进行相应调整。

使用像github这样的服务尤其有效。


5

4
如果你的开发团队是文明有礼的人,只需要一个友好的提醒,你可以使用pre-receive服务器端钩子拒绝推送:
#!/bin/bash

# Extract the user email (%ae) from the last commit (author email)
USER_EMAIL=$(git log -1 --format=format:%ae HEAD)

# Looping through all the pushed branches
while read oldrev newrev refname
do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    if [ "master" == "$branch" ] && [ "the_integrator@your_company.com" != $USER_EMAIL ]; then
        echo "Naughty naughty!"
        exit 1 # fail, i.e. reject push
    fi
done

尽管用户可以轻易伪造他们的git电子邮件地址,但我仍然会使钩子文件本身只读。
参考文献:
  1. 如何在服务器端git hook中获取推送用户信息?
  2. 编写git post-receive钩子以处理特定分支

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接