Msysgit bash jest horrendalnie powolny w systemie Windows 7


84

Uwielbiam git i używam go na OS X prawie stale w domu. W pracy używamy svn w systemie Windows, ale chcemy przeprowadzić migrację do git, gdy tylko narzędzia w pełni dojrzeją (nie tylko TortoiseGit , ale także coś w rodzaju naprawdę fajnej integracji Visual Studio zapewnianej przez VisualSVN ). Ale błądzę ...

Niedawno zainstalowałem msysgit na moim komputerze z systemem Windows 7 i podczas korzystania z dołączonej wersji basha działa on horrendalnie wolno. I to nie tylko operacje git; cleartrwa około pięciu sekund . AAAAH!

Czy ktoś miał podobny problem?


Edycja : Wygląda na to, że msysgit nie gra dobrze z UAC i może być po prostu drobnym niedopatrzeniem projektowym wynikającym z programowania na XP lub uruchamiania Vista lub 7 z wyłączoną UAC; uruchomienie Git Bash przy użyciu Run as administratorwyników w błyskawicznej szybkości, jaką widzę w systemie OS X (lub na 7 po uruchomieniu Git Bash bez połączenia sieciowego - patrz odpowiedź @Gauthier).

Edycja 2 : AH HA! Zobacz moją odpowiedź.


Nie 5 sekund wolno, nie. Będzie wolniejszy, ale szybszy niż wersja Cygwin.
Yann Ramin

@theatrus: Właśnie teraz użyłem stopera. Średnia wyniosła 3,8 sekundy. Więc masz rację, ale coś jest nadal głęboko nie tak.
Kevin L.

Innym spowolnieniem msysgit jest stara wersja OpenSSH, którą udokumentowano tutaj. Darrell.mozingo.net/2011/09/29/...
JodaStephen

Zobacz stronę wiki msysgit
Drew Noakes

Odpowiedzi:


54

Możesz znacznie przyspieszyć Git w systemie Windows, uruchamiając trzy polecenia, aby ustawić niektóre opcje konfiguracyjne:

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

Uwagi:

  • core.preloadindex wykonuje operacje na systemie plików równolegle, aby ukryć opóźnienie (aktualizacja: domyślnie włączone w git 2.1)

  • core.fscache naprawia problemy z UAC, dzięki czemu nie musisz uruchamiać Git jako administrator (aktualizacja: domyślnie włączona w Git dla Windows 2.8)

  • gc.auto minimalizuje liczbę plików w .git /


To powinna być teraz akceptowana odpowiedź. Działa jak marzenie!
krlmlr

8
To nie działa dla mnie. Mój git bash jest nadal opóźniony o 1-2 sekundy po wydaniu polecenia.
Jaskey

Zadziałało dla mnie jak urok; obniżył mój status gita na dużym repo z 13 sekund do 0,7 sekundy
noelob

2
git config --global core.fscache truenic dla mnie nie zrobił; jednak git config core.fscache truezałatwił sprawę. Zgodnie z tym dzieje się tak, ponieważ core.fscache jest ustawieniem na repozytorium.
David Merriman

2
@DavidMerriman Komentarz „per repo” po prostu stwierdza, że możesz zmienić to ustawienie dla poszczególnych repozytoriów. (Co jest prawdą w przypadku wszystkich ustawień, więc nie wiem, dlaczego w ogóle o tym wspomniano). Komentarz nie oznacza, że działa fscache tylko jako ustawienie na repozytorium. Ustawienia globalne mają zastosowanie do wszystkich repozytoriów na komputerze, chyba że zostaną zastąpione ustawieniami dla każdego repozytorium.
shoelzer

37

Wydaje się, że rozwiązaniem problemu spowolnienia w systemie Vista lub 7 jest uruchomienie Git Bash przy użyciu Run as administrator(lub wyłączenie UAC dla skrótu Git Bash ... lub całkowite wyłączenie UAC ). Różnica jest w nocy i w dzień, a używanie git na 7 jest znowu niesamowite.

