Msysgit bash, Windows 7'de korkunç derecede yavaş


84

Git'i seviyorum ve OS X'te neredeyse sürekli evde kullanıyorum. İş yerinde, Windows'ta svn kullanıyoruz, ancak araçlar tam olarak olgunlaştığında git'e geçmek istiyoruz (sadece TortoiseGit değil , aynı zamanda VisualSVN tarafından sağlanan gerçekten güzel Visual Studio entegrasyonuna benzer bir şey ). Ama ben daldım ...

Yakın zamanda msysgit'i Windows 7 makineme yükledim ve dahil olan bash sürümünü kullanırken korkunç derecede yavaş. Ve sadece git işlemleri değil; clearyaklaşık beş saniye sürer . AAAAH!

Benzer bir sorun yaşayan var mı?


Düzenleme : Görünüşe göre msysgit, UAC ile iyi oynamıyor ve XP üzerinde geliştirme veya UAC devre dışı bırakılmış Vista veya 7 çalıştırma nedeniyle oluşan küçük bir tasarım denetimi olabilir; Git Bash'i Run as administratorOS X ile gördüğüm ışık hızındaki sonuçları kullanarak başlatmak (veya Ağ bağlantısıyla Git Bash'i başlattıktan sonra 7'de - bkz. @Gauthier yanıtı).

Düzenleme 2 : AH HA! Cevabımı gör.


5 saniye yavaş değil, hayır. Cygwin versiyonundan daha yavaş ama daha hızlı olacak.
Yann Ramin

@theatrus: Az önce bir kronometre kullandım. Ortalama 3,8 saniyeydi. Yani haklısın, ama bir şeyler hala derinden yanlış.
Kevin L.

Bir diğer msysgit yavaşlaması, OpenSSH'nin eski bir sürümüdür burada belgelenmiştir darrell.mozingo.net/2011/09/29/…
JodaStephen

Msysgit'in bununla ilgili wiki sayfasına bakın: github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slow
Drew Noakes

Yanıtlar:


54

Bazı yapılandırma seçeneklerini ayarlamak için üç komut çalıştırarak Windows'ta Git'i önemli ölçüde hızlandırabilirsiniz:

git config --global core.preloadindex true
git config --global core.fscache true
git config --global gc.auto 256

Notlar:

  • core.preloadindex gecikmeyi gizlemek için dosya sistemi işlemlerini paralel olarak yapar (güncelleme: git 2.1'de varsayılan olarak etkindir)

  • core.fscache UAC sorunlarını düzeltir, böylece Git'i yönetici olarak çalıştırmanıza gerek kalmaz (güncelleme: Windows 2.8 için Git'te varsayılan olarak etkindir)

  • gc.auto .git / dosyalarının sayısını en aza indirir


Bu artık kabul edilen cevap olmalıdır. Tıkır tıkır çalışıyor!
krlmlr

8
Bu benim için çalışmıyor. Git bash'ım bir komut verdikten sonra hala 1-2 saniye gecikiyor.
Jaskey

Benim için bir cazibe gibi çalıştı; Git durumumu 13 saniyeden 0.7 saniyeye büyük bir depoda getirdi
noelob

2
git config --global core.fscache truebenim için hiçbir şey yapmadı; ancak, git config core.fscache truehile yaptı. Göre bu core.fscache bir repo başına ayardır, bunun nedeni bu.
David Merriman

2
"Repo başına" yorumun @DavidMerriman basitçe belirten edilir edebilirsiniz bireysel repo bu ayarı değiştirin. (Bu, tüm ayarlar için geçerlidir, bu yüzden neden bahsedildiğini bilmiyorum.) Yorum, fscache yalnızca repo başına ayar olarak çalıştığı anlamına gelmez . Global ayarlar, depo başına ayarlar tarafından geçersiz kılınmadıkça, bir makinedeki tüm depolar için geçerlidir.
ayakkabı boyacı

37

Vista veya 7'deki yavaşlık çözümü, Git Bash'i kullanarak Run as administrator(veya Git Bash kısayolu için UAC'yi devre dışı bırakarak ... veya UAC'yi tamamen devre dışı bırakarak ) çalıştırıyor gibi görünüyor. Aradaki fark gece ve gündüz ve git on 7 kullanmak yine harika.

