2016-05-04 10 views
1

Ich versuche, eine Anwendung zu erstellen, die regelmäßig das Commit-Verlauf auf verschiedenen Git-Filialen und Berichte über die Autoren und verschiedene Details über die Commit-Nachrichten scannt. Ich habe begonnen, dafür LibGit2Sharp zu verwenden. Es war großartig, auf die Commits selbst zuzugreifen, aber ich habe einen Haken gefunden, als ich versuchte, das Repository zu aktualisieren.Git Checkout und ziehen durch Lib2GitSharp

Jedes Mal, wenn meine Aufgabe ausgeführt wird, muss ich die neuesten Änderungen aus dem Remote-Repository abrufen. Nach meinem Verständnis muss ich den lokalen Zweig auschecken, der den fraglichen Remote-Zweig verfolgt, und dann einen Abruf oder einen Pull durchführen. Ich versuche, dies in meiner app zu tun, wie folgt:

// 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()); 

Allerdings habe ich die folgende Ausnahme immer erhalten, wenn 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)... 

laufen Wenn ich manuell diesen Zweig in Git Bash Kasse und mein Programm laufen (Umgehen der Notwendigkeit für den Befehl zum Auschecken) scheitert es dann auf den Aufruf von Pull mit der gleichen Ausnahme.

Es gibt nicht viel über diesen Fehler da draußen, aber alles, was ich bisher gesehen habe, hat Antworten auf das Ausmaß von "Ihr Repository ist einfach zu groß für die Bibliothek zu handhaben." Das Repository, das ich verwende, ist ein Enterprise-Repository von angemessener Größe, aber diese Befehle werden in der Konsole ziemlich schnell ausgeführt. Ich frage mich jetzt, ob ich meine Konsole in einen Handler einpacken und den Checkout ausführen und direkt durch die CLI ziehen muss (yuck).

Irgendwelche Gedanken?

+0

Welche Version von LibGit2Sharp? –

+0

Ich verwende den neuesten stabilen von NuGet (v 0.22.0). Das Paket mit den nativen Binärdateien ist v 1.0.129 (die höchste Version, die mit LibGit2Sharp 0.22.0 kompatibel ist) – watkinsmatthewp

+0

Können Sie stattdessen die neueste Vorabversion auf Nuget.org ausprobieren? –

Antwort

2

Entschuldigung dafür. Es gab eine Reihe von Änderungen an libgit2 und LibGit2Sharp, um die Speicherauslastung zu verbessern und die Speicherzuordnung besser zu handhaben, insbesondere bei großen (oder zahlreichen) Packfiles.

Sie werden diese Verbesserungen in der nächsten Version von LibGit2Sharp sehen. Bis dahin sollte durch die Installation eines Vorabversionspakets von nuget.org dieses Problem behoben werden.