【发布时间】:2016-05-04 00:28:24
【问题描述】:
我正在尝试构建一个应用程序,它会定期扫描各种 Git 分支上的提交历史记录,并报告作者和有关提交消息的各种详细信息。我已经开始为此使用LibGit2Sharp。访问提交本身非常好,但是我在尝试更新存储库时遇到了障碍。
每次我的任务运行时,我都需要从远程存储库中获取最新的更改。我的理解是我需要检查跟踪相关远程分支的本地分支,然后执行提取或拉取。我正在尝试在我的应用程序中执行以下操作:
// Get the branch
var localBranch = repo.Branches[localbranchName];
// Switch to this branch
if (!localBranch.IsCurrentRepositoryHead)
{
repo.Checkout(localBranch);
}
// Do a pull to get latest
var result = repo.Network.Pull(signature, new PullOptions());
但是,我在运行repo.Checkout(localBranch);时总是遇到以下异常
LibGit2Sharp.LibGit2SharpException: Failed to mmap. No data written: Not enough storage is available to process this command.
at LibGit2Sharp.Core.Ensure.HandleError(Int32 result) in c:\Git\libgit2sharp\LibGit2Sharp\Core\Ensure.cs:line 160
at LibGit2Sharp.Core.Ensure.ZeroResult(Int32 result) in c:\Git\libgit2sharp\LibGit2Sharp\Core\Ensure.cs:line 178
at LibGit2Sharp.Core.Proxy.git_checkout_tree(RepositorySafeHandle repo, ObjectId treeId, GitCheckoutOpts& opts) in c:\Git\libgit2sharp\LibGit2Sharp\Core\Proxy.cs:line 295
at LibGit2Sharp.Repository.CheckoutTree(Tree tree, IList`1 paths, IConvertableToGitCheckoutOpts opts)...
当我在 Git Bash 中手动签出该分支并运行我的程序(绕过对 checkout 命令的需要)时,它在调用 Pull 时失败并出现相同的异常。
关于这个错误的信息并不多,但到目前为止我所看到的一切都导致了“您的存储库太大而库无法处理”的程度。我使用的存储库是一个相当大的企业存储库,但是这些命令在控制台中执行得非常快。我现在想知道我是否需要将我的控制台包装在一个处理程序中并执行结帐并直接通过 CLI 拉 (yuck)。
有什么想法吗?
【问题讨论】:
-
什么版本的 LibGit2Sharp?
-
我正在使用来自 NuGet 的最新稳定版 (v 0.22.0)。本机二进制依赖包是v 1.0.129(兼容LibGit2Sharp 0.22.0的最高版本)
-
您可以试试 Nuget.org 上的最新预发布版本吗?
-
天哪,更新到预发布版本并使用新的
Commands.Pull()方法完全有效。另外,问题是:为什么这完全有效? :) 继续并回答。谢谢!
标签: c# git libgit2sharp