两次git
(2.8.3)在Cygwin上停止为我工作。上次我修复了完整的Cygwin(Windows 10上的x86_64),但由于现在再次发生(可能是在更新了Cygwin(2.5.2)和Windows之后)我想要一些帮助来挖掘更深。
StackOverflow和失败的unpack-objects
和index-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邮件列表上问过。)
答案 0 :(得分:0)
这主要是后人的文件; - )
当然,这是用户错误。
我决定在我的64位上并行安装32位Cygwin。所以我在/ cygwin64下安装了一个新的64,在/ cygwin32下安装了32位。这让我在我的C:驱动器上有三个“cygwins”,/cygwin64
,/cygwin32
和原来的/cygwin
。我不知道为什么,但
/cygwin
下的安装已损坏所以,每当我使用那条捷径时,看起来Git都被打破了。我不清楚为什么Git在死亡时不能提供任何更有用的输出,不过......或者为什么它......
但是运行一致的版本会使一切按预期工作, - )