Git Uzantıları: Win32 hatası 487: cygwin'nin yığını için yer ayıramadı, Win32 hatası 0


342

Git Uzantıları: Düne kadar her şey iyi gidiyordu.

Ama aniden kullanarak bazı depoları çekmeye çalıştığımda bu hatayı alıyorum 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

Klonladığım tüm depolar için oluyor. Ama git bash'ım iyi çalışıyor. Neler olduğu hakkında hiçbir fikrim yok. Bunun neden olduğuna dair bir fikrin var mı?


5
Cygwin garip ve sürekli paylaşılan bellek bölümleri kullanıyor. Sisteminizi yeniden başlatmayı denediniz mi?
Greg Hewgill

@GregHewgill: Birkaç günden beri yeniden başlatılmadı. Hemen yapacak.
Uchia Itachi

1
@GregHewgill: İşe yaradı. Teşekkürler, belki bir cevap olarak gönderirseniz, diğerleri için de yararlı olacaktır.
Uchia Itachi

Sadece bu hatanın git'e özgü olmadığını ve kötü günlerde cygwin'in herhangi bir yürütülebilir dosyada aynı sebepten ötürü çökeceğini söylemek istedim.
meneldal

1
OP, seçilen cevabı @ Yirkha'nın cevabı olarak değiştirmelisiniz, çünkü bu sorunun temel nedenini çözer . Gelecekteki okuyuculara bazı nafile girişimler kurtarabilir (bana olduğu gibi).
ysap

Yanıtlar:


230

Cygwin, zaman zaman bozulabilen kalıcı paylaşılan bellek bölümleri kullanır. Bunun belirtisi, bazı Cygwin programlarının başarısız olmaya başlaması, ancak diğer uygulamaların etkilenmemesidir. Bu paylaşılan bellek bölümleri kalıcı olduğundan, sorun çözülmeden önce bunları temizlemek için genellikle sistemin yeniden başlatılması gerekir.


Herkese yardımcı olması durumunda, PATH'ımdaki GitExtensions bitini ilk öğe olarak taşıdım ve bu sorunu benim için çözmüş görünüyor. (Git / cmd kendisi 2 koymak - bunun bir parçası olup olmadığından emin değilim). Yeniden başlatma veya .dll karıştırma işleminden biraz daha kolay.
jinglesthula

6
Belleği boşaltmak için sonlandırılabilecek bir yürütülebilir dosya yok mu? Sistemin tam olarak yeniden başlatılması aşırı doldurulmuş gibi görünüyor. Ayrıca, aşağıdaki bir yanıt ( stackoverflow.com/a/31970708/88409 ) sorunun gerçekte ne olduğunu açıklar ve bozuk bellekle ilgisi yoktur.
Triynko

379

Ben de aynı problemi yaşadım. Burada çözüm buldum http://jakob.engbloms.se/archives/1403

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

Benim için çözüm biraz farklıydı. Öyleydi

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

DLL'leri yeniden oluşturmadan önce, kullanımda olmadığından emin olmalısınız:

tasklist /m msys-1.0.dll

Ve bir yedek alın:

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

Rebase komutu aşağıdaki gibi bir şeyle başarısız olursa:

ReBaseImage (msys-1.0.dll) son hata = 6 ile başarısız oldu

Aşağıdaki adımları sırayla gerçekleştirmeniz gerekecektir:

  1. Dll'yi başka bir dizine kopyalayın
  2. Yukarıdaki komutları kullanarak kopyayı yeniden oluştur
  3. Orijinal dll kopya ile değiştirin.

Herhangi bir sorun varsa komutları Yönetici olarak çalıştırın


1
Benim durumumda rebase.exe / mingw altında alt dizindeydi, bu yüzden komut şu şekilde sona erdi: c: / msysgit / mingw / bin / rebase -b 0x50000000 msys-1.0.dll ve c'de bulunurken çalıştırdım: / msysgit / bin dizini.
Robert Oschler

8
Bu hatayı gidiyorum ReBaseImage (msys-1.0.dll) son hata = 6 ile başarısız oldu
TheJKFever

17
@TheJKFever, msys-1.0.dll dosyasını değiştireceği için Yönetici olarak bir komut isteminde çalıştırmanız gerekir. Önce dll'nin bir yedeğini alın, msys-1.0.dll.bak dosyasına kopyalayın, ardından komutu Yönetici olarak çalıştırın. Benim için çalıştı.
Nikolaos Georgiou

1
Windows 8.1 bana yeniden işlemeye çalıştığımda bu bilgisayarda bu çalıştırılabilir dosyayı çalıştıramayacağını söyler
Jules GM

