我正在为多个开发人员在共享服务器上设置开发环境。我将拥有一个存储库,其中包含生产中使用的所有代码,还有许多其他存储库用于团队中不同成员的开发。我想要的是生产回购只是'拉动'。用户可以随时从中获取并在本地进行生产更改,但是需要由生产管理员处理,或者至少需要密码。类似的东西:
[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有内置的东西吗?
答案 0 :(得分:3)
如果您需要复杂的存储库访问控制,您可能需要查看Gerrit。它的主要重点是代码审查(完全值得拥有!),但它也将访问控制作为副作用。
否则,如果您只是想要一些非常简单的东西,那么文件权限是在一台机器上处理它的一种非常好的方法。只要用户无法写入包含存储库的目录中的文件,他们就无法推送到它。我根本没有看到任何不优雅的东西!
答案 1 :(得分:2)
您可以使用gitolite或gitosis。然后,您可以创建可以拉动,推送每个分支,谁可以创建标签等的用户列表。
我比gitosis更了解gitolite。配置只是一个git存储库,文件的语法很简单。
答案 2 :(得分:1)
git本身不包含任何权限管理。
您可以在管理您的git存储库的软件中实现更高级别(如果您采用某种集中式方法,但我想大多数公司都希望如此)。所以gitolite(http://gitolite.com/gitolite/)或gitlab可以做到这一点(http://gitlab.org/)。
答案 3 :(得分:1)
更多'同意成年人'的解决方案是否会正常运作?
例如,在git中,您只设置了远程提取,并将远程推送保留为虚拟的不存在的URL,这样用户就不会意外地git push
到它。
编辑:这与接受的内容类似in this question。
答案 4 :(得分:0)
我同意@duskwuff。看看这个branching model。这将有助于您实现只有而不是 Gerrit
答案 5 :(得分: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