Wydaje się, że jest to związane ze znanym problemem i, jak spekulowałem, XP jako środowisko programistyczne dla msysgit jest częściowo odpowiedzialne.


Niezła wskazówka (nawet jeśli była niezamierzona :)). Uruchamianie „git svn clone” w Windows 2008 R2 z wersją 1.7.4 było dla mnie strasznie powolne (w SVN jest ponad 5000 zatwierdzeń i zajęło to tygodnie, zanim udało mi się zdobyć połowę) ... Wpadłem na pomysł, aby go wypróbować w swoim „natywnym” środowisku, na XP, i faktycznie jest bardzo szybki. Dzięki!
bdrajer

1
Wyłączyłem UAC i próbowałem uruchomić z administratorem, a mimo to każde polecenie, które wprowadzam do Git Bash, zajmuje około 5 sekund, aby uruchomić (nawet lsw praktycznie pustym katalogu)
Robin Winslow,

4
Odpowiedź w tym pytaniu zadziałała zamiast tego: stackoverflow.com/questions/4485059/ ...
Robin Winslow

Przeniesienie repozytoriów na partycję niesystemową również spowodowało duży wzrost wydajności mojego zespołu i zapobiegło przypadkowym problemom z „niemożnością utworzenia pliku” podczas pobierania.
Laurence,

1
Wypróbowałem wiele rozwiązań .. to (działając jako administrator) w końcu zadziałało dla mnie .. teraz mój git znów jest błyskawiczny .. dzięki .. :)
AweSIM

14

Dla mnie problemem było użycie __git_ps1 w zachęcie powłoki - myślę, że z powodu wolnego dostępu do dysku w msysgit.

Rozwiązaniem było usunięcie $ (__ git_ps1) z linii PS1 = ... w / etc / profile

szybki test, jeśli to rozwiązanie ma zastosowanie: w powłoce git wpisz export PS1 = '$' i sprawdź szybkość swoich operacji.


Dzięki! Okazało się, że to mój problem w systemie Windows XP. Zobacz stackoverflow.com/q/5851611/200688
AndyL

2
Prawdopodobnie możesz zezwolić na __git_ps1aktywne, jeśli wyłączysz ustawienia SHOWDIRTYSTATE i / lub SHOWUNTRACKEDFILES, zobacz stackoverflow.com/a/4203968/321973
Tobias Kienzler

To było wszystko, czego potrzebowałem w systemie Windows 7. Szczególnie szczęśliwy, ponieważ ten komputer jest zablokowany i nie ma uprawnień administratora!
Air

12

Wypróbowałem tutaj wszystkie wskazówki (w tym tę z mojej drugiej odpowiedzi) na nowej maszynie, ale nie zadziałały, Git nadal jest wolny jak diabli.

Potem rzuciłem okiem na oprogramowanie virusscanning (które było preinstalowane): wyłączyłem skanowanie w czasie rzeczywistym w McAfee Security Center i presto: git działa teraz błyskawicznie! Czas potrzebny na „git svn rebase” spadł z 30 do 5 sekund (!).

Mam nadzieję, że jest to pomocne dla innych osób, które nadal mają problemy z powolnym Gitem w systemie Windows. Straciłem godziny, zastanawiając się nad tym.


4
Mój Git Bash również uruchamia się powoli wcześniej, po dodaniu całej ścieżki instalacji gita do ścieżki wykluczeń Avast! Pakiet antywirusowy, git bash startuje poniżej 0,5 s
zhxchen17

To była odpowiedź dla mnie !! Używam programu AVG Free. Po prostu wyłączyłem go na 10 minut, nagle veeerrryyyy powolny bash jest błyskawiczny.
Mörre

W przypadku korzystania z programu Windows Defender można go wykluczyć folder lub proces. Zobacz support.microsoft.com/en-us/help/4028485/…
Ehtesh Choudhury

