2011-11-21 18 views
35

Final güncellemeyi tamamlamak ve düzeltmek için: Çözüm burada iki şey bir arada olduğu ortaya çıktı: Graham Borlandsuggested Windows Git yerine Cygwin Git kullanma ve Git yapılandırma ayarları pack.threads = 1 ve gc.aggressiveWindow = 150.Git gc, yapamaz

Büyük bir yerel Git deposum var, yaklaşık 40.000 işlem içeren bir SVN deposu olan git svn clone. Bu depo üzerinde git gc çalıştırmak çalışıyorum ve hiçbir yerde alıyorum:

$ git gc --auto 
Auto packing the repository for optimum performance. You may also 
run "git gc" manually. See "git help gc" for more information. 
Counting objects: 25966, done. 
Compressing objects: 100% (25249/25249), done. 
fatal: Out of memory, malloc failed (tried to allocate 426523986 bytes) 
error: failed to run repack 

Ben 4GB RAM 64-bit çift çekirdekli Win7 makinede Cygwin içine Git 1.7.5.1 çalıştırıyorum. .git dizini şu anda biraz 6.1GB üzerinde.

ben daha tam sistem bunu düzeltmek mümkün olup olmadığını görmek için, git gc --aggressive çalışan denedim, ama hiçbir şanslar: aynı boyutta malloc teşebbüs ile ben, yukarıda benzer bir ileti alıyorum ancak oldukça yüksek nesne sayısı (508,485 sayıldı, 493,506 sıkıştırıldı).

Ayrıca, Google tarafından önerildiği gibi, .gitconfig dosyamın [pack] parçasına çeşitli ikilemeler denedim; another StackOverflow question'dan en eksiksiz varlık. Benim .gitconfig şimdi aşağıdaki ilgili satırları vardır, ama bu ayarı görüntülenir fark yapmış:

[pack] 
     windowMemory = 16m 
     threads = 1 
     window = 1 
     depth = 1 
     deltaCacheSize = 1 

Ben gc benim depo için git alabilirsiniz konusunda herhangi bir öneriniz?

Düzenleme: Mark Longairsuggested biraz daha .gitconfig dosya değişir. Yaptığım yeni satırlar aşağıda. Ancak değişiklikler hiçbir fark yaratmadı.

[core] 
     packedGitWindowSize = 1m 
     packedGitLimit = 256m 
[pack] 
     packSizeLimit = 128m 

Düzenleme 2: Michael Krelinsuggested takas/sayfa dosya boyutunu artırarak (WinXP talimatları here ve Win7 için benzer). Bunu denedim, ama hiçbir fark yaratmadı ve gerçekten de mevcut maksimum boyutu arttırdım ve Windows, kullandığınız sayfa dosyasının boyutunu büyütmeyi denememiş gibi görünüyor.

Şimdi bunun Cygwin içinde veya üzerinde bir bellek sınırından kaynaklanıp kaynaklanmadığına bakıyorum. "Verilen" i kontrol etmek için Cygwin'i yönetici ayrıcalıklarıyla çalıştırmaya çalışıyorum. "İçer" i (daha büyük olasılıkla görünüyor) kontrol etmek için, Cygwin's maximum memory settings ile bir oyun yaşıyorum.

Düzenleme 3: Cygwin'i kullanmayı tercih etmeme rağmen, Windows Git istemcisinin bellek sorunuyla ilgili anlaşmaları son derece iyi. Havuzumun düzenli olması gerektiğinde, sık sık her şeye geri döneceğim gibi görünüyor.

cevap

7

Cygwin içinde yapmaya çalışmak yerine, yerel bir Windows istemcisi gibi msysGit çalıştırarak daha fazla şansınız olabilir.

+1

Windows Git istemcileriyle ilgili deneyimim genellikle bellek yönetimini daha da kötüye kullanmalarıydı. Cygwin Git'i, Windows Git istemcisinin üzerinde çalıştığı ~ 15.000'lik bir SVN deposunu işlemek için kullanabildim. Yine de, bir atış değer, sanırım! –

+0

Whee! Normalde Windows Git istemcisini kullanmaktan hoşlanmayacak kadar çok iyi çalıştı. Teşekkür ederim! –

1

Belki geçici olarak daha eski bir takas dosyası ekleyerek ve başka bir yerde birkaç bardak kahve için işe yarayacak?

+0

Ben etmezsen oldu

[pack] packSizeLimit = 64m threads = 1 

eklemek oldu t bugün bir yere olsun, bu akşam büyük bir sayfa dosyası ile bilgisayarımı yeniden başlatacağım ve geceyi bırakacağım… –

+0

Oh, pencerelerde olduğunuzu farketmedim - takas dosyası eklediğimi varsaydım kabukta birkaç komutun önemi. Umarım pencerelerde hala mümkündür, ama bunu nasıl yapacağınızı daha iyi bilirsiniz ;-) –

+0

Hayır şans. Aslında, kullanılabilir sayfa dosya alanını artırdım, ancak Windows bunu kullanmaya karar vermedi, ki bu da Cygwin bellek sınırı sorununun olabileceğini ima ediyor. Şimdi araştırıyorum… –

5

varsayılan değerlerden daha düşük etmek kısıtlayan denemek isteyebilirsiniz Diğer bazı yapılandırma seçenekleri şunlardır:

  • pack.packSizeLimit
  • core.packedGitWindowSize
  • core.packedGitLimit
... bunların tümü git config documentation belgelenmiştir. Her durumda, hangi birimlerin anlaşıldığını, geçmişte hatalar yaptığımı kontrol etmeye değer.

+0

'core.deltaCacheSize' yoktur. Zaten ayarlamış olduğum 'pack.deltaCacheSize' için başvurduğundan şüpheleniyorum. Şimdi geri kalanını deneyeceğim, yine de teşekkürler! –

+0

@me_and: oops - Bunu yanıtımdan kaldırdım –

+0

Şanssız. Soruyu kullandığım yeni yapılandırma ile güncelleyeceğim, ancak kısa sürüm, önerilen değişikliklerin hiçbirinin ayırmaya çalıştığı bellek miktarında 'git gc 'için herhangi bir fark yaratmadığı görülüyor. –

9

Aynı problemi yaşadım, şimdiye kadar bahsettiğim çözümleri başarıya ulaşmadan denedim. Ama repoya büyük boyutlu resim dosyalarını ekledikten sonra git gc ile sorunlarım başladı, bu yüzden .gitattributes dosyasını oluşturulan ve bu büyük dosyalar için delta sıkıştırma kapalı: İşe yaradı

*.tga -delta 
*.psd -delta 

.

+0

ZOMG işe yaradı! Git depolarımdaki büyük dosyalarla, çok fazla bellek alan işlemleri öldüren bir paylaşılan ana bilgisayarda sorun yaşıyorum. BU YIL İÇİN HİÇ BİR SORUNU ÇÖZÜYOR: DDDD – scone

+0

Bir çok deneme ve hatadan sonra, bazen çalışıp sonra birkaç işlemden sonra repo ara verdikten sonra, bu çözüm (şimdiye kadar) getirdi. Bu cevabın daha yüksek olması gerektiğini düşünüyorum. –

3

barındırma paylaşılan Linux üzerinde bu hatayı önlemek için yardımcı tek şey 'En önemlisi

.gitconfig 

"ipler = 1"