Bu bilinen bir sorunla ilgili gibi görünüyor ve speküle ettiğim gibi, msysgit için bir geliştirme ortamı olarak XP kısmen sorumlu.


Güzel ipucu (kasıtsız olsa bile :)). Windows 2008 R2'de 1.7.4 ile "git svn clone" çalıştırmak benim için çok yavaştı (SVN'de 5000'den fazla işlem var ve sadece yarısını elde etmem haftalar sürdü) ... Deneme fikrini bana verdin "yerel" ortamında, XP'de ve aslında çok hızlı. Teşekkürler!
bdrajer

1
UAC'yi devre dışı bıraktım ve yöneticide çalıştırmayı denedim ve Git Bash'e girdiğim her komutun çalıştırılması yaklaşık 5 saniye sürüyor ( lsneredeyse boş bir dizinde bile )
Robin Winslow

4
Bunun yerine bu sorunun cevabı benim için çalıştı: stackoverflow.com/questions/4485059/…
Robin Winslow

Depoların sistem dışı bir bölüme taşınması da ekibim için büyük performans artışları gösterdi ve ödeme sırasında rastgele "dosya oluşturamama" sorunlarını önledi.
Laurence

1
bir çok çözümü denedim .. bu (yönetici olarak çalışıyor) sonunda benim için çalıştı .. şimdi benim
gitim bir

14

Benim için sorun, kabuk isteminde __git_ps1 kullanılmasıydı - sanırım msysgit'teki yavaş disk erişimi nedeniyle.

Çözüm, / etc / profile içindeki PS1 = ... satırlarından $ (__ git_ps1) 'i kaldırmaktı

Bu çözümün geçerli olup olmadığını hızlı test edin: bir git kabuğunda, export PS1 = '$' yazın ve işlemlerinizin hızını kontrol edin.


Teşekkürler! Windows XP'deki sorunum bu oldu. Bkz stackoverflow.com/q/5851611/200688
AndyL

2
__git_ps1SHOWDIRTYSTATE ve / veya SHOWUNTRACKEDFILES ayarlarını devre dışı bırakırsanız , muhtemelen etkin olmasına izin verebilirsiniz , bkz. Stackoverflow.com/a/4203968/321973
Tobias Kienzler

Windows 7'de benim için gereken tek şey buydu. Bu makine Yönetici ayrıcalıkları olmadan kilitlendiği için özellikle şanslı!
Hava

12

Buradaki tüm ipuçlarını (diğer cevabımdan gelen dahil) yeni bir makinede denedim, ancak işe yaramadılar, Git hala cehennem kadar yavaş.

Sonra virusscanning yazılımına (önceden yüklenmiş olan) bir göz attım: McAfee Security Center'ın gerçek zamanlı taramasını devre dışı bıraktım ve presto: git şimdi çok hızlı yanıyor! "Git svn rebase" için gereken süre 30 saniyeden 5 saniyeye düştü (!).

Umarım bu, Windows'ta yavaş Git ile hala sorunları olan diğer insanlara yardımcı olur, bunu çözerken saatlerimi kaybettim.


4
Git Bash'im ayrıca git kurulumunun tüm yolunu Avast! 'In dışlama yoluna ekledikten sonra yavaş başlıyor! Anti-Virus Suite, git bash 0,5
saniyeden

Bu benim için cevaptı !! AVG Free kullanıyorum. Sadece 10 dakika devre dışı bıraktım, aniden veeerrryyyy halsiz bash şimşek hızında oldu.
Mörre

Windows Defender kullananlar için, bir klasörü veya işlemi hariç tutabilirsiniz. Bkz support.microsoft.com/en-us/help/4028485/...
Ehtesh Choudhury

9

Ne yazık ki 'Yönetici Olarak Çalıştır' benim için işe yaramadı - ancak Kevin L'nin bulduğu gibi, ağ bağdaştırıcısının bağlantısını kesip git bash'ı başlatıp yeniden bağlanmak iyi çalıştı. Bu yüzden bunu bir toplu komut dosyasına sardım ve Başlat menüme yönetici olarak çalıştırılmak üzere işaretlenmiş bir kısayol koydum:

