如何使git存储库“仅拉”

pbgvytdp  于 2022-10-23  发布在  Git
关注(0)|答案(7)|浏览(163)

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

[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内置了这样的东西吗?

rt4zxlrg

rt4zxlrg1#

我同意@duskuff..看看这个branching model。这将有助于你在没有Gerrit的情况下只获得拉力

4nkexdtk

4nkexdtk2#

git本身不包括任何权限管理。
您可以在管理git存储库的软件中实现更高一级的目标(如果您采用某种程度上集中的方法,但我想大多数公司都希望这样)。所以gitolite(http://gitolite.com/gitolite/)或gitlab可以做到这一点。

ecfsfe2w

ecfsfe2w3#

一个简单的解决方案是users profile/etc/profile.d/git_restrictions。什:

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
ffx8fchx

ffx8fchx4#

您可以使用单独的pull和push存储库URL。有关规则,请参阅文档,有关详细信息和讨论,请参阅this Q&A

lf5gs5x2

lf5gs5x25#

如果你想要复杂的存储库访问控制,你可能想看看Gerrit。它的主要焦点是代码审查(这也是完全值得的!),但它也作为副作用进行访问控制。
否则,如果您只需要一些非常简单的东西,那么文件权限是在单个计算机上处理这一问题的一种非常好的方式。只要用户不能写入包含存储库的目录中的文件,他们就不能推送到存储库。我看这一点都不雅观!

mbjcgjjk

mbjcgjjk6#

一种更“成年人同意”的解决方案会奏效吗?
例如,在git中,您只设置了远程获取,并将远程推送到一个虚拟的不存在的URL,这样用户就不会意外地将git push发送到它。
编辑:这与接受的in this question类似。

7tofc5zh

7tofc5zh7#

您可以使用gitolitegitosis。然后,您可以创建用户列表,这些用户可以拉取、推送每个分支,也可以创建标签等。
我比吉托利更了解吉托利。该配置只是一个具有文件简单语法的git存储库。

相关问题