programing

Git 확장자:Win32 오류 487: Cygwin 힙에 대한 공간을 예약할 수 없습니다. Win32 오류 0

stoneblock 2023. 5. 14. 10:03

Git 확장자:Win32 오류 487: Cygwin 힙에 대한 공간을 예약할 수 없습니다. Win32 오류 0

Git 확장자:어제까지는 모든 것이 잘 작동했습니다.

그러나 다음을 사용하여 일부 리포지토리를 풀링할 때 갑자기 이 오류가 발생합니다.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

내가 복제한 모든 저장소에 대해 발생하고 있습니다.하지만, 의 Gitbash는 잘 작동하고 있습니다.무슨 일이 일어나고 있는지 전혀 모르겠습니다.왜 이런 일이 벌어지는지 아십니까?

저도 같은 문제가 있었습니다.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.1987)가 실패하고 마지막 오류 = 6

다음 단계를 순서대로 수행해야 합니다.

  1. dll을 다른 디렉토리에 복사
  2. 위의 명령을 사용하여 복사본의 기본 재배치
  3. 원본 dll을 복사본으로 바꿉니다.

문제가 발생하면 관리자 권한으로 명령을 실행합니다.

Cygwin은 영구 공유 메모리 섹션을 사용하며, 이는 때때로 손상될 수 있습니다.이 문제의 증상은 일부 Cygwin 프로그램이 실패하기 시작하지만 다른 응용 프로그램은 영향을 받지 않는다는 것입니다.이러한 공유 메모리 섹션은 영구적이기 때문에 문제를 해결하기 전에 삭제하기 위해 시스템 재부팅이 필요한 경우가 많습니다.

tl;dr: Windows 2용 64비트 Git를 설치합니다.


기술적 세부사항

      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 코드가 이 고정 주소 0x68570000에서 힙에 대해 최대 5MB의 큰 메모리 청크를 할당하는 데 실패한 반면, 거기서는 최대 2.5MB의 큰 구멍만 사용할 수 있었습니다.관련 코드는 msysgit 소스에서 확인할 수 있습니다.


왜 주소 공간의 그 부분은 무료가 아닌가요?

여러 가지 이유가 있을 수 있습니다.제 경우에는 충돌하는 주소에 로드된 다른 모듈이 있습니다.

프로세스 탐색기의 프로세스 모듈

마지막 주소는 약 0x68570000 + 5MB = 0x68C50000이지만 0x68810000 이상에서 로드된 이러한 WOW64 관련 DLL이 있으므로 할당이 차단됩니다.

공유 DLL이 있을 때마다 Windows는 일반적으로 일부 재배치 처리를 저장하기 위해 모든 프로세스에서 동일한 가상 주소에 DLL을 로드하려고 합니다.시스템 구성 요소들이 이번에는 서로 충돌하는 주소에 어떻게든 로드된 것은 불행한 일입니다.


왜 너의 깃에 Cygwin이 있는거지?

Git은 낮은 수준의 명령과 많은 유용한 유틸리티로 구성된 풍부한 제품군이며 대부분 유닉스 계열 시스템에서 개발되었습니다.대량의 재작성 없이 빌드하고 실행할 수 있으려면 적어도 부분적으로 유닉스와 같은 환경이 필요합니다.

이를 달성하기 위해 사람들은 MinGW와 MSYS를 발명했습니다. 이는 Windows에서 유닉스 방식으로 프로그램을 개발하기 위한 최소 빌드 도구 세트입니다.MSYS에는 공유 라이브러리도 포함되어 있습니다.msys-1.0.dll이는 런타임 중에 두 플랫폼 간의 호환성 문제를 해결하는 데 도움이 됩니다.그리고 그 중 많은 부분이 Cygwin에서 가져갔습니다. 누군가가 이미 같은 문제를 해결해야 했기 때문입니다.