netsh interface set interface "Local Area Connection" DISABLED
cd "%USERPROFILE%\Documents\Visual Studio 2010\Projects"
start cmd /c ""C:\Program Files\Git\bin\sh.exe" --login -i"
netsh interface set interface "Local Area Connection" ENABLED

Ağımın anlık olarak kesildiğini hatırladığım sürece işe yarıyor.

(Win 7 Professional SP1, Git sürüm 1.7.8-preview20111206)


5

Outlook her çalıştırıldığında bir meslektaşım bu davranışa sahipti. Bakış açısını öldürmeye ve tekrar test etmeye çalışıyorum.

Ayrıca şunları da deneyebilirsiniz:

  • herhangi bir ağa bağlantı olmadan,
  • antivirüs çalışmadan,
  • başka bir program çalışmadan.

3
Ne Outlook ne de antivirüsün herhangi bir etkisi yok gibi görünüyor, ancak ağ bağlantımı devre dışı bırakıp git'i başlatırsam, yeniden bağlandıktan sonra bile şimşek çakıyor (okuyun: "Unix"). İlginç ...
Kevin

Evet. Ve git bash hızlı kalıyor (kapatana ve başka bir örnek açana kadar).
Kevin L.

2
Ağ bağlantısı benim için de çalıştı. Ağ bağlantısıyla ne ilgisi olduğunu merak ediyorum. Garip bir şekilde ev ağımda gayet iyi çalışıyor ancak ofis ağımda çalışmayı reddediyor.
Sarath

Bu, yepyeni bir iMac'te Windows 7 Professional 64 bit'teki sorunumu çözdü. Şerefe!
longda

Benim özel sistemimdeki nedeni önerildiği gibi +1 antivirüs oldu. windows 7 x64 ultimate. UAC (başka yerde bahsedilmiştir) ne yazık ki hiçbir fark yaratmadı. herkese teşekkürler
MickyD

3

Belirli kullanıcı hesaplarında çalışırken, bir çağrıda ayrı git.exe örneklerinin engellendiğini WaitForSingleObject(), bu nedenle aynı anda yalnızca tek bir git.exe işleminin etkili bir şekilde çalışabileceğini gördük. Kullanıcı hesabını değiştirmek bu sorunu çözdü.

Ayrıntılar burada: https://stackoverflow.com/a/13054022


3

MacAffee'ye sahibim ve ona .git dizinini ve tüm alt dizinleri gerçek zamanlı taramanın dışında bırakmasını söylüyorum, performans sorununu çözdü.


1
Tüm sabit diski dışarıda bırakabilir misiniz? ;-).
Peter - Monica'yı eski haline

1

Bulundu gibi bu konuda , UAC sanallaştırma ile çalışan (tamamen devre dışı TDHP'ye gerekli değil) büyük bir fark yapar kapatmış.

Bu gönderi , nasıl kapatılacağını açıklar (gönderinin altına bakın, yalnızca bir kayıt defteri ayarı).

Bağlandığım bir (büyük) SVN deposunda, sadece yukarıdaki değişikliğin yapılması "git svn rebase" için gereken süreyi 15 saniyeden 5 saniyeye düşürdü, bu bir faktör 3 iyileştirme.


Bu sorun (izleyici) kapatıldı, bununla
childno͡.de

1

Windows 7 UAC ile uğraşmanın bir alternatifi, mysysgit'i Program Files klasörünüzün dışına yüklemek olabilir. Örneğin "C: \ Program Files (x86) \ Git" yerine "C: \ git" konumuna yüklemeyi deneyin.

'Yönetici olarak çalıştır' ve UAC denetimleriyle uğraşmayı denedim, ancak pes ettim ve yeni bir yüklemeye başladım. Daha önce yaklaşık 15KiB / s maksimum alıyordum, ancak şimdi 60kiB / s'nin üzerinde.


1

UAC'yi kapatmak performansı artırmazsa, luafv sürücüsünü kapatmayı deneyin. Bu, bu sayfadaki hemen hemen her şeyi ve benzer soruları denedikten sonra benim için çalıştı. Git, kullanılamayacak kadar yavaştan oldukça iyi duruma geçti.

'Regedit'i açın ve kayıt defteri anahtarını bulun

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/luafv

Değerini değiştir Start 2'den 4'e değiştirin.

Nasıl devre dışı luafv bırakılacağına dair ayrıntıları burada buldum . Şahsen hiçbir fikrim olmadığını unutmayın.luafv olduğu veya olduğu hakkında . Bu sayfa, kapatmanız durumunda olabilecek kötü şeyler hakkında çeşitli uyarılar veriyor, muhtemelen ciddiye almalısınız.

DÜZENLEME: Aşağıdaki yorum, bunu yanlış yoldan anladığımı belirtti (bağlantı doğru şekilde var). Şimdi düzeltildi. Kayıtlarını çöpe attığım insanlar için üzgünüm :)


