Git Extensions : Win32 오류 487 : Cygwin의 힙을위한 공간을 예약 할 수 없음, Win32 오류 0


342

힘내 확장 : 어제까지 모든 것이 잘 작동했습니다.

그러나 갑자기 일부 저장소를 사용하려고하면이 오류가 발생합니다. 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

내가 복제 한 모든 리포지토리에서 발생합니다. 그러나 내 자식 배쉬 가 잘 작동합니다. 나는 무슨 일이 일어나고 있는지 전혀 모른다. 왜 이런 일이 일어나고 있는지에 대한 아이디어가 있습니까?


5
Cygwin은 이상하고 영구적 인 공유 메모리 섹션을 사용합니다. 시스템 재부팅을 시도 했습니까?
Greg Hewgill

@GregHewgill : 며칠 이후 재부팅되지 않았습니다. 바로 할 것입니다.
Uchia Itachi

1
@ GregHewgill : 잘되었습니다. 고마워, 아마 답으로 게시하면 다른 사람들에게도 도움이 될 것입니다.
Uchia Itachi

이 버그는 git에만 국한된 것이 아니며 나쁜 날에는 cygwin이 명백한 이유없이 동일한 방식으로 모든 실행 파일에서 충돌한다고 말하고 싶었습니다.
meneldal 2016 년

1
OP, 문제의 근본 원인 을 해결하기 위해 선택한 답변을 @Yirkha의 답변으로 변경해야합니다 . 그것은 나에게 일어난 것처럼 미래의 독자들에 대한 헛된 시도를 절약 할 수 있습니다.
ysap

답변:


230

Cygwin은 영구 공유 메모리 섹션을 사용하며 경우에 따라 손상 될 수 있습니다. 이 증상은 일부 Cygwin 프로그램이 실패하기 시작하지만 다른 응용 프로그램에는 영향을 미치지 않습니다. 이러한 공유 메모리 섹션은 영구적이므로 문제를 해결하기 전에 시스템을 재부팅 하여 정리해야합니다.


누군가에게 도움이되는 경우 PATH의 GitExtensions 비트를 첫 번째 항목으로 옮기고 문제가 해결 된 것으로 보입니다. (git / cmd 자체를 두 번째로 넣었습니다. 그 부분인지 확실하지 않습니다). 재부팅이나 .dll 셔플 링보다 약간 쉽습니다.
jinglesthula

6
메모리를 확보하기 위해 종료 할 수있는 실행 파일이 없습니까? 전체 시스템 재부팅은 과도한 것으로 보입니다. 또한 아래의 답변 ( stackoverflow.com/a/31970708/88409 )은 문제가 실제로 무엇인지 설명하고 손상된 메모리와 관련이 없습니다.
Triynko

379

나는 같은 문제가 있었다. 여기에서 해결책을 찾았습니다 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 명령이 다음과 같이 실패하면

마지막 오류 = 6으로 ReBaseImage (msys-1.0.dll)가 실패했습니다.

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

  1. dll을 다른 디렉토리로 복사
  2. 위의 명령을 사용하여 사본을 리베이스
  3. 원본 dll을 복사본으로 바꿉니다.

문제가 발생하면 관리자 권한으로 명령을 실행하십시오


1
내 경우에는 rebase.exe가 / mingw 아래의 하위 디렉토리에 있었으므로 명령은 c : / msysgit / mingw / bin / rebase -b 0x50000000 msys-1.0.dll이었고 c에있는 동안 실행했습니다. / msysgit / bin 디렉토리.
Robert Oschler

8
나는 마지막 오류 = 6 실패 (MSYS-1.0.dll)이 오류 ReBaseImage를 이눔 아
TheJKFever

17
@TheJKFever msys-1.0.dll을 수정할 예정이므로 관리자 권한으로 명령 프롬프트에서 실행해야합니다. dll을 먼저 백업하고 msys-1.0.dll.bak에 복사 한 다음 관리자 권한으로 명령을 실행하십시오. 그것은 나를 위해 일했다.
Nikolaos Georgiou