그래서 여기서 이상하게 행동하는 것은 Cygwin이 아니라 MinGW의 런타임 DLL입니다.

Cygwin에서 이 코드는 MSYS 1.0에 있는 내용 이후로 실제로 많이 변경되었습니다. 이 파일의 마지막 커밋 메시지는 "Import Cygwin 1.3.4"로 표시됩니다. 이는 2001년부터입니다!

현재 Cygwin새로운 버전의 MSYS - MSYS2는 이미 다른 논리를 가지고 있으며, 이는 더 강력하기를 바랍니다.오래된 고장난 MSYS 시스템을 사용하여 여전히 구축된 Windows용 Git의 오래된 버전입니다.


깨끗한 솔루션:

  • Windows 2용 Git 설치 - 적절하게 유지 관리된 새로운 MSYS2로 구축되었으며 많은 새로운 기능, 많은 버그 수정, 보안 향상 등이 있습니다.가능하면 64비트 버전도 사용하는 것이 좋습니다.그러나 32비트 시스템의 경우 기본 재배치 문제는 백그라운드에서 자동으로 수행되므로 문제가 발생할 가능성도 낮아집니다.
  • 주소 공간을 정리하기 위해 컴퓨터를 다시 시작하는 것만으로(이러한 모듈을 다른 임의 주소로 로드하는 것) 효과가 있을 수 있지만, 실제로는 Git for Windows 2로 업그레이드하여 다른 문제가 없으면 보안 수정 사항을 확인하십시오.

해키 솔루션:

  • PATH 수 에 가끔 할 수 .msys-1.0.dll다른 버전의 Git 또는 다른 MSYS 기반 애플리케이션에서 다른 주소, 다른 크기의 힙 등을 사용할 수 있습니다.
  • 재배치하기msys-1.0.dll1) DLL이기 때문에 이미 재배치 정보가 있고 2) "어떤 버전의 Windows OS에서도 (...) DLL이 항상 동일한 주소 공간에서 로드된다는 보장이 없기 때문에 시간 낭비일 수 있습니다."(소스)이것이 도움이 될 수 있는 유일한 방법은msys-1.0.dll그 자체는 사용하려는 충돌 주소로 로드됩니다.Git for Windows가 32비트 시스템에서 자동으로 수행하는 작업이기 때문에 때때로 그렇습니다.
  • 위의 결과를 고려하여, 나는 원래 바이너리 패치를 적용했습니다.msys-1.0.dll - 다값사이진에 합니다._cygheap_start그리고 그것은 문제를 즉시 해결했습니다.

리베이스 솔루션의 매우 간단한 버전:

다음과 같은 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 명령이 작동합니다.


CarmbresterSixto Saez는 모두 아래(댓글)에서 문제를 해결하기 위해 재부팅해야 한다고 보고합니다.
참고: 먼저, 임의의 항목도 제거합니다.msys-1.0.dll에 있어서는 마찬가지인%LOCALAPPDATA%

Greg Hegwill의 답변에서 제안한 대로 재부팅해도 문제가 해결되지 않으면 PATH에서 msys-1.0.dll(및 기타 관련 DLL)의 설치가 충돌하는지 확인합니다.