9

Niestety 'Uruchom jako administrator' nie działało dla mnie - ale jak stwierdził Kevin L, odłączenie karty sieciowej, uruchomienie git bash, a następnie ponowne połączenie działało dobrze. Więc zawarłem to w skrypcie wsadowym i umieściłem do niego skrót w moim menu Start, oznaczony jako administrator:

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

Działa świetnie, o ile pamiętam, moja sieć zostaje chwilowo odcięta.

(Win 7 Professional SP1, Git wersja 1.7.8-preview20111206)


5

Mój kolega zachowywał się tak, gdy był uruchomiony Outlook. Próbuję zabić perspektywy i ponownie przetestować.

Możesz także spróbować przetestować:

  • bez połączenia z żadną siecią,
  • bez uruchomionego programu antywirusowego,
  • bez uruchomionego żadnego innego programu.

3
Ani Outlook, ani program antywirusowy nie wydają się mieć żadnego efektu, ale jeśli wyłączę połączenie sieciowe, a następnie uruchomię git, działa błyskawicznie (czytaj: „Unix”), nawet po ponownym połączeniu. Ciekawe ...
Kevin L.

Tak. A git bash działa szybko (dopóki go nie zamknę i nie otworzę kolejnej instancji).
Kevin L.

2
Połączenie sieciowe też zadziałało. Zastanawiam się, co to ma wspólnego z połączeniem sieciowym. I o dziwo działa doskonale w mojej sieci domowej, ale odmawia pracy w sieci biurowej.
Sarath,

To rozwiązało mój problem w 64-bitowym systemie Windows 7 Professional na nowym komputerze iMac. Twoje zdrowie!
longda

+1 antywirus, zgodnie z sugestią, był przyczyną mojego konkretnego systemu. Windows 7 x64 Ultimate. UAC (wspomniany w innym miejscu) niestety nie zrobił różnicy. dzięki wszystkim
MickyD,

3

Odkryliśmy, że podczas uruchamiania na niektórych kontach użytkowników oddzielne instancje git.exe są blokowane podczas wywołania WaitForSingleObject(), więc tylko jedna operacja git.exe może być efektywnie uruchomiona na raz. Zmiana konta użytkownika obejść ten problem.

Szczegóły tutaj: https://stackoverflow.com/a/13054022


3

Mam MacAffee i mówiąc mu, aby wykluczyć katalog .git i wszystkie podkatalogi ze skanowania w czasie rzeczywistym, rozwiązałem problem z wydajnością.


1
Czy możesz wykluczyć cały dysk twardy? ;-).
Peter - Przywróć Monikę

1

Jak stwierdzono w tym problemie , działanie z wyłączoną wirtualizacją UAC (nie jest konieczne całkowite wyłączenie UAC) robi dużą różnicę.

W tym poście wyjaśniono, jak to wyłączyć (patrz na dole postu, tylko jedno ustawienie rejestru).

Na jednym (dużym) repozytorium SVN, z którym się łączę, wprowadzenie powyższej zmiany skróciło czas potrzebny na „git svn rebase” z 15 do 5 sekund, co oznacza 3-krotną poprawę.


Ten numer (tracker) został zamknięty, nowy numer dotyczący tego to: github.com/msysgit/git/issues/94
childno͡.de

1

Alternatywą dla mieszania się z UAC systemu Windows 7 może być zainstalowanie mysysgit poza folderem Program Files. Na przykład zamiast „C: \ Program Files (x86) \ Git” spróbuj zainstalować w „C: \ git”

Próbowałem majstrować przy kontrolkach „Uruchom jako administrator” i UAC bezskutecznie, ale poddałem się i zacząłem od nowej instalacji. Wcześniej uzyskiwałem około 15 KB / s max, ale teraz wynosi ponad 60 KB / s.


1

