git rev-list 无限挂起

5

如果我使用git clone,它就能正常工作。

但是,如果之后我尝试使用git pull,它会卡住(有时候可以正常工作):

Git客户端版本:2.6.3

Git服务器版本:2.1.4

输出:

$ GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull 10:20:56.507549 git.c:348 trace: built-in: git 'pull' 10:20:56.508283 run-command.c:343 trace: run_command: 'fetch' '--update-head-ok' 10:20:56.508877 exec_cmd.c:128 trace: exec: 'git' 'fetch' '--update-head-ok' 10:20:56.511135 git.c:348 trace: built-in: git 'fetch' '--update-head-ok' 10:20:56.520316 run-command.c:343 trace: run_command: 'ssh' 'git@server' 'git-upload-pack '\''/vol/git/repos/repo.git'\''' 10:20:58.384437 run-command.c:343 trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet'

1个回答

1
五年后(2020年第四季度的Git 2.29版本)情况可能会得到改善,我们将使用更多缓冲I/O,而不是调用许多小的write(2)函数。

查看 提交 a698d67, 提交 6af3b00, 提交 24b75fa (2020年8月12日) 由 René Scharfe (rscharfe) 提交。
(由 Junio C Hamano -- gitster -- 合并于 提交 d8488b9, 2020年8月24日)

upload-pack: 使用缓冲 I/O 与 rev-list 进行通信

协助者:Chris Torek
协助者:Johannes Sixt

类似于f0bca72dc77(“send-pack: use buffered I/O to talk to pack-objects”,2016年6月8日,Git v2.10.0-rc0 - mergebatch #3中列出),通过使用stdio缓冲区显着减少系统调用的数量并简化将对象ID发送到rev-list的代码。 要立即处理错误以获取正确的错误代码,并在关闭流之前明确刷新缓冲区,以便捕获这些最后字节的任何写入错误。

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