는 MinGW의 msys DLL에 .bindirectory)<MinGW_Install_Path>\msys\1.0\bin), .), PATH에 스깃cmd되었지만 해당 디렉토리의 "PATH"는bin그렇지 않았습니다. (Git의 msys-1.0.dll 버전은bin디렉토리입니다.는 MSys-Git를 .binPATH로 이동합니다.

일시적인 해결책은 Git's를 추가하는 것이었습니다.binPATH 디렉터리는 MinGW의 경로 앞에 나타나도록 합니다. (더 영구적인 수정은 MinGW의 msys와 Git의 경로 충돌을 분류하거나 중복된 msys 설치를 제거하는 것을 포함할 가능성이 높습니다.)

여기서 제 경험을 공유하고 싶습니다.Windows 64비트 시스템에서 MTK 플랫폼용 크로스 컴파일을 수행하는 동안 동일한 문제를 발견했습니다.MinGW와 MSYS는 건축 공정에 관여하고 있으며 이 문제가 불거졌습니다.나는 그것을 변경함으로써 해결했습니다.msys-1.0.dll 파일다. 둘다. 둘일.rebase.exe시스템 재부팅도 되지 않았습니다.

입니다.내 컴퓨터에 설치된 exe.하고 나cygwin64를 했습니다.rebase.exe내부:

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

기본 재배치에 성공한 것처럼 보이지만 오류는 남아 있습니다.그때 나는 달렸습니다.rebaseCygwin64 터미널 내부의 명령에서 오류가 발생했습니다.

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

저는 나중에 몇 개의 주소를 시도했지만 둘 다 작동하지 않았습니다.그래서 저는 결국 그것을 바꾸었습니다.msys-1.0.dll파일과 그것은 문제를 해결할 수 있습니다.

오늘 우연히 만났어요.Greg Hewgill의 답변에 따라, 저는 제 시스템에서 실행 중인 프로세스를 살펴봄으로써 "고착"된 것이 있는지, 아니면 다른 사용자들이 git로 무언가를 하고 있는지 확인했습니다.그런 다음 이 특정 컴퓨터에 별도로 설치된 Cygwin을 시작했습니다.OK 시작했습니다.그것을 닫은 다음 Git Extensions를 다시 시도했고(풀 작업을 시도하고 있었습니다) 작동했습니다.Cygwin의 시작으로 공유된 내용이 삭제되었는지는 확실하지 않지만 이 오류는 처음이었고 이 오류를 해결한 것 같습니다.

윈도우 8.0 충돌 및 업데이트 후 msysgit 1.9에서도 같은 문제가 발생했습니다.경로에서 msys/git를 찾지 못했기 때문에 Windows 로컬 사용자 환경 설정에 추가했습니다.다시 시작하지 않고 작동했습니다.

기본적으로, RobertB와 비슷하지만, 저는 제 길에 Git/msys가 없었습니다.

Btw:

  1. rebase-b blablamsys.dll을 사용하려고 했지만 "RebaseImage(msys-1.0.dll)가 마지막 오류 = 6" 오류가 발생했습니다.

  2. 이것이 빨리 필요하고 디버깅할 시간이 없다면 Git 디렉토리의 "Git Bash.vbs"가 bash 쉘을 성공적으로 시작한다는 것을 알게 되었습니다.

이 오류는 Windows 컴퓨터에서 매우 드물게 발생합니다.저는 결국 기계를 재부팅했고, 오류가 사라졌습니다.

LPCEX Presso 빌딩에서 이 문제가 발생했습니다. C:\MinGW\bin in the PATH. 다른 MinGW도 based를 좋아하기 때문에 어떻게든 이 문제를 제거하기 위해 제거해야 했습니다.

이 문제를 해결하기 위해 Toroise Git에서 업데이트를 설치하도록 했습니다.

c:\msysgit\bin>기본값입니다.exe -b 0x50000000 msys-1.0.message

%USERPROFILE%\AppData\Local\의 이전 버전을 삭제하는 중SourceTree\app-x.x.x는 저를 위해 작동했습니다.명령 줄 git에 어떻게 연결되었는지 확실하지 않습니다...

귀찮은 힙 오류를 극복하기 위한 깔끔한 트릭은 명령줄에 대해 "확장 콘솔" 모드를 활성화하는 것입니다.이후의 윈도우 버전에서 제한되었던 추가 아피스에 대한 액세스를 제공하므로 메모리 할당이 더 여기에 이미지 설명 입력잘 작동합니다.

언급URL : https://stackoverflow.com/questions/18502999/git-extensions-win32-error-487-couldnt-reserve-space-for-cygwins-heap-win32