Jeśli wyłączenie UAC nie poprawi wydajności, spróbuj wyłączyć sterownik luafv. To zadziałało dla mnie po wypróbowaniu prawie wszystkiego na tej stronie i kilku podobnych pytań. Git przeszedł z niezwykle powolnego do całkiem przyzwoitego.

Otwórz „regedit” i znajdź klucz rejestru

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/luafv

Zmień wartość Startz 2 na 4.

Znalazłem szczegóły dotyczące wyłączania luafv tutaj . Zauważ, że osobiście nie mam pojęcia, co luafvjest lub co robi. Ta strona zawiera różne ostrzeżenia o złych rzeczach, które mogą się zdarzyć, jeśli ją wyłączysz, co prawdopodobnie powinieneś potraktować poważnie.

EDYCJA: Poniższy komentarz wskazywał, że otrzymałem to w niewłaściwy sposób (link ma właściwą stronę). To jest teraz naprawione. Przepraszam ludzi, których rejestry skasowałem :)


Mój jest domyślnie ustawiony na 2. Wciąż dość powolny.
imanuelcostigan

@imanuelc: jak na ironię, mój też jest teraz (na nowym komputerze) i też jest wolny.
jwg

2
To jest niepoprawne. Należy zmienić z 2 na 4. 2 oznacza autostart. 4 oznacza wyłączone.
Richb

1

Właśnie od jakiegoś czasu rozwiązałem ten problem i miałem trudności ze znalezieniem źródła problemu. W końcu znalazłem dwie rzeczy, które miały dramatyczny wpływ:

  • Wyłączanie usługi wyszukiwania systemu Windows. Miało to dramatyczny wpływ na wydajność.
  • Zamykanie rozszerzeń Git. Otwarcie w tle okna przeglądania rozszerzeń Git spowodowało, że czasy wykonywania poleceń Cygwin git wydłużyły się o pozornie losowy współczynnik do około 10.

0

Problemem może być zakończenie bash, jeśli jest włączone, co jest nieco wolniejsze w systemie Windows niż Linux.

Spróbuj ustawić zmienną PS1 na coś prostego, np. „$”, I zobacz, czy to przyspieszy. Jeśli tak, pamiętaj, że wprowadzono pewne optymalizacje do ukończenia basha w ostatnich wersjach git. Być może potrzebujesz aktualizacji.


1
Używam absolutnie najnowszej wersji (zobacz moje komentarze na temat odpowiedzi VonC powyżej). Ale dam temu szansę.
Kevin L.

Wersja 1.7.0.2 niekoniecznie jest najnowocześniejsza w tym kontekście. Optymalizacje, o których mówię, miały miejsce w upstream-git. Nie jestem pewien, czy byli w wersji 1.7.0.2 Git dla Windows, czy nie.
kusma

0

To zadziałało dla mnie. Nie oczekuj, że będzie to uniwersalne rozwiązanie.

Sprawdź zmienną środowiskową $ HOME w bash i windows. Jeśli wskazuje na konto użytkownika, sprawdź profil / uprawnienia użytkownika w systemie Windows. Zmień odpowiednio konto użytkownika lub $ HOME.


6
Czy mógłbyś trochę rozwinąć te złowieszcze profile / pozwolenia?
Tobias Kienzler

0

Napotkałem ten sam problem podczas uruchamiania git dla systemu Windows (msysgit) w systemie Windows 7 x64 jako ograniczone konto użytkownika przez dłuższy czas. Z tego, co przeczytałem tutaj i z innych miejsc, wspólnym tematem wydaje się być brak uprawnień administracyjnych i / lub UAC. Ponieważ UAC jest wyłączony w moim systemie, wyjaśnienie, że próbuje zapisać / usunąć coś w katalogu plików programu, jest dla mnie najbardziej sensowne.

