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

时间:2017-04-05 14:00:54

标签: git apache

我一直在使用Redhat上的apache设置Git很多天。

  • Apache版本:erver版本:Apache / 2.4.6(Red Hat Enterprise Linux)的
  • Git版本1.8.3.1
  • 红帽企业Linux服务器版本7.1 Beta
  • 在apache下配置Git:
<VirtualHost *:80>
        SetEnv GIT_PROJECT_ROOT /var/www/git
        SetEnv GIT_HTTP_EXPORT_ALL
        ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

<Directory "/usr/libexec/git-core*">
   Options ExecCGI Indexes
   Order allow,deny
   Allow from all
   Require all granted
</Directory>

<LocationMatch "^/git/.*/git-receive-pack$">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /var/www/passwd.git
    Require valid-user
</LocationMatch>
</VirtualHost>
  • 在我做过的服务器网站上
mkdir  /var/www/test1
cd /var/www/git/test1

# init repo
git init --bare
touch git-daemon-export-ok
cp hooks/post-update.sample hooks/post-update
git config http.receivepack true
git config core.sharedRepository group
git update-server-info

chown -R apache:apache .
chmod -R 775 .
  • 和服务器上的Git配置文件如下
[core]
        repositoryformatversion = 0
        filemode = true
        bare = true
        sharedRepository = group
[http]
        receivepack = true

将裸服务存储库/ var / www / git / test1克隆为

之后
  

git clone http://192.168.26.129/git/test1

当我从客户端推送任何更改时,我仍然会收到错误

$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 202 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
Username for 'http://192.168.26.129': briangit
remote: error: insufficient permission for adding an object to repository database ./objects
remote: fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To http://192.168.26.129/git/test1
 ! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to 'http://192.168.26.129/git/test1'

我在网上进行了很多研究,并尽可能地尝试。 我真的不知道问题是什么。请帮忙。

2 个答案:

答案 0 :(得分:0)

我建议您检查文件权限。

检查ssh密钥的文件权限,可以使用chmod进行更改。 你改变了整个目录的权限,我同意Splash是一个坏主意。

如果你能记住该目录的原始权限是什么,我会尝试将它们重新设置为该目录,然后执行以下操作

cd ~/.ssh
chmod 700 id_rsa

chmod 400 ~/.ssh/id_rsa

chmod 777 ~/.ssh/id_rsa

CHMOD权限:

#   Permission  rwx
7   read, write and execute rwx
6   read and write  rw-
5   read and execute    r-x
4   read only   r--
3   write and execute   -wx
2   write only  -w-
1   execute only    --x
0   none    ---

哪里可以找到密钥?

支持.ssh文件夹。这将把id_rsa文件设置为仅为所有者(你)的rwx(读,写,执行),并为其他人设置为零访问。

如果最重要的是没有帮助,请尝试查看您的小组。将用户添加到组并尝试将分支推送到远程源/主服务器。

答案 1 :(得分:0)

注意:我没有在10年以上接触过Apache,所以请根据需要使用多少粒盐。但是,有一个明显的问题:

class MyClass {
  constructor(action) {
    this.action = action;
  }
  run(context, n) {
    this.action.call(context, n);
  }
}

let a = new MyClass(function(n) {
  this.log(n);
})

a.run(console, 1);

不要那样做(根本)。你不应该这样做。而不是:

chmod -R 755 .

使用一行序列:

git init --bare
git config core.sharedRepository group

(或只是git init --bare --shared=group ,这意味着同样的事情)。

我不清楚您何时以及为何要将--shared配置为http.receivepack,但请参阅Documentation/git-http-backend.txt