2
Win10 64 Bit Pro'mda rebase.exe yok, ancak aşağıdakileri çağırmak hile yaptı (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 için 64 bit Git'i yükleyin .


Teknik detaylar

      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

Bu belirtinin tek başına yürütülebilir dosyaların görüntü tabanları, Cygwin'in paylaşılan bellek bölümleri, çakışan DLL sürümleri vb.

Görünüşe göre orada sadece ~ 2.5 MB büyüklüğünde bir delik mevcut iken, Cygwin kodu bu sabit adres 0x68570000'de yığınına ~ 5 MB büyük bir bellek ayıramıyor. İlgili kod msysgit kaynağında görülebilir .


Adres alanının bu kısmı neden ücretsiz değil?

Bunun birçok nedeni olabilir. Benim durumumda, çakışan bir adrese yüklenen diğer bazı modüllerdi:

Process explorer'daki işlem modülleri

Son adres 0x68570000 + 5 MB = 0x68C50000 civarında olacaktır, ancak 0x68810000'den yüklenen ve ayırmayı engelleyen WOW64 ile ilişkili bu DLL'ler vardır.

Paylaşılan bir DLL olduğunda, genel olarak Windows bazı yer değiştirme işlemlerini kaydetmek için tüm işlemleri aynı sanal adrese yüklemeye çalışır. Bu sistem bileşenlerinin bu kez çakışan bir adrese bir şekilde yüklenmesi sadece kötü bir şans meselesi .


Git'inizde neden Cygwin var?

Git, bazı düşük seviyeli komutlardan ve birçok yardımcı programdan oluşan ve çoğunlukla Unix benzeri sistemlerde geliştirilen zengin bir pakettir. Büyük bir yeniden yazma olmadan onu oluşturabilmek ve çalıştırabilmek için en azından kısmi Unix benzeri bir ortama ihtiyacı var.

Bunu başarmak için, insanlar Minix ve MSYS'yi icat ettiler - Windows'da Unix benzeri bir şekilde programlar geliştirmek için minimal bir yapı araçları seti. MSYS ayrıca, msys-1.0.dllçalışma zamanı sırasında iki platform arasındaki uyumluluk sorunlarından bazılarına yardımcı olan paylaşılan bir kütüphane içerir . Ve bunun birçok bölümü Cygwin'den alındı, çünkü birisi zaten aynı sorunları orada çözmek zorunda kaldı.

Yani Cygwin değil, burada garip davranan MinGW'nin çalışma zamanı DLL'si.

Cygwin'de, bu kod MSYS 1.0'da olandan beri çok değişti - bu dosyanın son teslim mesajı 2001'den olan "Import Cygwin 1.3.4" diyor!

Hem mevcut Cygwin hem de MSYS'nin yeni sürümü - MSYS2 - halihazırda farklı mantığa sahiptir, bu da umarım daha sağlamdır. Windows için Git'in yalnızca eski kırık MSYS sistemi kullanılarak inşa edilmiş olan eski sürümleri.


Temiz çözümler:

  • Git for Windows 2'yi yükleyin - yeni, uygun şekilde bakımı yapılan MSYS2 ile üretilmiştir ve ayrıca birçok yeni özellik, birçok hata düzeltmesi, güvenlik iyileştirmesi vb. Mümkünse 64 bit sürümünün kullanılması önerilir . Ancak rebase geçici çözümü , 32 bit sistemler için perde arkasında otomatik olarak gerçekleştirilir, bu nedenle sorunun oluşma olasılığı da daha düşük olmalıdır.
  • Adres alanını temizlemek için bilgisayarı yeniden başlatmak (bu modülleri farklı bir rastgele adrese yüklemek) işe yarayabilir, ancak gerçekten, başka bir şey yoksa güvenlik düzeltmelerini almak için Windows 2 için Git'e yükseltin.

Hacky çözümleri:

  • Değişiklik PATHbazen işe yarayabilir, çünkü msys-1.0.dllGit'in farklı sürümlerinde veya diğer MSYS tabanlı uygulamalarda farklı adresler olabilir, bu da belki farklı adres, bu yığının farklı boyutu vb.
  • Yeniden dağıtım msys-1.0.dllzaman kaybı olabilir, çünkü 1) bir DLL olması, zaten yer değiştirme bilgileri ve 2) "Windows işletim sisteminin herhangi bir sürümünde bir (...) DLL dosyasının her zaman aynı adres alanına yükleneceğinin garantisi yoktur" neyse ( kaynak ). Bunun yardımcı olabilmesinin tek yolu, msys-1.0.dllkendisi daha sonra kullanmaya çalıştığı çakışan adrese yüklenir. Görünüşe göre bazen durum böyle, çünkü Windows için Git 32 bit sistemlerde otomatik olarak yapıyorlar .
  • Yukarıdaki bulgular göz önüne alındığında, ben ikili msys-1.0.dllikili için farklı bir değer kullanmak için ikili yamalı _cygheap_startve bu sorunu hemen çözdü.