Benimki varsayılan olarak 2'ye ayarlanmıştır. Hala oldukça yavaş.
imanuelcostigan

@imanuelc: İronik bir şekilde, benimki artık (yeni bir bilgisayarda) ve aynı zamanda yavaş.
jwg

2
Bu yanlış. 2'den 4'e değiştirilmelidir. 2, otomatik başlatma anlamına gelir. 4 devre dışı demektir.
richb

1

Bunu bir süredir sorun gidermeye çalışıyorum ve sorunun kaynağını belirlemekte zorlandım. Sonunda dramatik etkisi olan iki şey buldum:

  • Windows Arama hizmetini kapatma. Bunun performans üzerinde dramatik bir etkisi oldu.
  • Git Uzantıları kapatılıyor. Git Uzantılarına Göz At penceresinin arka planda açık olması, Cygwin git komutu yürütme sürelerinin görünüşte rastgele bir faktörle yaklaşık 10'a kadar artmasına neden oldu.

0

Buradaki sorun olabilir biraz daha yavaş Linux daha Windows üzerinde olduğu en etkin eğer bash tamamlama olmak.

PS1 değişkenini "$" gibi basit bir şeye ayarlamayı deneyin ve bunun işleri hızlandırıp hızlandırmadığını görün. Varsa, son-ish git-sürümlerinde bash-tamamlama için bazı iyileştirmeler olduğunu unutmayın. Belki de yükseltmeniz gerekiyor.


