Git Daemon挂起SO_KEEPALIVE

8

我在Windows上使用Git 2.9。当我使用git daemon创建演示Git培训时,遇到了SO_KEEPALIVE错误。

@Server
$ git daemon --base-path=. --enable=receive-pack --verbose
[18608] Ready to rumble
[18108] Connection from 127.0.0.1:61111
[18108] unable to set SO_KEEPALIVE on socket: No error
[18108] Extended attributes (16 bytes) exist <host=127.0.0.1>
[18108] Request receive-pack for '/hello-world.git'

@ACommitter
$ git push -u origin "john--01--create-app-saying-hello"

为什么会出现这种情况?

推送/获取操作是否针对正在运行的git-daemon实例起作用? 对我来说,这个错误看起来是无害的:SO_KEEPALIVE启用TCP级别的keepalive,但是在默认设置中,今天广泛使用的大多数操作系统都有一个疯狂长的超时时间(比如,两个小时)来发送keepalive数据包。 换句话说,此设置旨在使持久的空闲连接保持活动状态,而 Git 不是这种情况的用例,因为其获取/推送会话是短暂且流量密集的。 因此,我认为可以忽略此错误。 - kostix
1
哦,我在问题摘要中看到了“Hang”这个词。好的,如果它挂起来了,这可能是GfW中一个长期存在的bug,你可以尝试解决。嗯,我确信它从那时起已经被修复了,但也许真的没有。 - kostix
如果这并没有帮助到您,可以在GfW跟踪器上提出一个新的问题,并提供MCVE - kostix
@kostix,你救了我的一天 :) - sancho21
好的,从这个问题的底部评论(针对于Git for Windows的1.x系列中的msysGit)来看,我得出结论,这个bug的修复实际上是一个解决方法——就是我提出的那个。所以它对你有用吗? - kostix
2个回答

4

当运行以下命令时,问题并未得到解决:git daemon --export-all --base-path=$(pwd) --reuseaddr --enable=receive-pack $(pwd)使用的是 git 版本 2.12.2.windows.2。 - Filip Gajowniczek

1

除了@Daniel建议的技巧外,我还需要做这个:

git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1" 

为了解决相同的问题(从这里获取)。


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