1
Meraklı yorumunuz için teşekkür ederiz! Bir süredir şu ya da bu şekilde düzeltildi ve uygun çözüm, MSYS2 üzerine kurulu Windows 2 için Git'i (ve dolayısıyla daha yeni Cygwin kodunu) kullanmak gibi görünüyor.
Yirkha

2
Teşekkürler, bilmek güzel. Ne olursa olsun, git-extensions ile birlikte gelen sürümü kullanıyorum. Yeniden başlatma düzeltildi, bu yüzden güncelleme bana doğru gelene kadar görmezden geleceğim. :-)
Tim Abell

3
Mükemmel, iyi belgelenmiş cevap! Ve şu anda kabul edilen cevap yerine soruna uygun bir kalıcı çözüm.
Søren Boisen

2
Sorun hakkında biraz daha ayrıntı - github.com/git-for-windows/git/wiki/32-bit-issues
Kunal

1
Windows için x64 Git benim ve cmder için çalıştı. Teşekkür ederim! Beni çılgına çeviriyor, özellikle cmder ile çalışmak. Temelde x64 Git klasörünü cmder/vendor/git-for-windowsdizine kopyaladım ve eski klasörü yeniden adlandırdım git-for-windows-x86. Eğer açarsanız cmder/vendor/git-for-windows, bir klasör göreceksiniz mingw32, sen 32bit kullanıyorsanız sizin ipucu. X64 Git'te bir klasör göreceksiniz mingw64.
cmeza

32

Rebase çözümünün çok basit bir sürümü:

Git'in yüklü olduğu klasöre gidin, örneğin:

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

