首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >克隆Git存储库抛出ArithmeticException

克隆Git存储库抛出ArithmeticException
EN

Stack Overflow用户
提问于 2014-01-02 22:28:31
回答 1查看 365关注 0票数 2

我们正在使用来托管一些内部Git repos。当尝试检出一个存储库时,我们将返回以下错误:

RPC失败;result=22,HTTP = 500 致命:远程终端意外挂起。

在Windows事件查看器中,它记录以下消息:

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
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的命令参数是:

上传-包--无状态-rpc D:\PathToRepos\MyRepo

如果我从命令提示符中使用克隆命令运行git.exe,则项目将正确地克隆(并警告templates not found)。

我认为这是C#和git之间的数据类型问题,git正在流到Response.OutputStream

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-17 21:57:06

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

代码语言:javascript
复制
Response.Buffer = false;

while ((read = process.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length)) > 0)
{
    Response.OutputStream.Write(buffer, 0, read);
    Response.OutputStream.Flush();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20893126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档