Git gc использует слишком много памяти, невозможно завершить

Окончательное обновление и исправление : Решение здесь оказалось комбинацией двух вещей: использование Windows Git, а не Cygwin Git, как предложил Грэм Борланд и параметры конфигурации Git pack.threads = 1 и gc.aggressiveWindow = 150 .

У меня есть большой локальный репозиторий Git, git svn clone репозитория SVN с примерно 40 000 коммитов. Я пытаюсь запустить git gc в этом репозитории, но ничего не добился:

$ git gc --auto
Auto packing the repository for optimum performance. You may also
run "git gc" manually. See "git help gc" for more information.
Counting objects: 25966, done.
Compressing objects: 100% (25249/25249), done.
fatal: Out of memory, malloc failed (tried to allocate 426523986 bytes)
error: failed to run repack

Я запускаю Git 1.7.5.1 внутри Cygwin на 64-битной двухъядерной машине Win7 с 4 ГБ ОЗУ. Каталог .git в настоящее время чуть больше 6,1 ГБ.

Я пробовал запустить git gc --aggressive , чтобы посмотреть, может ли более полная система исправить это, но безуспешно: я получаю сообщение, подобное приведенному выше, с тем же размером попытался malloc , но значительно большее количество объектов (508 485 подсчитано, 493 506 сжатых).

Я также пробовал - как было предложено Google - разложить тиддлы в части [pack] моего файла .gitconfig ; наиболее полное из другого вопроса StackOverflow . Мой .gitconfig теперь содержит следующие соответствующие строки, но установка их, похоже, не имеет никакого значения:

[pack]
        windowMemory = 16m
        threads = 1
        window = 1
        depth = 1
        deltaCacheSize = 1

Какие-либо предложения о том, как я могу получить git в gc мой репозиторий?

Правка : Марк Лонгэр предложил еще несколько изменений в файле .gitconfig . Что я сделал, новые строки ниже. Но изменения не имели никакого значения.

[core]
        packedGitWindowSize = 1m
        packedGitLimit = 256m
[pack]
        packSizeLimit = 128m

Правка 2 : Майкл Крелин предложил увеличить размер файла подкачки / страницы (инструкции WinXP здесь , аналогично для Win7). Я пробовал это, но это не имело никакого значения, и на самом деле я увеличил только максимально доступный размер, и похоже, что Windows никогда не пыталась увеличить размер используемого файла подкачки.

Теперь я смотрю, было ли это вызвано ограничением памяти внутри или наложенным на Cygwin. Чтобы проверить "навязано", я пытаюсь запустить Cygwin с правами администратора. Чтобы проверить «внутри» (что выглядит более вероятным), я играю с максимальными настройками памяти Cygwin .

Редактировать 3 : Хотя я предпочитаю использовать Cygwin, оказывается, что клиент Windows Git отлично справляется с проблемой памяти. Кажется, я буду возвращаться к этому время от времени, когда мой репозиторий будет нуждаться в чистоте.

35
задан Community 23 May 2017 в 11:54
поделиться