裸仓库权限。

5
我在Ubuntu服务器上安装了git,将本地repo推送到服务器时出现以下错误。当我更改这两个文件夹的权限时,它可以正常工作。我想知道为什么当我设置git init --bare时,它不能使用它创建的权限正常工作。此外,777是否是这些文件夹最好的权限?有没有更合适的方法来解决这个问题?
第一个错误:
error: insufficient permission for adding an object to repository database ./objects

第一种解决方案:

sudo chmod 777 objects/

第二个错误:
fatal: Unable to create '/srv/git/example.com.git/refs/heads/master.lock': Permission denied

第二个解决方案:
sudo chmod 777 refs/heads/

考虑使用 gitolite。它可以轻松处理这类问题。 - Andrew Walker
你是否以另一个用户的身份初始化了仓库?git init会设置访问权限,以便由初始化仓库的用户访问。至于其他用户,他们通常只需克隆仓库,这将为他们初始化自己的副本(从而使其可用)。 - cHao
2个回答

11

运行中

$ git init --shared=0777 --bare

应该可以满足您的需求。

来自http://git-scm.com/docs/git-init

或者,您可以在服务器上设置一个OpenSSH服务器,并通过ssh让用户访问此存储库。


4

你想要使用 777 权限是一个非常糟糕的信号,说明你正在做一些错误的事情。

首先,正如已经建议的那样,考虑使用 gitolite

如果您可能只有一个或两个仓库供一个或两个贡献者使用,那么 gitolite 可能会显得过于繁琐,特别是如果您以前从未使用过它。(但我仍然建议您使用它。)

在我开始使用 gitolite 之前,我使用了 这个脚本 来创建我的共享 git 仓库。它的工作原理:

  1. 所有 Git 仓库用户(同一个仓库的用户)应该属于同一个组。
  2. 仓库目录应该由这个组拥有。
  3. 这个目录应该设置粘性组位(sticky group bit),以便在用户提交内容时保留组信息(请确保不要将其设置在文件上)。
  4. Git 仓库应该使用 --shared 选项初始化,以赋予它组写权限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接