2016-05-04 27 views
1

私は、作者のさまざまなGitブランチとレポートのコミット履歴とコミットメッセージのさまざまな詳細を定期的にスキャンするアプリケーションを構築しようとしています。私はこのためにLibGit2Sharpを使い始めました。コミット自体にアクセスするのは素晴らしいことですが、リポジトリを更新しようとするときに悩まされました。Git Checkoutと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()); 

私は手動でのGit Bashの中でそのブランチをチェックアウトし、私のプログラムを実行すると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)... 

を実行しているとき、私はいつも次の例外を取得し、次のように私は私のアプリでこれを行うにしようとしています(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からインストールするとこの問題が解決するはずです。

関連する問題