Расширения Git: Win32 ошибка 487: не удалось зарезервировать место для кучи cygwin, Win32 Ошибка 0

Расширения Git: до вчерашнего дня все работало нормально.

, но вдруг я получаю эту ошибку, когда я пытаюсь вытащить некоторые репозитории с помощью git extensions

C:Program FilesGitbingit.exe pull --progress "origin" 
Done
    0 [main] us 0 init_cheap: VirtualAlloc pointer is null, Win32 error 487
AllocationBase 0x0, BaseAddress 0x68560000, RegionSize 0x390000, State 0x10000
C:Program FilesGitbinsh.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 0

это происходит для всех репозиториев, которые я клонируются. Но, мой ГИТ Баш работает нормально. Я понятия не имею, что происходит. Есть идеи, почему это происходит?

14 ответов


в Cygwin использует постоянные разделы общей памяти, которые могут быть повреждены. Симптомом этого является то, что некоторые программы начинают глючить под Cygwin, но другие приложения не затрагиваются. Поскольку эти разделы общей памяти являются постоянными, часто перезагрузить систему необходимо очистить их, прежде чем проблема может быть решена.


у меня была та же проблема. Я нашел решение здесь http://jakob.engbloms.se/archives/1403

c:\msysgit\bin>rebase.exe -b 0x50000000 msys-1.0.dll

для меня решение было немного другим. Это было

C:\Program Files (x86)\Git\bin>rebase.exe -b 0x50000000 msys-1.0.dll

прежде чем перебазировать DLL, вы должны убедиться, что он не используется:

tasklist /m msys-1.0.dll

и сделать резервную копию:

copy msys-1.0.dll msys-1.0.dll.bak

если команда rebase терпит неудачу с чем-то вроде:

ReBaseImage (msys-1.0.dll) не удалось с последней ошибкой = 6

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

  1. скопируйте dll в другой каталог
  2. Перебазируйте копию, используя команды выше
  3. замените оригинальную dll на копию.

если какая-либо проблема запускает команды как администратор


tl; dr: установить 64-разрядный Git для Windows 2.


технические детали

      0 [main] us 0 init_cheap: VirtualAlloc pointer is null, Win32 error 487
AllocationBase 0x0, BaseAddress 0x68570000, RegionSize 0x2A0000, State 0x10000
PortableGit\bin\bash.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 0

этот симптом сам по себе не имеет ничего общего с базами изображений исполняемых файлов, поврежденными разделами общей памяти Cygwin, конфликтующими версиями DLL и т. д.

это код Cygwin, который не может выделить большой кусок памяти ~5 Мб для своей кучи по этому фиксированному адресу 0x68570000, в то время как там было доступно только отверстие ~2.5 Мб. Этот соответствующий код можно увидеть в msysgit source.


почему эта часть адресного пространства не свободна?

причин может быть много. В моем случае это были некоторые другие модули, загруженные по конфликтующему адресу:

Process modules in Process explorer

Последний адрес будет около 0x68570000 + 5 MB = 0x68C50000, но есть эти связанные с WoW64 библиотеки DLL, загруженные из 0x68810000 вверх, которые блокируют распределение.

всякий раз, когда есть какая-то общая DLL, Windows в целом пытается загрузить его на тот же виртуальный адрес во всех процессах, чтобы сохранить некоторую обработку перемещения. Это просто вопрос невезения, что эти системные компоненты каким-то образом загружены по конфликтующему адресу в этот раз.


почему в вашем Git есть Cygwin?

потому что Git-это богатый набор, состоящий из некоторых команд низкого уровня и множества полезных утилит, и в основном разработан на Unix-подобных системах. Чтобы его можно было построить и запустить без массивного перезаписи, ему нужна хотя бы частичная Unix-подобная среда.

для этого люди изобрели MinGW и MSYS-минимальный набор инструментов сборки для разработки программ на Windows в Unix-подобной манере. MSYS также содержит общую библиотеку, this msys-1.0.dll, который помогает решить некоторые проблемы совместимости между двумя платформами во время выполнения. И многие части этого были взято у Cygwin, потому что кто-то уже должен был решить те же проблемы там.

так что это не Cygwin, это DLL времени выполнения MinGW, что ведет себя странно здесь.

в Cygwin этот код на самом деле сильно изменился с тех пор, как в MSYS 1.0 - последнее сообщение фиксации для этот файл говорит "импорт Cygwin 1.3.4", который с 2001 года!

и текущий Cygwin и новая версия MSYS - MSYS2 - уже есть другая логика, которая, надеюсь, более надежный. Это только старые версии Git для Windows, которые все еще были построены с использованием старой сломанной системы MSYS.


очистить решений:

  • установить Git для Windows 2 - он построен с новым,правильно поддерживается MSYS2 а также имеет много новых функций, множество исправлений ошибок, улучшений безопасности и так далее. Если это вообще возможно, рекомендуется также использовать 64-разрядная версия. Но ... --67-->rebase обходной путь выполняется автоматически за кулисами для 32-битных систем, поэтому вероятность возникновения проблемы должна быть ниже.
  • просто перезагрузка компьютера для очистки адресного пространства (загрузка этих модулей по другому случайному адресу) может работать, но на самом деле просто обновите Git для Windows 2, чтобы получить исправления безопасности, если ничего другого.

