解包器错误Git从裸仓库推送到登台服务器

时间:2011-11-06 23:49:07

标签: git git-push

Git pull error: unable to create temporary sha1 filename

相关

大家好。我们的应用程序已经在一个git项目中,在一个不同的服务器上有一个裸仓库,现在已经有一段时间了。裸仓库有一个后接收钩子,它可以推送到我们的登台服务器,后者又有一个后接收挂钩,可以完成与部署相关的所有操作。它一切正常,但现在裸仓不能推送到登台服务器。它与post-receive进程本身无关,因为如果我将ssh放到裸存储库并从那里手动推送到登台服务器,我会得到同样的错误:

Counting objects: 11, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 1.74 KiB, done.
Total 7 (delta 5), reused 0 (delta 0)
error: unable to create temporary sha1 filename ./objects/51: No such file or directory

fatal: failed to write object
error: unpack failed: unpacker exited with error code
To ssh://deploy@our-staging-server.com/var/www/apps/e_learning_staging/www
 ! [remote rejected] develop -> develop (n/a (unpacker error))
error: failed to push some refs to 'ssh://deploy@our-staging-server.com/var/www/apps/e_learning_staging/www'

我可以去登台服务器并从那里拉回来,然后推送它。所以“从A拉到B”有效,但“从A推到B”却没有。

我见过很多人遇到类似的问题,并调查了以下问题:

1)不同的用户:因为对部署用户进行推送不是问题,部署用户是任何人在登台服务器上使用的唯一用户。

2)文件权限:我已经递归地将.git中的所有文件chded to deploy:deploy(我们使用的用户和组)并以递归方式将u + w,g + w c​​hmod到.git中的所有文件

3)git-fsck,git-gc。我已经在repo和登台服务器上完成了这些。

4)新文件权限:在登台服务器上执行'umask'会得到0022,这相当于u=rwx,g=rx,o=rx所以应该没问题。万一我将其更改为0002,现在让小组做任何事情以及用户做任何事情,没有任何区别。

5)在登台服务器上的.git / config中设置sharedRepository = true。我这样做是为了从裸露的回购中推出它可能是必要的。没有任何区别(无论如何都没有设置它,所以我再次把它拿出来。

6)git-repack:我尝试了重新包装,但被告知没有任何东西要打包。

7)登台服务器上有git reset --hard。没有帮助。

8)没有磁盘空间不足。

我觉得我已经研究了这一切,并尝试了一切,它正在帮助我。任何人都可以提出我可以尝试的其他建议吗?

编辑 - 我尝试将repo克隆到登台服务器上的新文件夹中,并将裸repo的git config更改为指向“staging_server”远程定义中的新文件夹。然后我从本地机器推送到裸仓库,然后尝试从仓库推送到登台服务器,并遇到同样的问题:

error: unable to create temporary sha1 filename ./objects/26: No such file or directory

登台服务器上的.git文件夹中没有objects / 26文件夹,但我不知道为什么它没有成功。

1 个答案:

答案 0 :(得分:3)

发现它是什么,并因此感觉像个笨蛋。

最初,在登台框中,git repo位于应用程序文件夹之外。为了使这项工作,我们在git配置中添加了一个选项

worktree = /path/to/app/folder

在某些时候,我们决定像往常一样将git repo移动到.git文件夹中的实际工作文件夹中。上面的选项仍然在配置中,即使它是正确的文件夹,它在那里的事实是阻止解包器工作的原因。一旦我从配置中取出该选项,它就会立即起作用。卫生署。