2012-06-22 80 views
4

我在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/ 
+0

考虑使用gitolite。它需要像这样的东西的麻烦 –

+0

你是否作为另一个用户初始化回购? 'git init'会设置一些东西,以便启动回购的用户可以访问它们。至于另一个用户,他们通常只是复制回购,这将会启动他们自己的副本(从而使它们可用)。 – cHao

回答

8

跑步

$ git init --shared=0777 --bare 

应该做你想做的。

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

或者,你可以设置一个OpenSSH服务器的服务器上,并让用户通过SSH访问该存储库。

3

这是一个非常糟糕的迹象,你想要使用777权限。你做错了什么。

首先,如前所述,考虑使用gitolite

如果你不可能为一个或两个贡献者提供一个或两个以上的回购,gitolite可能看起来是一个开销,尤其是如果你以前从未使用它。 (但我仍然推荐使用它)。

在我开始使用gitolite之前,我使用了this script来创建我的共享git repos。它是如何工作的:

  1. 所有Git回购用户(特定的回购)应该在同一个组中。
  2. 回购目录应该属于这个组。
  3. 粘滞组位应该设置在这个目录下(确保不要在文件中设置),所以当用户提交内容时组会被保留。
  4. Git repo应该用--shared选项初始化,给它写组权限。