gpt4 book ai didi

c# - 克隆 Git 存储库抛出 ArithmeticException

转载 作者:太空宇宙 更新时间:2023-11-03 10:52:35 25 4
gpt4 key购买 nike

我们正在利用 Bonobo Git 服务器托管一些内部 git 存储库。当尝试检查我们的一个存储库时,我们收到此错误:

RPC Failed; result=22, HTTP code = 500

fatal: The remote end hung up unexpectedly

在 Windows 事件查看器中它会记录此消息:

Exception information: 
Exception type: ArithmeticException
Exception message: Overflow or underflow in the arithmetic operation.
Request information:
Request URL: http://localhost:50287/MyRepo.git/git-upload-pack
Request path: /MyRepo.git/git-upload-pack

如果我在本地调试 Bonobo,在 C# 中不会抛出异常;它来自 git 进程的外流。该代码使用 Process 来运行 git.exe,如下所示:

using (var process = System.Diagnostics.Process.Start(info))
{
inStream.CopyTo(process.StandardInput.BaseStream);
process.StandardInput.Write('\0');
process.StandardOutput.BaseStream.CopyTo(outStream);

process.WaitForExit();
}

传递给 git 的命令参数是:

upload-pack --stateless-rpc D:\PathToRepos\MyRepo

如果我在命令提示符下使用克隆命令运行 git.exe,项目会正确克隆(并出现 templates not found 警告)

我认为这是 C# 和 git 流式传输到 Response.OutputStream 之间的数据类型问题。

最佳答案

问题是由于响应缓冲了输出。它会尝试在发送之前将整个流缓冲到内存中,对于大型存储库,这会导致 ArithmeticException。由于 Response.Buffer 默认为 true,因此必须在发送数据之前将其显式设置为 false。数据显然也必须以 block 的形式读取和流式传输。

Response.Buffer = false;

while ((read = process.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length)) > 0)
{
Response.OutputStream.Write(buffer, 0, read);
Response.OutputStream.Flush();
}

关于c# - 克隆 Git 存储库抛出 ArithmeticException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20893126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com