没有足够的权限推动通过智能HTTP Git共享回购

时间:2011-08-12 15:51:14

标签: linux git apache permissions smart-http

我正在尝试为我们的团队评估git,其中一个要求是使用HTTPS作为传输方法。我一直在尝试关注git-http-backend文档以及一些稀疏的博客,使用新的智能HTTP传输设置它,但我只是没有让它工作。我知道这可能是一些愚蠢的事情,但是我已经把它的大脑绞尽脑汁无济于事。不要用git假设任何真正的知识,我对这个工具很陌生。


现在我可以克隆HTTP就好了,但是当我尝试推送时,客户端得到:

$ git push
Username:
Password:
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 291 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
error: unpack failed: unpack-objects abnormal exit


服务器Apache错误日志说:

  

错误:将对象添加到存储库数据库的权限不足./objects

     

致命:未能写对象


Apache配置:

SetEnv GIT_PROJECT_ROOT /opt/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

<Location /git>
        AuthType Basic
        AuthName "Private Git Access"
        Require valid-user
        AuthUserFile /opt/git/passwords
</Location>


显然我的第一个想法是文件权限,所以我做了一个快速 chown -R apache:/ opt / git

# ls -l /opt/git
drwxr-xr-x. 7 apache apache 4096 Aug 12 11:06 project.git

但我仍然得到同样的错误。

谢谢,非常感谢我能得到的任何帮助。

2 个答案:

答案 0 :(得分:1)

解决方案可能是服务器上存储库的组权限。

  1. cd to / opt / git
  2. sudo chgrp -R apache project.git
  3. 我的apache通常以www-data运行,而不是apache,所以该组也可能出错

    我使用gitosis并通过服务器帐户而不是Apache管理帐户,但使用这种解决方案解决了我同样的问题

答案 1 :(得分:1)

尝试跑步:

git repo-config core.sharedRepository true

这为我解决了类似的问题。来自文档:

  

core.sharedRepository

     

如果为true,则存储库可在a中的多个用户之间共享   group(确保所有文件和对象都是可写组的。)

您可以验证此处给出的步骤(这绝对是权限/组问题):

http://parizek.com/?p=177