我正在尝试构建一个应用程序,该应用程序定期扫描各种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而失败,并出现相同的异常。
关于这个错误并不是很多,但到目前为止我看到的所有内容都导致了“你的存储库太大而文库无法处理”的答案。我使用的存储库是一个公平的企业存储库,但这些命令很快就在控制台中执行。我现在想知道我是否需要将我的控制台包装在一个处理程序中并执行checkout并直接通过CLI(yuck)。
有什么想法吗?
答案 0 :(得分:2)
为此道歉。 libgit2和LibGit2Sharp进行了一些更改,以处理内存使用情况,以及更好地处理内存映射,尤其是对于大型(或众多)打包文件。
您将在下一版本的LibGit2Sharp中看到这些改进。在此之前,从nuget.org安装预发行包应解决此问题。