与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 chmod到.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文件夹,但我不知道为什么它没有成功。
答案 0 :(得分:3)
发现它是什么,并因此感觉像个笨蛋。
最初,在登台框中,git repo位于应用程序文件夹之外。为了使这项工作,我们在git配置中添加了一个选项
worktree = /path/to/app/folder
在某些时候,我们决定像往常一样将git repo移动到.git文件夹中的实际工作文件夹中。上面的选项仍然在配置中,即使它是正确的文件夹,它在那里的事实是阻止解包器工作的原因。一旦我从配置中取出该选项,它就会立即起作用。卫生署。