我有一些通过SSH远程访问的git存储库,我想让它们中的一些只读,以防止更多的推送.有些人有遥控器指向这些存储库.
这些裸存储库已初始化--shared=group
,因此将所有文件的文件权限设置为660,足以保持SSH访问,但禁止写入?或者有更简单的方法吗?
干杯.
Jak*_*ski 45
有多种可能的方法可以做到这一点.
如果您的每个用户都有一个shell帐户(可能是有限的),并且每个用户都通过自己的帐户访问git存储库,则可以使用文件系统权限来控制对git存储库的SSH访问.在Unix上,这些是对目录的写权限,可能是在创建组和组的特定权限的帮助下(设置了"粘性组ID").
推送需要git-receive-pack
在$ PATH的用户,并为他们执行...虽然我不知道这种方法是多么可行.
您可以使用update
或pre-receive
挂钩对存储库执行访问控制,例如使用git源中的update-paranoid示例钩子contrib/hooks
.
使用大量用户,您可以更好地使用工具来管理对git存储库的访问,例如Gitosis(在Python中,需要setuptools)或Gitolite(在Perl中).
对于只读访问,您可以设置git守护程序以通过git://
协议提供只读匿名(和未经身份验证的)访问,而不是通过SSH协议访问.
有关url.<base>.insteadOf
简化从SSH到GIT协议的转换的方法,请参阅config变量的文档.
另请参阅Scott Chacon的第4章" Git on the Server " Pro Git书籍(CC-BY-NC-SA许可).
Dal*_*son 10
一个pre-receive
简单地打印通知消息,退出与非0状态钩做这项工作.
假设您在邮件中添加了一些有意义的信息,它还会减少来自沮丧用户的查询,询问他们为什么无法推送:
#!/bin/bash
echo "=================================================="
echo "This repository is no longer available for pushes."
echo "Please visit blah blah yadda yadda ...."
echo "=================================================="
exit 1
Run Code Online (Sandbox Code Playgroud)
请记住为脚本设置可执行权限并确保由正确的用户和/或组拥有,否则它将不会执行,也不会发出任何警告.