git push错误:pack-objects异常终止

5

我已经成功地将代码推送到这个仓库一段时间了,但突然出现了以下错误,请问有什么原因吗?

Ishaqs-Mac:source ishaq$ git push
Counting objects: 68, done.
Delta compression using 2 threads.
Compressing objects: 100% (50/50), done.
Connection to SERVER closed by remote host.
error: pack-objects died with strange error
error: failed to push some refs to 'SERVER:PROJECT.git'

感谢您的时间和帮助。
感谢您抽出时间来提供帮助。

我使用的是Mac OS X 10.5 Leopard,Git版本为1.6.2,我的repo中最大的文件位于.git/objects/pack目录下。-r--r--r-- 1 ishaq staff 8.1M Apr 5 18:20 pack-7feb0b56fcf48eb328f0d4f1a734064d15f9051c.pack - user83950
3个回答

4

需要检查的几个问题:

  • 推送端磁盘空间问题(例如在 $GIT_DIR 或 $TMP_DIR 中出现“磁盘空间不足”)

  • 权限问题(进程是在哪个帐户下执行的?)

  • 特定于平台的问题:在 Mac OS 上,您可能会遇到MacPort 配置问题

  • 推送端和远程站点上的 git 版本差异(例如,如果您尝试将子模块推送到远程对等方,并使用不了解子模块的 git 二进制文件,则可能会遇到一些问题)

注意:由于这是与 pack_object() 函数相关联的错误消息,因此请检查 git pack 是否仍然可用。

static void pack_objects(int fd, struct ref *refs)
{
    for (;;) {
        int status, code;
        pid_t waiting = waitpid(pid, &status, 0);
        if (waiting < 0) {
            if (errno == EINTR)
                continue;
            return error("waitpid failed (%s)", strerror(errno));
        }
        if ((waiting != pid) || WIFSIGNALED(status) ||
            !WIFEXITED(status))
            return error("pack-objects died with strange error");
        code = WEXITSTATUS(status);
        if (code)
            return -code;
        return 0;
    }
}

注:最近出现了一些此错误消息的情况,当您推送到GitHub时(2009年1月底)(点击此处查看)


感谢您的来信,
  • 我已通过安装程序(而非Mac端口)安装了git,我仍可能遇到这个MacPorts特定的问题吗?
  • 该存储库具有与其他存储库相同的权限
  • 服务器使用1.5.4版本,但如果这是问题,那么之前就应该有了
  • git repack可以正常工作
- user83950
我刚刚将repo克隆到另一个位置,并尝试推送,它可以正常工作。不知道现有副本出了什么问题,因为它有7,8个本地提交,所以我不能丢弃它 :( - user83950

4

很不幸,错误信息并不是很有帮助。但是你的问题并不是来自Git pack;第一个错误信息来自OpenSSH,它能够连接到远程服务器但无法登录:

Connection to SERVER closed by remote host.

这不是密码问题(密码问题会有另外的错误信息),而可能是权限问题(比如一个没有适当权限的组,在OSX上我偶尔会遇到)或未被识别的帐户名(在一些系统中,这个问题会报告为密码问题)或超时。您可以尝试从命令行登录:

$ ssh username@servername

为了发现您遇到的问题类型,您可以尝试修复权限;OS X似乎特别容易出现重复的权限问题,并从奇怪的组中运行。

顺便提一下--由于您使用的是Leopard系统,我建议您安装SSHKeychain,它可以管理SSH身份验证,并会自动将您的SSH密码短语存储在系统钥匙串中。虽然它无法解决当前的问题,但可能会防止类似的问题在未来出现。


嗨保罗,我已经安装了钥匙链,并且可以通过我的密钥登录到服务器上 :-)我已经克隆到了一个不同的位置,并且可以从那里推送。尝试在该位置创建和应用补丁,但是没有成功,出现了尾随空白错误。今天我从办公室推送了它。 - user83950
有趣。我不明白那是怎么导致这些错误信息的,但正如我所说,这些错误信息并没有太大帮助。恭喜你解决了问题。 - Paul

-1

如果你正在使用像gerrit这样的代码审查工具,并且在尝试推送代码时遇到此问题,那么可能是因为Java程序通常非常擅长内存管理。在你绝望地找不到任何可以帮助你的人之前,你决定杀死gerrit并重新启动它。然后,噼里啪啦,你的问题就解决了...直到几天后,你需要再次重启gerrit来解决同样的问题。

Java太棒了。


不,就像我说的,唯一困扰我的事情是当我从家以外的任何地方(办公室、咖啡店等)推送时,它都能正常工作。但在家里却无法工作。我没有使用Java。 - user83950

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接