1
Mutlak en yeni sürümü çalıştırıyorum (yukarıdaki VonC'nin cevabı hakkındaki yorumlarıma bakın). Ama buna bir şans vereceğim.
Kevin L.

1.7.0.2 bu bağlamda illa ki son teknoloji değildir. Bahsettiğim optimizasyonlar, yukarı akışta gerçekleşti. Windows için Git'in 1.7.0.2 sürümüne dahil olup olmadıklarından emin değilim.
kusma

0

Bu benim için çalıştı. Tüm çözümlere uyan tek bir çözüm olmasını beklemeyin.

Bash ve pencerelerde $ HOME ortam değişkenini kontrol edin. Bir kullanıcı hesabına işaret ediyorsa, kullanıcının Windows profilini / izinlerini kontrol edin. Kullanıcı hesabını veya $ HOME'u buna göre değiştirin.


6
Bu uğursuz profil / izinler üzerinde biraz ayrıntı verebilir misiniz lütfen?
Tobias Kienzler

0

Windows 7 x64'te Windows için git'i (msysgit) çalıştırırken oldukça uzun bir süredir sınırlı bir kullanıcı hesabı olarak aynı sorunla karşılaştım. Burada ve diğer yerlerde okuduklarımdan, ortak tema, idari ayrıcalıkların ve / veya UAC'nin olmaması gibi görünüyor. Sistemimde UAC kapalı olduğundan, program dosyaları dizininde bir şey yazmaya / silmeye çalıştığı açıklaması bana en mantıklı geliyor.

Her durumda, git 1.8'in taşınabilir sürümünü zipinstaller ile yükleyerek sorunumu çözdüm. Zipinstaller'ın çalışması için .7z dağıtım dosyasını açıp zip olarak yeniden paketlemem gerektiğini unutmayın. Ayrıca bu dizini sistem yoluma manuel olarak eklemem gerekiyordu.

Performans şimdi iyi. Sınırlı bir kullanıcı olarak izinlerim olmayan Program Files (x86) dizinine kurulmuş olsa da, aynı sorundan muzdarip görünmüyor. Bunu, taşınabilir sürümün dosyaları yazdığı / sildiği yerlerde biraz daha muhafazakar olmasına ya da muhtemelen durum böyledir, ya da 1.7'den 1.8'e yükseltmeye bağlıyorum. Hangisinin neden olduğunu tespit etmeye çalışmayacağım, şimdi çok daha iyi çalıştığını söylemek yeterli .


0

Msysgit'i kaldırmayı deneyebilir, pencereleri yeniden başlatabilir, msysgit'in en son sürümünü yükleyebilirsiniz. Benim için hile yapıyor gibiydi. Bu öneriyi burada buldum:

https://stackoverflow.com/a/4506192/1413941

DÜZENLE

PS Yavaş Git sorunlarıyla karşılaşmadan önce UAC'yi zaten devre dışı bırakmıştım, bu nedenle UAC'yi devre dışı bırakmanın gerekli olup olmadığını veya Git'in hızlı çalışmasını sağlamak için gerekli olup olmadığını bilmiyorum.


0

En iyi çözüm, belirtildiği gibi yönetici olarak çalıştırmaktır. Bununla birlikte, git durumunu hızlı hale getirmek için başka bir seçenek , en azından, trustctime = false . Bundan önce git durumu yaklaşık 30 saniye sürdü ve bundan sonra çıktıda gösterilen miktarla aynı - X saniye sürdü ...


0

Aşağıdaki git yapılandırmasını değiştirerek de önemli bir performans artışı elde edebilirsiniz:

git config --global status.submoduleSummary false

git statusWindows 7 x64'te basit komutu çalıştırırken, bilgisayarımın çalışması 30 saniyeden fazla sürdü. Bu seçenek tanımlandıktan sonra komut anında verilir.

Aşağıdaki sayfada açıklandığı gibi Git'in kendi izlemesini etkinleştirmek, sorunun kaynağını bulmama yardımcı oldu ve bu, kurulumunuzda farklılık gösterebilir: https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so- yavaş


-4

Muhtemelen Git deponuzu analiz eden bir uyarı meselesidir. Git deposunun dışında bir yerde "temizle" yaparak test edebilirsiniz. Ve bunu, git-complete.bash'a yama yaparak veya core.filemode ile hileler oynayarak hızlandırabilirsiniz.

Visual Studio entegrasyonuna gelince: Bu Açık Kaynaktır. Başkalarının sizin için ücretsiz çalışmasını beklemek haksızlıktır.

Ayrıca msysGit posta listesinde soru sormak için değil daha ziyade komik buluyorum, ama şimdi ben konuyu dağıtmak.


5
StackOverflow'da alevlenme tolere edilmemelidir. Lütfen söylemi daha medeni tutmaya çalışın
phord

1
Eğlenceli. Yorumum somut teknik bilgiler içeren tek yorumdu. Sorunun çözülmesine yardımcı olma teklifi hala açık, biliyor musunuz? Ve tabi ki, sorunun burada, izlemediğim ve başkaları tarafından bana işaret edilmesi gereken stackoverflow'da gündeme gelmesinden oldukça üzülüyorum. Bu konuyu doğrudan duymayı tercih ederdim. Seni bilmiyorum ama orijinal proje sorunlardan haberdar edilmediğinde bunu haksız buluyorum.
Dscho

İki yıl sonra katılıyorum. Ben çok serttim. Üzgünüm Dscho. Git geliştirici posta listeleri gerçekten faydalıdır.
phord

2
@Dscho, insanların genellikle önce buraya gönderdiklerini anlamalısınız çünkü Git'te bir hata olmayan ve sorunlarına neden olan bir yapılandırma veya platform sorunu olmadığını kontrol etmek istiyorlar.
jwg
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.