7

我正在为多个开发人员在共享服务器上设置开发环境。我将拥有一个存储库,其中包含生产中使用的所有代码,以及用于团队不同成员开发的许多其他代码。我想要的是生产回购是“仅拉动”。用户可以随时从中提取并在本地获取生产更改,但推送需要由生产管理员处理,或者至少需要密码。就像是:

[user@machine /devroot/myrepo]$ git pull $PRODUCTION master
From <location>
*branch             master       ->  FETCH_HEAD
Already up-to-date 

[user@machine /devroot/myrepo]$ git push $PRODUCTION master
error: user `user` is not authorized for this action

或者

[user@machine /devroot/myrepo]$ git push $PRODUCTION master
HEAD @ `$PRODUCTION`-Please enter password:

我相信我可以通过文件权限来做到这一点,但这并不是一个优雅的解决方案。git 有这样的内置功能吗?

4

6 回答 6

3

如果您想要复杂的存储库访问控制,您可能需要查看Gerrit。它的主要重点是代码审查(这也完全值得拥有!),但它也将访问控制作为副作用。

否则,如果您只想要一些非常简单的东西,文件权限是在单台机器上处理此问题的绝佳方式。只要用户不能写入包含存储库的目录中的文件,他们就不能推送到它。我看不出有什么不雅之处!

于 2013-07-17T17:03:13.943 回答
3

更“同意成年人”的解决方案会奏效吗?

例如,在 git 中,您只设置了远程获取,而将远程推送留给了一个虚拟的不存在的 URL,这样用户就不会意外git push地访问它。

编辑:这类似于这个问题中接受的内容。

于 2016-07-27T07:05:37.313 回答
2

您可以使用gitolitegitosis。然后,您可以创建可以拉取、推送每个分支、可以创建标签等的用户列表。

我比 gitosis 更了解 gitolite。配置只是一个 git 存储库,文件语法简单。

于 2013-07-17T18:02:16.043 回答
1

我同意@duskwuff ..看看这个分支模型这将帮助您仅在没有Gerrit 的情况下实现拉动

于 2013-07-17T18:28:30.760 回答
1

git 本身不包含任何权限管理。

您可以在管理您的 git 存储库的软件中实现更高的级别(如果您采用某种集中的方法,但我想大多数公司都希望这样做)。所以 gitolite ( http://gitolite.com/gitolite/ ) 或 gitlab 可以做到这一点 ( http://gitlab.org/ )。

于 2013-07-17T20:28:28.707 回答
0

一个简单的解决方案是用户配置文件 /etc/profile.d/git_restrictions.sh :

function git() {
    if [[ "$@" == 'pull' ]] || [[ "$@" == 'status' ]] || [[ "$@" == 'help' ]]; then
        echo "git $@"
        command git $@
    else
        echo " Allowed GIT commands on this server are:"
        echo " - git pull"
        echo " - git help"
        echo " - git status"
    fi
}

然后,当您运行除上面列出的任何其他内容时,会发生这种情况:

 Allowed GIT commands on this server are:
 - git pull
 - git help
 - git status
于 2020-04-14T15:13:50.037 回答