在Cygwin上使用index-pack或unpack-objects停止git失败

时间:2016-07-17 08:53:37

标签: git cygwin

两次git(2.8.3)在Cygwin上停止为我工作。上次我修复了完整的Cygwin(Windows 10上的x86_64),但由于现在再次发生(可能是在更新了Cygwin(2.5.2)和Windows之后)我想要一些帮助来挖掘更深。

StackOverflow和失败的unpack-objectsindex-pack周围的其他地方有很多问题,但大多数问题似乎与大型回购,低磁盘,内存或片状网络有关。我认为这两个都不适用(1.2TB无盘,8GB内存,在同一台机器上使用原生git成功进行git操作......)

短篇小说: 在本地回购中,我可以git status表示没有问题,而且我已经提前并且应该推动。 git push说"先获取"和git fetch

remote: Counting objects: 37, done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 37 (delta 16), reused 0 (delta 0), pack-reused 0
fatal: unpack-objects failed

磁盘空间或内存或文件保护(AFAICS)没有问题。遥控器在github上,我可以成功ssh -vT,所以ssh也没问题。

$ git gc
error: failed to run pack-refs

表示它可能是一个损坏的仓库:

$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (6051/6051), done.
dangling blob 42.....

所以没问题,所以我尝试克隆一个新副本并获得

remote: Counting objects: 37, done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 37 (delta 16), reused 0 (delta 0), pack-reused 0
fatal: unpack-objects failed

我在Cygwin中尝试的其他所有内容(如编译,运行大多数常用命令,CD等等)都可以正常工作。那么任何想法接下来要尝试什么?

长篇故事(包含更多详情和日志): 我可以使用

提供完整的日志(如对this question的评论所示)
GIT_TRACE=2
GIT_CURL_VERBOSE=2
GIT_TRACE_PERFORMANCE=2
GIT_TRACE_PACK_ACCESS=2
GIT_TRACE_PACKET=2
GIT_TRACE_PACKFILE=2
GIT_TRACE_SETUP=2
GIT_TRACE_SHALLOW=2
-v -v

来自上述所有命令。他们中的大多数都是这样结束的(git clone

10:39:13.934233 run-command.c:336       trace: run_command: 'fetch' '--update-head-ok' '-v' '-v'
10:39:13.938071 exec_cmd.c:120          trace: exec: 'git' 'fetch' '--update-head-ok' '-v' '-v'
10:39:13.951802 trace.c:420             performance: 0.058074148 s: git command: 'git' 'pull' '-v' '-v'

表示它尝试运行fetch,但随后退出("性能:"是所有情况下的最后一条跟踪消息,因为我们有GIT_TRACE_PERFORMANCE)。

最令人惊讶的可能是来自git fetch --update-head-ok的跟踪(这是git在许多情况下尝试做的事情。该跟踪会继续使用同步哈希值,但随后

09:14:48.260420 pkt-line.c:80           packet:     sideband< \2Compressing objects: 100% (37/37)   \15
09:14:48.260449 pkt-line.c:80           packet:     sideband< \2Compressing objects: 100% (37/37), done.
remote: Compressing objects: 100% (37/37), done.
PACK%▒x▒▒▒An▒ ▒~▒=▒d3▒1C▒▒▒

最后一行是某些东西的开头,看起来像二进制文件的转储,然后以

结束
09:14:48.379400 pkt-line.c:80      37 (delta 16), reused 0 (delta 0), pack-reused 0
remote: Total 37 (delta 16), reused 0 (delta 0), pack-reused 0
09:14:48.387949 pkt-line.c:80           packet:     sideband< 0000
09:14:48.387950 exec_cmd.c:120          trace: exec: 'git' 'unpack-objects' '--pack_header=2,37'
fatal: unpack-objects failed
09:14:48.406747 trace.c:420             performance: 2.140411798 s: git command: 'git' 'fetch' '--update-head-ok' '-v'

我的下一步应该是什么? (是的,我也在cygwin邮件列表上问过。)

1 个答案:

答案 0 :(得分:0)

这主要是后人的文件; - )

当然,这是用户错误。

我决定在我的64位上并行安装32位Cygwin。所以我在/ cygwin64下安装了一个新的64,在/ cygwin32下安装了32位。这让我在我的C:驱动器上有三个“cygwins”,/cygwin64/cygwin32和原来的/cygwin。我不知道为什么,但

  1. /cygwin下的安装已损坏
  2. 我还有一些指向它的桌面快捷方式
  3. 所以,每当我使用那条捷径时,看起来Git都被打破了。我不清楚为什么Git在死亡时不能提供任何更有用的输出,不过......或者为什么它......

    但是运行一致的版本会使一切按预期工作, - )