尝试使用LibGit2Sharp v.0.18.1.0克隆远程存储库会抛出此异常:
LibGit2Sharp.LibGit2SharpException:mmap失败。句柄值无效:文件的卷已外部更改,因此打开的文件不再有效。
at LibGit2Sharp.Core.Ensure.HandleError(Int32 results) 在LibGit2Sharp.Core.Ensure.ZeroResult(Int32结果) at LibGit2Sharp.Core.Proxy.git_clone(String url,String workdir,GitCloneOptions& opts) at LibGit2Sharp.Repository.Clone(String sourceUrl,String workdirPath,CloneOptions options)
使用相同的url和workdir,我已经使用Git Bash和SourceTree成功克隆了存储库。但是对于我的任务,我需要以编程方式进行,而LibGit2Sharp似乎是一个不错的选择。
更新:错误发生了变化,现在我得到了大约20KB的远程存储库,然后出现了这个错误:
类型' System.AccessViolationException'的第一次机会异常。发生在LibGit2Sharp.dll
附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
更新2:AccessViolationException是由不同原因引起的(尝试使用emtpy字符串克隆为远程URL!)
答案 0 :(得分:0)
<强> TL; DR 强>
这是LibGit2Sharp v0.18.1的问题。这将在即将发布的v0.19中修复(请参阅PR #798 )。
更详细的信息
看起来Stash发送空数据包以在获取存储库时保持连接活动。因此,LibGit2Sharp v0.18.1中嵌入的libgit2版本试图映射零长度文件,从而导致错误。
它已在libgit2中同时修复,提交 libgit2/libgit2@bc8a08868 。
Pull Request已合并,问题已在现已发布的LibGit2Sharp v0.19中修复。这个问题不应再发生了。