1
Windows 8.1에서 리베이스하려고 할 때이 PC에서이 실행 파일을 실행할 수 없다는 메시지가 표시됩니다.
Jules GM

2
Win10 64 비트 Pro에 rebase.exe가 없지만 다음을 호출하면 트릭 (VS2010)이 수행됩니다. "C : \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64 \ editbin.exe "/ REBASE : BASE = 0x50000000 msys-1.0.dll
Paul Bußmann

136

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 source 에서 볼 수 있습니다 .


주소 공간의 해당 부분이 비어 있지 않은 이유는 무엇입니까?

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

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

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

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


왜 Git에 Cygwin이 있습니까?

Git은 일부 저수준 명령과 많은 유용한 유틸리티로 구성되어 있으며 대부분 유닉스 계열 시스템에서 개발 된 풍부한 제품군이기 때문입니다. 대규모 재 작성없이 빌드하고 실행할 수 있으려면 최소한 부분적인 유닉스 계열 환경이 필요합니다.

이를 위해 사람들은 Windows에서 Unix와 같은 방식으로 프로그램을 개발할 수있는 최소한의 빌드 도구 인 MinGW와 MSYS를 발명했습니다. MSYS에는 공유 라이브러리 인 this가 포함되어있어 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 비트 버전사용하는 것이 좋습니다 . 그러나 rebase 해결 방법 은 32 비트 시스템에서 자동으로 수행되므로 문제가 발생할 가능성도 낮아야합니다.
  • 주소 공간을 정리하기 위해 컴퓨터를 다시 시작하면 (이 모듈을 다른 임의의 주소로로드) 작동 할 수 있지만 실제로 Windows 2 용 Git으로 업그레이드하면 보안 수정 사항이 적용됩니다.

해키 솔루션 :

  • 다른 버전의 Git 또는 다른 MSYS 기반 응용 프로그램에는 다른 주소,이 힙의 크기 등을 사용하는 PATH다른 버전이있을 수 있으므로 변경 이 때때로 작동 할 수 있습니다 msys-1.0.dll.
  • Rebasing msys-1.0.dll은 1) DLL이기 때문에 이미 재배치 정보를 가지고 있고 2) "모든 버전의 Windows OS에서 (...) DLL이 항상 동일한 주소 공간에서로드된다는 보장이 없기 때문에 시간 낭비가 될 수 있습니다." 어쨌든 ( 소스 ). 이것이 도움이 될 수있는 유일한 방법 msys-1.0.dll은 충돌하는 주소에 자체로드 되면 사용하려고하는 것입니다. 이것은 때때로 Git for Windows 사용자가 32 비트 시스템 에서 자동으로 수행하는 일이므로 때때로 그런 경우 입니다.
  • 위의 결과를 고려할 때 원래 이진 msys-1.0.dll파일에 다른 값을 사용 하도록 이진 파일을 패치 _cygheap_start하여 문제를 즉시 해결했습니다.

1
궁금한 의견 감사합니다! 그것은 꽤 오래 동안 고정되어 왔으며 적절한 해결책은 MSYS2 (그리고 더 최근의 Cygwin 코드)에 구축 된 Windows 2 용 Git을 사용하는 것 같습니다.
Yirkha

2
고마워요 git-extensions와 함께 번들로 제공되는 버전을 사용하고 있습니다. 재부팅하면 문제가 해결되어 업데이트가 나에게 끝날 때까지 무시합니다. :-)
Tim Abell

3
완벽하고 문서화 된 답변! 현재 승인 된 답변 대신 문제에 대한 적절한 영구 솔루션.
Søren Boisen

2
문제에 대한 좀 더 자세한 정보 -github.com/git-for-windows/git/wiki/32-bit-issues
Kunal