Hacky решения:

  • изменение PATH иногда может работать, потому что там могут быть разные версии msys-1.0.dll в разных версиях Git или других приложений на основе MSYS, которые, возможно, используют другой адрес, другой размер этой кучи и т. д.
  • Rebasing msys-1.0.dll может быть пустой тратой времени, потому что 1) будучи DLL, он уже имеет информацию о перемещении и 2) "в любой версии ОС Windows нет никакой гарантии, что a (...) DLL всегда будет загружаться по одному адресу пространство" в любом случае (источник). Единственный способ это может помочь, если msys-1.0.dll сам загружается по конфликтующему адресу, который он затем пытается использовать. По-видимому, это бывает иногда, так как это то, что Git для Windows ребята делают автоматически на 32-разрядных систем.
  • учитывая выводы выше, я первоначально двоичный исправил msys-1.0.dll binary использовать другое значение для _cygheap_start и это сразу решило проблему.

очень простая версия решения rebase:

перейдите в папку, в которой установлен git, например:

C:\Program Files (x86)\Git\bin

удерживая shift и щелкнув правой кнопкой мыши в папке, вы сможете открыть командную строку как администратор оттуда (благодаряhttps://stackoverflow.com/users/355389/darren-lewis для этого комментария),

запустите:

rebase.exe -b 0x50000000 msys-1.0.dll

это исправило это для меня, когда подход перезапуска не работа.

надеюсь, что это помогает.


Я видел то же сообщение об ошибке после обновления до git1.8.5.2:

просто сделайте поиск для всех msys-1.0.dll на C:\ диск, и сделать тот, который используется Git, на первом месте.

например, в моем случае я просто изменил порядок:

C:\prgs\Gow\Gow-0.7.0\bin\msys-1.0.dll
C:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\msys-1.0.dll

, сделав путь Git C:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\ первое место в моей %PATH%, сообщение об ошибке исчезло.

нет необходимости перезагружать или даже изменять сеанс DOS.
После того, как %PATH% обновляется в этот сеанс DOS, команды git просто работают.


отметим, что carmbrester и Сиксто Саес оба отчета ниже (в комментариях), имеющие перезагрузка для того чтобы исправить эту проблему.
Примечание: во-первых, также удаление любого msys-1.0.dll, как в %LOCALAPPDATA%


если перезагрузка не исправляет проблему(как предложено ответом Грега Хегвилла), то проверьте свой путь для конфликтующей установки (ов) msys-1.0.dll (и, возможно, другие связанные DLL).

в моей конкретной ситуации установка MinGW msys имеет копию этой DLL в своем (<MinGW_Install_Path>\msys.0\bin), и он был указан в пути. В Git cmd каталог был указан в пути, но его bin не было. (Версия msys-1.0 Git.dll находится в bin справочник. По-видимому, установка MSys-Git по умолчанию не добавляет его bin к пути.)

временное решение, чтобы добавить в Git bin каталог к пути, так что он появляется перед путями MinGW. (Более постоянное исправление, вероятно, будет включать сортировку конфликтов путей между msys MinGW и Git и / или удаление дубликатов установок msys.)


просто хочу поделиться своим опытом здесь. Я столкнулся с той же проблемой при кросс-компиляции для платформы MTK на 64-разрядной машине Windows. MinGW и MSYS участвуют в процессе строительства, и эта проблема возникла. Я решил это, изменив . Ни rebase.exe ни перезагрузка системы не работала для меня.

так как нет перебазироваться.exe установлен на моем компьютере. Я установил cygwin64 и использовал rebase.exe внутри:

C:\cygwin64\bin\rebase.exe -b 0x50000000 msys-1.0.dll

хотя перебазирование выглядело успешно, ошибка осталась. Тогда я побежал!--5--> команда внутри терминала Cygwin64 и получила сообщение об ошибке:

$ rebase -b 0x50000000 msys-1.0.dll
rebase: Invalid Baseaddress 0x50000000, must be > 0x200000000

позже я попробовал пару адресов, но ни один из них не работал. Так что я в конечном итоге изменил и это решило проблему.


Я столкнулся с этим сегодня. Во главе с ответом Грега Хьюгилла я посмотрел на запущенные процессы в моей системе, чтобы увидеть, было ли что-то "застряло" или другие пользователи вошли в машину, делая что-либо с git. Затем я запустил cygwin (установленный отдельно) на этой конкретной машине. Он запустил ok. Я закрыл его, а затем снова попробовал расширения Git (я пытался вытащить операцию), и это сработало. Не уверен, что запуск cygwin очистил что-то, что было общим, но это первый раз, когда я столкнулся с этой ошибкой и это, казалось, исправить это для меня.


У меня была та же проблема, после некоторого сбоя Windows 8.0 и обновления, на msys git 1.9. Я не нашел msys/git на своем пути, поэтому я просто добавил его в настройки среды локального пользователя windows. Он работал без перезапуска.

в принципе, похож на RobertB, но у меня не было любой git / msys на моем пути.

Btw:

  1. Я попытался использовать rebase-b blablabla msys.dll, но имела ошибку " ReBaseImage (msys-1.0.dll) не удалось с последней ошибкой = 6"

  2. Если вам это нужно быстро и нет времени на отладку, я заметил "Git Bash.vbs " в каталоге Git успешно запускает оболочку bash.


эта ошибка бывает очень редко на моей машине Windows. Я закончил перезагрузку машины, и ошибка исчезла.


Я столкнулся с этой проблемой в здании LPCEXpresso.если у вас есть C:\MinGW\bin на тропинке. как-то мне пришлось удалить его, чтобы избавиться от этой проблемы, так как некоторые другие MinGW, как на основе тоже


чтобы исправить эту проблему, я просто позволил Tortoise Git установить его обновление.


c:\msysgit\bin > rebase.exe-b 0x50000000 msys-1.0.dll файлы


удаление старой версии %USERPROFILE%\AppData\Local\SourceTree\app-x.X. Икс работал на меня. Не уверен, как он был подключен к командной строке git...