W każdym razie rozwiązałem mój problem, instalując przenośną wersję git 1.8 z programem zipinstaller. Zauważ, że musiałem rozpakować plik dystrybucyjny .7z i przepakować go jako zip, aby zipinstaller działał. Musiałem również ręcznie dodać ten katalog do mojej ścieżki systemowej.

Wydajność jest teraz dobra. Mimo że jest zainstalowany w katalogu Program Files (x86), do którego nie mam uprawnień jako użytkownik z ograniczeniami, wydaje się, że nie ma tego samego problemu. Przypisuję to albo temu, że wersja przenośna jest nieco bardziej konserwatywna, jeśli zapisuje / usuwa pliki, co prawdopodobnie ma miejsce, albo aktualizacji z 1.7 do 1.8. Nie będę próbował określić, który z nich jest przyczyną, wystarczy powiedzieć, że teraz działa znacznie lepiej.


0

Możesz spróbować odinstalować msysgit, zrestartować system Windows, zainstalować najnowszą wersję msysgit. Wydawało się, że to działa dla mnie. Znalazłem tę sugestię tutaj:

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

EDYTOWAĆ

PS Miałem już wyłączone UAC, zanim napotkałem powolne problemy z Gitem, więc nie wiem, czy wyłączenie UAC jest wymagane, czy nie, aby Git działał szybko.


0

Jak wskazano, najlepszym rozwiązaniem jest uruchomienie jako administrator. Jednak inną opcją , która przynajmniej przyspieszy stan git , jest trustctime = false . Przed tym statusem gita trwało około 30 sekund, a potem jest to ta sama kwota, która jest pokazana na wyjściu - zajęło X sekund, aby ...


0

Możesz również uzyskać istotny wzrost wydajności, zmieniając następującą konfigurację git:

git config --global status.submoduleSummary false

Po uruchomieniu prostego git statuspolecenia w systemie Windows 7 x64 uruchomienie komputera zajęło ponad 30 sekund. Po zdefiniowaniu tej opcji polecenie jest natychmiastowe.

Aktywacja własnego śledzenia Git, jak wyjaśniono na następnej stronie, pomogła mi znaleźć źródło problemu, który może różnić się w twojej instalacji: https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so- powolny


-4

Prawdopodobnie jest to kwestia monitu, który analizuje repozytorium Git. Możesz przetestować, wykonując „czyszczenie” gdzieś poza repozytorium Git. Możesz go przyspieszyć, łatając git-complete.bash lub wykonując sztuczki z core.filemode.

Jeśli chodzi o integrację z Visual Studio: to jest Open Source. Oczekiwanie, że inni będą pracować dla Ciebie za darmo, jest niesprawiedliwe.

Uważam też go raczej śmieszne nie zadać pytanie na liście mailingowej msysgit, ale teraz mogę błądzić.


5
Nie należy tolerować podpalania na StackOverflow. Proszę, staraj się, aby dyskurs był bardziej cywilny
phord

1
To jest zabawne. Mój komentarz był jedynym komentarzem zawierającym konkretne informacje techniczne. Oferta pomocy w rozwiązaniu problemu jest nadal otwarta, wiesz? I oczywiście jestem dość zdenerwowany, że poruszono tutaj kwestię dotyczącą stackoverflow, którego nie monitoruję, a na który inni musieli mi zwrócić uwagę. Wolałbym usłyszeć o tej sprawie bezpośrednio. Nie wiem jak wy, ale uważam to za niesprawiedliwe, gdy oryginalny projekt nie jest nawet powiadamiany o problemach.
Dscho

Zgadzam się dwa lata później. Byłem zbyt surowy. Przepraszam, Dscho. Listy mailingowe programistów git są naprawdę pomocne.
phord

2
@Dscho, powinieneś zrozumieć, że ludzie często publikują tutaj najpierw, ponieważ chcą sprawdzić, czy nie ma problemów z konfiguracją lub platformą, co nie jest błędem w Git, powodującym ich problem.
jwg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.