2011-11-02 308 views
4

我见过几个similarquestions这个,但一直没有能够解决我的问题,所以我再次问。Git推“错误:索引包死于信号9”

我添加了一个新文件的负载到现有的启用git的项目,并试图推动它们。当我这样做的推动下,其压缩它们,然后把它们写入,那么当它到达%100失败了这个错误:

error: index-pack died of signal 9 332.28 MiB | 5712 KiB/s 
error: pack-objects died with strange error 
error: failed to push some refs to  '<username>@<my repo location' 

事情到目前为止,我曾尝试:

  1. 去以回购并确保一切是可写的,就像建议here

  2. 设置在.gitattributes上的一些文件类型的binary -delta选项

  3. 将某些文件夹移出(以及git提交删除),以便稍后逐个添加它们。

我有点出类拔萃......//有什么建议吗?感谢您的任何建议 - 最大

编辑 - 我已经发现,这是由于Dreamhost杀死推动由于过度的内存消耗(我做了这个通过复制我的应用程序文件夹到Dreamhost的回购服务器,并进行推从那里)。

我已经found一些pages, - 在git中讨论NO_MMAP=1选项有助于防止这种情况,但他们在安装git时对它进行了讨论。我可以在现有的git安装中设置此选项吗?它是git-inited应用程序配置的一部分,它正在进行推送,还是它是配置回购的一部分?

编辑2 - 按照上述页面上的说明,我下载并创建了自己的本地git二进制文件,并设置了NO_MMAP = 1选项。

我确定这些是在我的路径中的dreamhost安装版本之前,以及“哪个git”显示我的本地版本,到目前为止这么好。但是,我得到完全相同的问题。

我是否需要使用我的回购库进行操作才能使NO_MMAP选项起作用,或者您认为还有其他问题?

+2

你保持你正在试图推到主机? Signal 9发送的信号有点强烈,您需要确定远程主机上的哪些用户正在将该信号发送到'index-pack'进程。在机器上检查'dmesg'或者'/ v​​ar/log'的内容可能会揭示出一些东西。 –

+0

服务器的操作系统是什么?你可以在Windows上使用procmon来查看文件系统上发生的事情等,或者找出在Linux或类似系统上使用strace/ltrace的方法? –

+0

@EmilSit - 作为一个实验,我只是将我的git应用程序文件夹复制到repo所在的同一台服务器上,并将其配置更改为指向本地repo文件夹,以便我的推送*仅在服务器上发生,不需要任何http请求。我明白了:'哎呀!其中一个进程(git,pid 7746)刚刚因资源过度使用而死亡。 有关详细信息,请联系DreamHost支持部门.'因为您可以看到它是一个共享的Dreamhost服务器(所以我的同事不拥有*它本身,但他至少拥有共享位)。 –

回答

3

Git对于某些操作有点内存密集,交易内存使用量以提高磁盘或网络性能。 (参见例如在此other SO question一些讨论)

在这种情况下,我认为你和你的同事们切实做好不同的成本权衡:你权衡使用一个专业管理的Git托管服务(如GitHubBitBucket)为感知财务节省或一些其他方便(可能部署?)。

我的建议是,如果您不熟悉您引用的wiki/blog-post中的各种建议,那么就转向GitHub或Bitbucket。 (我认为这些帖子提供了技术上精确的解决方案,FWIW。)Bitbucket提供免费的无限私人存储库,因此使用Dreamhost为您的Git托管没有真正的成本理由。

如果您需要某种部署解决方案来支持托管,您可以设计一些需要推送的东西,并自动将工作目录更新为Dreamhost进行托管,而不会产生托管Git存储库的全部成本(以及所有的历史)在Dreamhost上。

+0

谢谢埃米尔。你的回答(尤其是github,但“离开dreamhost”)几乎是我发现的。我通过将git repo临时移动到尝试进行推送的同一服务器(痛苦的屁股)中解决了这个问题,并且在客户支持电子邮件后,dreamhost实际上增加了我的内存限制,这很酷。但显然他们已经安装了一个新的procwatch守护进程,这首先是为此负责。 –

+0

感谢您的提示。我增加了虚拟机的内存并解决了问题。 – greg

1

如果您使用Dreamhost服务器来保留裸仓库,您可以在本地添加和提交,然后rsync您的.git目录到DH。完成后,进入服务器的[repository name] .git/config并将core.bare从false更改为true。

如果你想在服务器上安装工作树,不知道你会怎么做,但它还没有出现。

0

我有这个问题,但我的是由Capfile的问题引起的 - capistrano已更新,并且更改未反映在capfile中。

更新capfile固定的最新标准......

2

有时候,这是与企业的github以及由于负载的问题。我发现一个好方法是将克隆分成两个操作,这样可以减轻服务器的负载。

首先,做一个浅克隆:git clone --depth 1 myRepo.git

接下来进入克隆,并得到了历史的其余所有的人做一个完整克隆:cd myRepo && git fetch --unshallow

如果你有一个旧版本的git的这不支持--unshallow标志,那么你可以改为像git fetch --depth=1000000或其他适当的大数字。

一些更多的选择在这篇博客文章中讨论:https://blogs.atlassian.com/2014/05/handle-big-repositories-git/