2016-05-04 2 views
1

Я пытаюсь создать приложение, которое периодически сканирует историю фиксации в различных ветвях Git и отчеты об авторах и различные подробности о сообщениях фиксации. Для этого я начал использовать LibGit2Sharp. Он отлично подходит для доступа к самим коммитам, но при попытке обновить репозиторий я столкнулся с проблемой.Git Checkout and Pull via 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 и запустить мою программу (минуя необходимость в команде проверки), он затем не выполняет вызов Pull с тем же исключением.

Здесь не так много об этой ошибке, но все, что я видел до сих пор, привело к ответам в объеме «Ваш репозиторий слишком велик для обработки библиотеки». Репозиторий, который я использую, представляет собой репозиторий корпоративного размера, но эти команды выполняются в консоли довольно быстро. Теперь мне интересно, нужно ли мне обернуть консоль в обработчик и выполнить проверку и вытащить непосредственно через CLI (yuck).

Любые мысли?

+0

Какая версия LibGit2Sharp? –

+0

Я использую последнюю стабильную версию от NuGet (v 0.22.0). Пакет зависимых двоичных файлов равен 1.0.129 (самая высокая версия, совместимая с LibGit2Sharp 0.22.0) – watkinsmatthewp

+0

Вместо этого вы можете попробовать последнюю предварительную версию на Nuget.org? –

ответ

2

Извинения за это. Было несколько изменений в libgit2 и LibGit2Sharp для работы с использованием памяти и лучшей обработки карт памяти, особенно с большими (или многочисленными) packfiles.

Вы увидите эти улучшения в следующей версии LibGit2Sharp. До тех пор установка пакета предварительной оплаты от nuget.org должна решить эту проблему.