Shift tuşunu basılı tutarak ve klasörü sağ tıklatarak oradan yönetici olarak bir komut istemi açabilmeniz gerekir ( bu yorum için https://stackoverflow.com/users/355389/darren-lewis sayesinde ),

O zaman koş:

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

Yeniden başlatma yaklaşımı işe yaramadığında bu benim için düzeltildi.

Umarım yardımcı olur.


1
Benim için çalıştı. Komut istemini Yönetici olarak çalıştırdığınızdan emin olun.
Darren Lewis

Bu da benim için çalıştı, bir not olarak, sağ tıklama ve yönetici olarak cmd.exe'yi nasıl yükleyebileceğinizi bilmiyorum. sonra komutu çalıştırın. İşe yaradı!
17'de edencorbin

13

Git1.8.5.2'ye yükselttikten sonra aynı hata mesajını gördüm:

Sadece sürücünüzdeki herkes için bir arama msys-1.0.dllyapın C:\ve Git tarafından kullanılanın önce gelmesini sağlayın.

Örneğin, benim durumumda:

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 yolunun C:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\ilk önce gelmesini %PATH%sağlayarak hata mesajı kayboldu.

Yeniden başlatma veya hatta DOS oturumunu değiştirmeye gerek yok.
Bir kez %PATH%o DOS oturumu güncellenir, git sadece komutları çalışır.


Carmbrester ve Sixto Saez'in her ikisinin de sorunu (yorumlarda) sorunu çözmek için yeniden başlatması gerektiğini bildirdiklerini unutmayın .
Not: İlk olarak, herhangi msys-1.0.dllbiri gibi%LOCALAPPDATA%


1
Yolumda başka bir yerde msys-1.0.dll yoktu, ama orada bir şey üzerinde doğru gibi görünüyor - benim yolun git kısmı listede daha yüksek taşımak benim için sorunu çözdü. Bunun için teşekkür ederim! - düzeltmek için yeniden başlatmaktan çok yoruldum.
carmbrester

1
Benim "ekstra" msys-1.0.DLL dosyaları nerede başka bir uygulamadan C: \ Users \ oturum açma \ AppData \ Local. Bu uygulamayı kaldırmak ve yeniden başlatmak benim için sorunu çözdü
Sixto Saez

@SixtoSaez İlginç. Yeniden başlatma adımını daha görünür hale getirmek için cevabı düzenledim.
VonC

muhtemelen yeniden başlatma ihtiyacı olanlar sadece ihtiyaç vardı (yanlış DLL yükleme farklı bir sorun)
George Birbilis

7

Yeniden başlatma sorunu çözmezse (Greg Hegwill'in cevabı tarafından önerildiği gibi), PATH'nizde msys-1.0.dll (ve muhtemelen ilgili diğer DLL) dosyalarının çakışan kurulumlarını kontrol edin.

Benim özel durumumda MinGW'nin msys kurulumu, bindizinindeki ( <MinGW_Install_Path>\msys\1.0\bin) bu DLL'nin bir kopyasına sahiptir ve PATH'de listelenmiştir. Git'in cmddizini PATH'de listelendi, ancak dizini binbulunamadı. (Git'in msys-1.0.dll sürümü bindizinde. Görünüşe göre MSys-Git'in varsayılan yüklemesi PATH'ye eklenmiyor bin.)

Geçici bir düzeltme Git'in bindizinini PATH'e eklemekti , böylece MinGW'nin yollarından önce görünüyordu. (Daha kalıcı bir düzeltme, büyük olasılıkla MinGW'nin msys ve Git'leri arasındaki yol çakışmalarını sıralamayı ve / veya yinelenen msys kurulumlarını kaldırmayı içerecektir.)


Yeniden başlatma benim için düzeltmedi! Yolda gerçekten bazı yinelenen girişler vardı. Çok teşekkürler.
Reginaldo Santos

2

Deneyimlerimi burada paylaşmak istiyorum. Windows 64 bit makinede MTK platformu için çapraz derleme yaparken de aynı sorunla karşılaştım. MinGW ve MSYS inşaat sürecine dahil oldu ve bu sorun ortaya çıktı. msys-1.0.dllDosyayı değiştirerek çözdüm. Ne rebase.exesistemi ne de sistemi yeniden başlattım.

Bilgisayarımda yüklü rebase.exe olmadığından. Cygwin64'ü kurdum ve rebase.exeiçini kullandım :

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

Yeniden baslatma başarılı görünse de hata devam etti. Sonra rebaseCygwin64 terminal içinde komut koştu ve bir hata var:

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

Daha sonra birkaç adres denedim ama ikisi de işe yaramadı. Böylece msys-1.0.dlldosyayı değiştirdim ve sorunu çözdüm.


1

Bugün bununla karşılaştım. Greg Hewgill'in cevabının önderliğinde, sistemimde herhangi bir şeyin "takıldığını" veya diğer kullanıcıların git ile herhangi bir şey yaparak makineye giriş yapıp yapmadığını görmek için sistemimdeki işlemleri çalıştırmaya baktım. Daha sonra bu özel makinede cygwin'i (ayrıca kurulmuş) başlattım. Tamam başladı. Kapattım ve sonra Git Uzantılarını tekrar denedim (bir çekme işlemi deniyordum) ve işe yaradı. Cygwin'in başlatılmasının paylaşılan bir şeyi temizleyip temizlemediğinden emin değilim ama bu ilk kez bu hatayla karşılaştım ve bu benim için düzeltildi gibi görünüyordu.


1

Aynı sorun, bazı Windows 8.0 çökmesi ve güncellemesinden sonra msys git 1.9. Yolumda herhangi bir msys / git bulamadım, bu yüzden sadece windows yerel kullanıcı çevre ayarlarına ekledim. Yeniden başlamadan çalıştı.

Temelde, RobertB similiar ama yoktu herhangi uygulanacak yol git / MSYS.

btw:

  1. Rebase -b blablabla msys.dll kullanmayı denedim, ancak "ReBaseImage (msys-1.0.dll) son hata = 6 ile başarısız oldu" hatası vardı

  2. Bu hızlı bir şekilde ihtiyacınız varsa ve zaman hata ayıklama yoksa, Git dizininde "Git Bash.vbs" başarıyla bash kabuk başlar fark ettim.


Benim için de aynı durum. Yönetici olarak yeniden pazarlama başarısız oldu. c:\Program Files (x86)\Git\binYola eklendi ve şimdi altınım.
Jon Crowell

1

Bu hata Windows makinemde çok nadir görülür. Makineyi yeniden başlattım ve hata ortadan kalktı.


0

LPCEXpresso binasında bu sorunla karşılaştım. PATH'de C: \ MinGW \ bin varsa. nedense bazı MinGW gibi dayalı bu sorunu kurtulmak için onu kaldırmak zorunda kaldı


0

Bu sorunu gidermek için Tortoise Git'in güncellemesini yüklemesine izin verdim.



0

% USERPROFILE% \ AppData \ Local \ SourceTree \ app-xxx'in eski sürümünü silmek benim için çalıştı. Git komut satırına nasıl bağlandığından emin değilim ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.