Подтвердить что ты не робот

Git gc, используя избыточную память, не удается выполнить

Окончательное обновление и исправление. Решение здесь оказалось комбинацией двух вещей: использование Windows Git, а не Cygwin Git как Graham Borland и настройки 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; наиболее полное из qaru.site/info/95898/.... У моего .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 имеет дело с проблемой памяти просто отлично. Кажется, я буду возвращаться к этому так часто, когда мой репозиторий нуждается в аккуратном.

4b9b3361

Ответ 1

Возможно, вам больше повезло с использованием собственного клиента Windows, такого как msysGit, вместо того, чтобы пытаться сделать это внутри Cygwin.

Ответ 2

У меня была та же проблема, пробовал решения, упомянутые до сих пор, без успеха. Но мои проблемы с git gc начались после добавления больших файлов изображений в репо, поэтому я создал файл .gitattributes и отключил дельта-сжатие для этих больших файлов:

*.tga -delta
*.psd -delta

Это сработало.

Ответ 3

Некоторые другие параметры конфигурации, которые вы можете попробовать ограничить значениями, превышающими значения по умолчанию, включают в себя:

  • pack.packSizeLimit
  • core.packedGitWindowSize
  • core.packedGitLimit

... все из которых описаны в git config документации. Особенно важно проверить в каждом случае, какие единицы поняты, с которыми я ошибся в прошлом.

Ответ 4

Единственное, что помогает избежать этой ошибки на общем хостинге Linux, заключалось в том, чтобы добавить

  [pack]
    packSizeLimit = 64m
    threads = 1

to

.gitconfig

Наиболее важным было "threads = 1"

Ответ 5

Может ли временное добавление файла подкачки, большего, чем жизнь, и для нескольких чашек кофе в другом месте поможет?