如何在推送后使裸git存储库成为可写的?

时间:2013-04-08 13:59:32

标签: git

我在服务器上有一个裸git存储库,我通过SSH访问它。我可以推拉就好了。但是,我推送的文件是在具有访问权限644的服务器上创建的,这意味着只允许我更改文件。只要我是唯一的贡献者,这是好的,但是我可以做些什么来允许多个用户使用存储库?我在服务器上没有root权限,因此我无法更改任何全局选项。

我正在考虑一些钩子脚本,以便在推入存储库后更改文件权限。

这是解决我问题的首选方法吗?我究竟该怎么前进?还有其他/更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

您必须将文件夹更改为775,将文件更改为664.之后,您需要配置core.sharedRepository

https://www.kernel.org/pub/software/scm/git/docs/git-config.html

  

当group(或true)时,存储库可在多个存储库之间共享   组中的用户(确保所有文件和对象都是   组可写)。当所有(或世界或所有人),存储库将   除了可分组之外,所有用户都可以读取。什么时候   umask(或false),git将使用umask(2)报告的权限。什么时候   0xxx,其中0xxx是八进制数,存储库中的文件将具有   这个模式的价值。 0xxx将覆盖用户的umask值(而   其他选项只会覆盖用户umask的请求部分   值)。示例:0660将使repo可读/可写   所有者和群组,但其他人无法访问(相当于群组   除非umask是例如0022)。 0640是一个存储库   组可读但不可写组。请参阅git-init(1)。假的   默认值。

在我的团队存储库中,我将其设置为group。所以,我的config看起来像这样:

sharedRepository = group

您对服务器没有权限?除非您计划与多个贡献者共享一个SSH帐户,否则需要进行整理。

答案 1 :(得分:0)

服务器用户只是repo文件的所有者。贡献者是可以访问服务器的其他用户,但不一定是真正的系统用户。

假设您git上有用户yourserver.com/home/git/yourproject.git中有您的回购。 在此示例中,我们将使用authorized_keys方法对用户进行身份验证:您需要将贡献者SSH公钥添加到用户git的authorized_keys文件中(例如,在/home/git/.ssh/authorized_keys内)。

此时,贡献者可以克隆项目并轻松推送更改:

$ git clone git@yourserver.com:/home/git/yourproject.git

贡献者第一次必须配置他们的身份:

$ git config --global user.email "bob@example.com"

使用这种方法,您可以快速为少数开发人员启动并运行读/写Git服务器,而无需担心文件权限,但可以跟踪个别更改;我总是使用此设置来配置git存储库。