1
x64 Windows 용 Git은 저와 cmder를 위해 일했습니다. 감사합니다! 그것은 특히 cmder와 함께 일하면서 나를 미치게했습니다. 기본적으로 x64 Git 폴더를 cmder/vendor/git-for-windows디렉토리에 복사하고 이전 폴더의 이름을로 변경했습니다 git-for-windows-x86. 를 열면 32 비트를 사용하는 단서 인 cmder/vendor/git-for-windows폴더 mingw32가 표시됩니다. x64 Git에는 폴더가 표시 mingw64됩니다.
cmeza

32

rebase 솔루션의 매우 간단한 버전 :

git가 설치된 폴더로 이동하십시오.

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

Shift 키를 누른 채 폴더를 마우스 오른쪽 버튼으로 클릭하면 관리자 권한으로 명령 프롬프트를 열 수 있어야합니다 ( https://stackoverflow.com/users/355389/darren-lewis 덕분에 ).

그런 다음 다음을 실행하십시오.

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

다시 시작 접근 방식이 작동하지 않을 때 문제가 해결되었습니다.

도움이 되길 바랍니다.


1
나를 위해 일했다. 관리자 권한으로 명령 프롬프트를 실행하십시오.
대런 루이스

참고로, 저에게도 도움이되었습니다. 어떻게 마우스 오른쪽 버튼을 클릭하고 cmd.exe를 관리자로로드 할 수 있는지 모르겠습니다. 시작에서 관리자로 시작 선택에서 cmd.exe를 마우스 오른쪽 버튼으로 클릭 한 다음 디렉토리로 cd하십시오. 그런 다음 명령을 실행하십시오. 효과가 있었다!
edencorbin

13

git1.8.5.2로 업그레이드 한 후 동일한 오류 메시지가 나타났습니다.

간단하게 모든 검색하기 msys-1.0.dll당신의 C:\드라이브를, 그리고 힘내에서 사용하는 하나가 먼저 발생합니다.

예를 들어, 제 경우에는 단순히 다음 순서를 변경했습니다.

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

C:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\내 Git 경로를 맨 먼저 오게 %PATH%하면 오류 메시지가 사라졌습니다.

재부팅하거나 DOS 세션을 변경할 필요가 없습니다. 해당 DOS 세션에서가 업데이트
되면 %PATH%git 명령이 작동합니다.


참고 carmbrester식스 토 에즈 를 가진 (코멘트에서) 아래의 두 보고서 재부팅 문제를 해결하기 위해서입니다.
참고 : 첫째, 또한 어떤을 제거 msys-1.0.dll에서처럼,%LOCALAPPDATA%


1
나는 내 경로의 다른 곳에서 msys-1.0.dll을 가지고 있지 않았지만, 당신이 거기에 무언가있는 것처럼 보입니다-내 경로의 자식 부분을 목록에서 위로 옮기면 문제가 해결되었습니다. 감사합니다! -다시 부팅하는 데 지쳤습니다.
carmbrester

1
내 "extra"msys-1.0.DLL 파일이 C : \ Users \에있는 다른 앱 의 login \ AppData \ Local에 있습니다. 해당 앱을 제거 하고 재부팅하면 문제가 해결되었습니다.
Sixto Saez

@SixtoSaez 재미있는. 재부팅 단계가 더 잘 보이도록 답변을 편집했습니다.
VonC

아마도 재부팅이 필요한 사람들은 그게 필요했을 것입니다 (잘못된 DLL 로딩과는 다른 문제)
George Birbilis

7

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

내 특별한 상황에서 MinGW의 msys 설치는 bin디렉토리 ( <MinGW_Install_Path>\msys\1.0\bin) 에 해당 DLL의 사본을 가지고 있으며 PATH에 나열되어 있습니다. Git의 cmd디렉토리는 PATH에 나열되었지만 bin그렇지 않았습니다. (Git의 msys-1.0.dll 버전은bin 디렉토리에 있습니다. MSys-Git의 기본 설치 bin는 PATH에 추가하지 않습니다 .)

임시 수정은 Git의 bin디렉토리를 PATH 에 추가 하여 MinGW의 경로 앞에 표시되도록하는 것입니다. (보다 영구적 인 수정은 MinGW의 msys와 Git 간의 경로 충돌을 정렬하거나 중복 된 msys 설치를 제거하는 것입니다.)


다시 부팅해도 문제가 해결되지 않았습니다! 경로에 실제로 중복 된 항목이있었습니다. 많은 Tks.
Reginaldo Santos

2

내 경험을 여기에 공유하고 싶습니다. Windows 64 비트 컴퓨터에서 MTK 플랫폼을 교차 컴파일하는 동안 동일한 문제가 발생했습니다. MinGW와 MSYS가 구축 과정에 관여했으며이 문제가 발생했습니다. msys-1.0.dll파일 을 변경하여 해결했습니다 . 나도 rebase.exe시스템 재부팅도 효과가 없었다.

컴퓨터에 rebase.exe가 설치되어 있지 않기 때문에 cygwin64를 설치하고 rebase.exe내부를 사용했습니다 .

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

rebasing은 성공적으로 보였지만 오류는 남아있었습니다. 그런 다음 rebaseCygwin64 터미널에서 명령을 실행 하고 오류가 발생했습니다.

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

나중에 부부 주소를 시도했지만 둘 다 작동하지 않았습니다. 그래서 msys-1.0.dll파일 을 변경 하고 문제를 해결했습니다.


1

나는 오늘 이것에 부딪쳤다. Greg Hewgill의 답변에 따라 시스템에서 프로세스가 실행되어 "고정 된"것이 있는지 또는 다른 사용자가 git으로 무언가를 수행하는 컴퓨터에 로그인했는지 확인했습니다. 그런 다음이 특정 컴퓨터에서 cygwin (별도로 설치)을 시작했습니다. 괜찮습니다. 나는 그것을 닫은 다음 Git Extensions를 다시 시도했다 (풀 작업을 시도하고 있었다). cygwin의 출시로 인해 공유 된 내용이 지워 졌는지 확실하지 않지만 이번 오류가 발생한 것은 이번이 처음으로 해결 된 것 같습니다.


1

msys git 1.9에서 일부 Windows 8.0 충돌 및 업데이트 후 동일한 문제가 발생했습니다. 내 경로에서 msys / git을 찾지 못했기 때문에 Windows 로컬 사용자 환경 설정에서 추가했습니다. 다시 시작하지 않고 작동했습니다.

기본적으로, RobertB에 비슷한,하지만 나는하지 않았다 어떤 내 경로에 자식 / MSYS를.

Btw :

  1. rebase -b blablabla msys.dll을 사용하려고했지만 "마지막 오류 = 6으로 ReBaseImage (msys-1.0.dll)가 실패했습니다"라는 오류가 발생했습니다.

  2. 이 작업이 빠르게 필요하고 디버깅 시간이 없으면 Git 디렉토리의 "Git Bash.vbs"가 성공적으로 bash 셸을 시작하는 것으로 나타났습니다.


저도 마찬가지입니다. 관리자로 다시 시작하지 못했습니다. c:\Program Files (x86)\Git\bin경로에 추가 되었으며 이제 황금색입니다.
Jon Crowell

1

이 오류는 Windows 시스템에서 거의 발생하지 않습니다. 컴퓨터를 재부팅하고 오류가 사라졌습니다.


0

LPCEXpresso 빌딩 에서이 문제가 발생했습니다. 경로에 C : \ MinGW \ bin이있는 경우. 어쨌든 나는이 문제를 제거하기 위해 그것을 제거해야했다.




0

% USERPROFILE % \ AppData \ Local \ SourceTree \ app-xxx의 이전 버전을 삭제하면 나에게 도움이되었습니다. 그것이 커맨드 라인 git에 어떻게 연결되어 있는지 확실하지 않습니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.