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/
4

2 回答 2

11

跑步

$ git init --shared=0777 --bare

应该做你想做的。

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

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

于 2012-06-22T18:06:38.830 回答
4

您想要使用 777 权限是一个非常糟糕的信号。你做错了什么。

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

如果你不可能为一两个贡献者拥有超过一两个 repos,gitolite 可能看起来是一种开销,特别是如果你以前从未使用过它。(但我仍然建议使用它。)

在我开始使用 gitolite 之前,我使用这个脚本来创建我的共享 git 存储库。这个怎么运作:

  1. 所有 Git repo 用户(特定 repo 的)都应该在同一个组中。
  2. 回购目录应归该组所有。
  3. 应该在这个目录上设置粘性组位(确保不要在文件上设置它),所以当用户提交内容时,组将被保留。
  4. Git repo 应该使用--shared选项初始化,以赋予它组写入权限。
于 2012-06-23T06:58:54.297 回答