Git Extensions: до вчерашнего дня все работало нормально.
Но вдруг я получаю эту ошибку, когда я пытаюсь вытащить некоторые репозитории, используя git extensions
C:\Program Files\Git\bin\git.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 Files\Git\bin\sh.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 0
Это происходит для всех репозиториев, которые я клонировал. Но мой git bash работает нормально. Я понятия не имею, что происходит. Есть идеи, почему это происходит?
git
cygwin
git-extensions
Учиа Итачи
источник
источник
Ответы:
Cygwin использует постоянные разделы с общей памятью, которые иногда могут быть повреждены. Симптом этого заключается в том, что некоторые программы Cygwin начинают давать сбой, но другие приложения остаются без изменений. Поскольку эти разделы общей памяти являются постоянными, часто требуется перезагрузка системы , чтобы очистить их, прежде чем проблема может быть решена.
источник
У меня такая же проблема. Я нашел решение здесь http://jakob.engbloms.se/archives/1403
Для меня решение было немного другим. это было
Прежде чем перебазировать dll, убедитесь, что он не используется:
И сделайте резервную копию:
Если команда rebase терпит неудачу с чем-то вроде:
Вам нужно будет выполнить следующие шаги по порядку:
Если возникла проблема, запустите команды от имени администратора.
источник
tl; dr: установить 64-битный Git для Windows 2 .
Технические подробности
Этот симптом сам по себе не имеет ничего общего с базами изображений исполняемых файлов, поврежденными разделами общей памяти Cygwin, конфликтующими версиями DLL и т. Д.
Это код Cygwin, которому не удается выделить большой кусок памяти размером ~ 5 МБ для его кучи по этому фиксированному адресу 0x68570000, в то время как там, очевидно, была доступна только дыра размером ~ 2,5 МБ. Соответствующий код можно увидеть в источнике msysgit .
Почему эта часть адресного пространства не свободна?
Там может быть много причин. В моем случае это были некоторые другие модули, загруженные по конфликтующему адресу:
Последний адрес будет около 0x68570000 + 5 МБ = 0x68C50000, но есть эти связанные с WOW64 библиотеки DLL, загруженные с 0x68810000 и выше, которые блокируют выделение.
Всякий раз, когда есть какая-то общая DLL, Windows в общем пытается загрузить ее по одному и тому же виртуальному адресу во всех процессах, чтобы сохранить некоторую обработку перемещения. Просто неудача в том, что эти системные компоненты каким-то образом были загружены по конфликтующему адресу в этот раз .
Почему в вашем Git есть Cygwin?
Потому что Git - это богатый пакет, состоящий из команд низкого уровня и множества полезных утилит, и в основном разработанный на Unix-подобных системах. Для того, чтобы его можно было собрать и запустить без масштабного переписывания, ему нужна хотя бы частичная Unix-подобная среда.
Для этого люди изобрели MinGW и MSYS - минимальный набор инструментов для сборки программ для Windows в стиле Unix. MSYS также содержит общую библиотеку,
msys-1.0.dll
которая помогает с некоторыми проблемами совместимости между двумя платформами во время выполнения. И многое из этого было взято из Cygwin, потому что кто-то уже должен был решать те же проблемы там.Так что это не Cygwin, это DLL-библиотека времени выполнения MinGW, которая ведет себя странно.
В Cygwin этот код на самом деле сильно изменился по сравнению с MSYS 1.0 - в последнем сообщении о фиксации для этого файла указано «Import Cygwin 1.3.4», начиная с 2001 года!
Как текущая версия Cygwin, так и новая версия MSYS - MSYS2 - уже имеют разную логику, которая, как мы надеемся, является более надежной. Это только старые версии Git для Windows, которые все еще были созданы с использованием старой сломанной системы MSYS.
Чистые решения:
Хакерские решения:
PATH
может иногда работать, потому что могут быть разные версииmsys-1.0.dll
в разных версиях Git или других MSYS-приложений, которые, возможно, используют другой адрес, разный размер этой кучи и т. Д.msys-1.0.dll
может быть пустой тратой времени, потому что 1) будучи DLL, она уже имеет информацию о перемещении и 2) «в любой версии ОС Windows нет гарантии, что (...) DLL всегда будет загружаться в одном и том же адресном пространстве» во всяком случае ( источник ). Единственный способ, которым это может помочь, - это еслиmsys-1.0.dll
сам загружается по конфликтующему адресу, который он затем пытается использовать. По-видимому, иногда так и происходит, поскольку именно так Git для Windows делают автоматически на 32-битных системах .msys-1.0.dll
двоичный код для двоичного кода, чтобы использовать другое значение,_cygheap_start
и это немедленно решило проблему.источник
cmder/vendor/git-for-windows
каталог и переименовал старую папку вgit-for-windows-x86
. Если вы откроетеcmder/vendor/git-for-windows
, вы увидите папкуmingw32
, которая является вашей подсказкой, которую вы используете 32bit. В x64 Git вы увидите папкуmingw64
.Очень простая версия решения rebase:
Перейдите в папку, где установлен git, например:
Удерживая клавишу Shift и щелкнув правой кнопкой мыши в папке, вы сможете открыть командную строку от имени администратора (спасибо https://stackoverflow.com/users/355389/darren-lewis за этот комментарий),
Затем запустите:
Это исправило это для меня, когда подход перезапуска не работал.
Надеюсь, поможет.
источник
Я видел то же сообщение об ошибке после обновления до git1.8.5.2:
Просто выполните поиск всех
msys-1.0.dll
на вашемC:\
диске, и первым должен быть выбран тот, который используется Git.Например, в моем случае я просто изменил порядок:
Когда путь Git был
C:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\
первым в моем%PATH%
, сообщение об ошибке исчезло.Не нужно перезагружать или даже менять сеанс DOS.
После
%PATH%
обновления в этом сеансе DOS команды git просто работают.Обратите внимание, что carmbrester и Sixto Saez оба сообщают ниже (в комментариях) о необходимости перезагрузки , чтобы решить проблему.
Примечание: во-первых, также удаляя любой
msys-1.0.dll
, как один в%LOCALAPPDATA%
источник
Если перезагрузка не устранила проблему (как следует из ответа Грега Хегвилла), проверьте ваш путь PATH на наличие конфликтующих установок msys-1.0.dll (и, возможно, других связанных библиотек DLL).
В моей конкретной ситуации установка msys в MinGW имеет копию этой DLL в своем
bin
каталоге (<MinGW_Install_Path>\msys\1.0\bin
), и она была указана в PATH.cmd
Каталог Git был указан в PATH, но егоbin
не было. (Версия msys-1.0.dll в Git находится вbin
каталоге. Очевидно, что установка MSys-Git по умолчанию не добавляет егоbin
в PATH.)Временным решением было добавить
bin
каталог Git в PATH, чтобы он появлялся перед путями MinGW. (Более постоянное исправление, вероятно, будет включать в себя устранение конфликтов путей между msys и Git в MinGW и / или удаление повторяющихся установок msys.)источник
Просто хочу поделиться своим опытом здесь. Я столкнулся с той же проблемой при кросс-компиляции для платформы MTK на 64-битной машине Windows. MinGW и MSYS участвуют в процессе строительства, и эта проблема возникла. Я решил это, изменив
msys-1.0.dll
файл. Ниrebase.exe
перезагрузка системы ни у меня не работали.Поскольку на моем компьютере не установлено rebase.exe. Я установил Cygwin64 и использовал
rebase.exe
внутри:Хотя перебазирование выглядело успешным, ошибка осталась. Затем я запустил
rebase
команду внутри терминала Cygwin64 и получил ошибку:Позже я попробовал адрес пары, но ни один из них не работал. В итоге я изменил
msys-1.0.dll
файл, и это решило проблему.источник
Я столкнулся с этим сегодня. Руководствуясь ответом Грега Хьюгилла, я посмотрел на запущенные процессы в моей системе, чтобы выяснить, не застряло ли что-нибудь или что другие пользователи вошли в систему, делая что-то с помощью git. Затем я запустил Cygwin (установлен отдельно) на этой конкретной машине. Запустил нормально. Я закрыл его, а затем снова попробовал Git Extensions (я пытался выполнить операцию извлечения), и это сработало. Не уверен, что запуск cygwin очистил кое-что, что было передано, но я впервые столкнулся с этой ошибкой, и это, казалось, исправило это для меня.
источник
У меня была такая же проблема, после некоторого сбоя и обновления Windows 8.0, на msys git 1.9. Я не нашел msys / git в своем пути, поэтому я просто добавил его в настройках окружения локального пользователя Windows. Работало без перезапуска.
По сути, похоже на RobertB, но на моем пути не было никаких мерзавцев.
Btw:
Я пытался использовать rebase -b blablabla msys.dll, но имел ошибку «ReBaseImage (msys-1.0.dll) не удалось с последней ошибкой = 6»
если вам это нужно быстро и у вас нет времени на отладку, я заметил, что «Git Bash.vbs» в каталоге Git успешно запускает оболочку bash.
источник
c:\Program Files (x86)\Git\bin
к пути и теперь я золотой.Эта ошибка случается очень редко на моей машине с Windows. Я перезагружал машину, и ошибка исчезла.
источник
Я столкнулся с этой проблемой при сборке LPCEXpresso. Если у вас есть C: \ MinGW \ bin в PATH. каким-то образом мне пришлось удалить его, чтобы избавиться от этой проблемы, поскольку некоторые другие MinGW, как на основе тоже
источник
Чтобы исправить эту проблему, я просто позволил Tortoise Git установить его обновление.
источник
c: \ msysgit \ bin> rebase.exe -b 0x50000000 msys-1.0.dll
источник
У меня сработало удаление старой версии% USERPROFILE% \ AppData \ Local \ SourceTree \ app-xxx. Не уверен, как это было связано с Git командной строки ...
источник