2016-05-04 44 views
1

我正在嘗試構建一個應用程序,它定期掃描各種Git分支上的提交歷史記錄,並報告作者和有關提交消息的各種詳細信息。我已經開始爲此使用LibGit2Sharp。它本身非常適合訪問提交,但在嘗試更新存儲庫時遇到了一些障礙。Git簽出並通過Lib2GitSharp提取

每次運行我的任務時,我都需要從遠程存儲庫獲取最新的更改。我的理解是我需要簽出追蹤有問題的遠程分支的本地分支,然後執行提取或拉取。我試圖做到這一點在我的應用程序如下:

// 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)。

有什麼想法?

+0

LibGit2Sharp的哪個版本? –

+0

我正在使用來自NuGet的最新穩定版(v 0.22.0)。本地二進制文件依賴包是v 1.0.129(與LibGit2Sharp 0.22.0兼容的最高版本) – watkinsmatthewp

+0

您可以嘗試Nuget.org上最新的預發佈嗎? –

回答

2

爲此道歉。對libgit2和LibGit2Sharp進行了少量更改,以處理內存使用情況,並更好地處理內存映射,特別是對於大型(或衆多)的包文件。

您將在下一個版本的LibGit2Sharp中看到這些改進。在此之前,從nuget.org安裝預發行包應該可以解決此問題。