Msysgit bash è terribilmente lento in Windows 7


84

Adoro Git e lo uso su OS X praticamente costantemente a casa. Al lavoro, usiamo svn su Windows, ma vogliamo migrare a git non appena gli strumenti sono completamente maturati (non solo TortoiseGit , ma anche qualcosa di simile alla bella integrazione di Visual Studio fornita da VisualSVN ). Ma sto divagando ...

Di recente ho installato msysgit sulla mia macchina Windows 7 e quando si utilizza la versione inclusa di bash, è terribilmente lento. E non solo le operazioni git; clearrichiede circa cinque secondi . AAAAH!

Qualcuno ha riscontrato un problema simile?


Modifica : sembra che msysgit non stia giocando bene con UAC e potrebbe essere solo una piccola svista di progettazione risultante dallo sviluppo su XP o dall'esecuzione di Vista o 7 con UAC disabilitato; l'avvio di Git Bash utilizzando i Run as administratorrisultati nella velocità della luce che vedo con OS X (o su 7 dopo aver avviato Git Bash con una connessione di rete - vedi la risposta di @Gauthier).

Modifica 2 : AH HA! Vedi la mia risposta.


Non 5 secondi di lenta, no. Sarà più lento, ma più veloce della versione Cygwin.
Yann Ramin

@theatrus: ho effettivamente usato un cronometro proprio ora. La media è stata di 3,8 secondi. Quindi hai ragione, ma qualcosa è ancora profondamente sbagliato.
Kevin L.

Un altro rallentamento di msysgit è una vecchia versione di OpenSSH documentata qui darrell.mozingo.net/2011/09/29/…
JodaStephen


Risposte:


54

Puoi velocizzare notevolmente Git su Windows eseguendo tre comandi per impostare alcune opzioni di configurazione:

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

Appunti:

  • core.preloadindex esegue operazioni sul filesystem in parallelo per nascondere la latenza (aggiornamento: abilitato di default in git 2.1)

  • core.fscache risolve i problemi di UAC in modo da non dover eseguire Git come amministratore (aggiornamento: abilitato per impostazione predefinita in Git per Windows 2.8)

  • gc.auto riduce al minimo il numero di file in .git /


Questa dovrebbe essere ora la risposta accettata. Funziona come un fascino!
krlmlr

8
Questo non funziona per me. Il mio git bash è ancora in ritardo di 1-2 secondi dopo aver dato un comando.
Jaskey

Ha funzionato benissimo per me; ha portato il mio stato git su un grande repo da 13 secondi a 0,7 secondi
noelob

2
git config --global core.fscache truenon ha fatto niente per me; tuttavia, ha git config core.fscache truefatto il trucco. In base a ciò , è perché core.fscache è un'impostazione per repository.
David Merriman,

2
@DavidMerriman Il commento "per repo" indica semplicemente che puoi modificare questa impostazione sui singoli repository. (Il che è vero per tutte le impostazioni, quindi non so perché sia ​​menzionato.) Il commento non significa che funzioni fscache solo come impostazione per repo. Le impostazioni globali si applicano a tutti i repository su una macchina a meno che non vengano sovrascritte dalle impostazioni per repository.
shoelzer

37

La soluzione per la lentezza su Vista o 7 sembra essere in esecuzione Git Bash utilizzando Run as administrator(o disabilitando l'UAC per il collegamento Git Bash ... o disabilitando completamente l' UAC ). La differenza è notte e giorno e usare git su 7 è di nuovo fantastico.

Questo sembra essere correlato a un problema noto e, come ho ipotizzato, XP come ambiente di sviluppo per msysgit è parzialmente responsabile.


Bel suggerimento (anche se non intenzionale :)). L'esecuzione di "git svn clone" in Windows 2008 R2 con 1.7.4 è stato terribilmente lento per me (ci sono 5000+ commit in SVN e ci sono volute settimane solo per ottenerne la metà) ... Mi hai dato l'idea di provarlo nel suo ambiente "nativo", su XP, ed è effettivamente molto veloce. Grazie!
bdrajer

1
Ho disabilitato l'UAC e ho provato a eseguirlo dall'amministratore, e comunque ogni comando che inserisco in Git Bash impiega circa 5 secondi per essere eseguito (anche solo lsin una directory praticamente vuota)
Robin Winslow

4
La risposta a questa domanda invece ha funzionato per me: stackoverflow.com/questions/4485059/…
Robin Winslow

Anche lo spostamento dei repository in una partizione non di sistema ha mostrato grandi aumenti delle prestazioni per il mio team e ha impedito i problemi casuali di "impossibile creare file" al momento del checkout.
Laurence

1
ho provato molte soluzioni .. questa (in esecuzione come amministratore) ha finalmente funzionato per me .. ora il mio git è di nuovo velocissimo .. grazie .. :)
AweSIM

14

Per me il problema era l'uso di __git_ps1 nel prompt della shell - immagino a causa del lento accesso al disco in msysgit.

La soluzione era rimuovere $ (__ git_ps1) dalle righe PS1 = ... in / etc / profile

prova veloce se questa soluzione si applica: in una shell git, digita export PS1 = '$' e controlla la velocità delle tue operazioni.


Grazie! Questo si è rivelato essere il mio problema su Windows XP. Vedere stackoverflow.com/q/5851611/200688
AndyL

2
Probabilmente si può lasciare che __git_ps1attiva, se si disattiva le impostazioni SHOWDIRTYSTATE e / o SHOWUNTRACKEDFILES, vedi stackoverflow.com/a/4203968/321973
Tobias Kienzler

Questo è stato tutto ciò che è servito per me su Windows 7. Particolarmente fortunato perché questa macchina è bloccata senza privilegi di amministratore!
Aria

12

Ho provato quasi tutti i suggerimenti qui (incluso quello della mia altra risposta) su una nuova macchina, ma non hanno funzionato, Git è ancora lento come l'inferno.

Poi ho dato un'occhiata al software di scansione viruss (che era preinstallato): ho disabilitato la scansione in tempo reale di McAfee Security Center e presto: git è velocissimo ora! Il tempo necessario per "git svn rebase" è sceso da 30s a 5s (!).

Spero che questo sia utile ad altre persone che hanno ancora problemi con Git lento su Windows, ho perso ore a capirlo.


4
Anche il mio Git Bash si avvia lentamente prima, dopo aver aggiunto l'intero percorso di installazione di git al percorso di esclusione di Avast! Anti-Virus Suite, git bash inizia da meno di 0,5 secondi
zhxchen17

Questa è stata la risposta per me !! Uso AVG Free. L'ho disabilitato per 10 minuti, all'improvviso la pigra festa è velocissima.
Mörre

Per coloro che utilizzano Windows Defender, puoi fare in modo che escluda una cartella o un processo. Vedi support.microsoft.com/en-us/help/4028485/…
Ehtesh Choudhury

9

Purtroppo "Esegui come amministratore" non ha funzionato per me, ma come ha scoperto Kevin L, scollegare l'adattatore di rete, avviare git bash, quindi ricollegarsi ha funzionato bene. Quindi l'ho racchiuso in uno script batch e ho inserito un collegamento nel mio menu Start, contrassegnato per essere eseguito come amministratore:

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

Funziona a meraviglia finché ricordo che la mia rete viene momentaneamente interrotta.

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


5

Un mio collega ha avuto questo comportamento ogni volta che Outlook era in esecuzione. Provando a uccidere Outlook e riprovare.

Potresti anche provare a testare:

  • senza connessione a nessuna rete,
  • senza antivirus in esecuzione,
  • senza nessun altro programma in esecuzione.

3
Né Outlook né l'antivirus sembrano avere alcun effetto, ma se disabilito la mia connessione di rete e poi avvio git, è velocissimo (leggi: "Unix"), anche dopo essermi ricollegato. Interessante ...
Kevin L.

Sì. E git bash rimane veloce (finché non lo chiudo e apro un'altra istanza).
Kevin L.

2
La connessione di rete ha funzionato anche per me. Mi chiedo cosa abbia a che fare con la connessione di rete. E stranamente funziona perfettamente sulla mia rete domestica ma si rifiuta di funzionare sulla rete del mio ufficio.
Sarath

Questo ha risolto il mio problema su Windows 7 Professional a 64 bit su un iMac nuovo di zecca. Saluti!
longda

+1 antivirus come suggerito era la causa sul mio particolare sistema. windows 7 x64 ultimate. UAC (menzionato altrove) purtroppo non ha fatto differenza. grazie a tutti
MickyD

3

Abbiamo riscontrato che, durante l'esecuzione su determinati account utente, istanze git.exe separate bloccate su una chiamata a WaitForSingleObject(), quindi solo una singola operazione git.exe può essere eseguita efficacemente contemporaneamente. La modifica dell'account utente ha risolto questo problema.

Dettagli qui: https://stackoverflow.com/a/13054022


3

Ho MacAffee e gli ho detto di escludere la directory .git e tutte le sottodirectory dalla scansione in tempo reale ha risolto il problema delle prestazioni.


1
Puoi escludere l'intero disco rigido? ;-).
Peter - Ripristina Monica il

1

Come si trova in questo numero , l'esecuzione con la virtualizzazione dell'UAC disattivata (non è necessario disabilitare completamente l'UAC) fa una grande differenza.

Questo post spiega come disattivarlo (vedi in fondo al post, solo un'impostazione del registro).

Su un (grande) repository SVN a cui mi sto collegando, apportando solo la modifica di cui sopra è stato ridotto il tempo necessario per "git svn rebase" da 15s a 5s, un miglioramento del fattore 3.


Questo problema (tracker) è stato chiuso, il nuovo problema a riguardo è: github.com/msysgit/git/issues/94
childno͡.de

1

Un'alternativa a scherzare con l'UAC di Windows 7 potrebbe essere l'installazione di mysysgit al di fuori della cartella Programmi. Ad esempio, invece di "C: \ Programmi (x86) \ Git", prova a eseguire l'installazione in "C: \ git"

Ho provato a giocherellare con "Esegui come amministratore" e controlli UAC senza alcun risultato, ma mi sono arreso e ho iniziato una nuova installazione. Prima ricevevo circa 15 KiB / s al massimo, ma ora supera i 60 KB / s.


1

Se la disattivazione del controllo dell'account utente non migliora le prestazioni, prova a disattivare il driver luafv. Questo ha funzionato per me dopo aver provato quasi tutto su questa pagina e un paio di domande simili. Git è passato da insolitamente lento a abbastanza decente.

Apri "regedit" e trova la chiave di registro

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/luafv

Modificare il valore di Startda 2 a 4.

Ho trovato i dettagli su come disabilitare luafv qui . Nota che personalmente non ho idea di cosaluafv sia o cosa faccia. Quella pagina fornisce vari avvisi su cose brutte che potrebbero accadere se la disattivi, cosa che probabilmente dovresti prendere sul serio.

EDIT: Il commento qui sotto ha sottolineato che ho capito nel modo sbagliato (il link lo ha nel modo giusto). Adesso è stato risolto. Scusa alle persone di cui ho cestinato i registri :)


Il mio è impostato su 2 per impostazione predefinita. Ancora piuttosto lento.
imanuelcostigan

@imanuelc: ironia della sorte, il mio è troppo adesso (su un nuovo computer) ed è anche lento.
jwg

2
Questo non è corretto. Dovrebbe essere cambiato da 2 a 4. 2 significa avvio automatico. 4 significa disabilitato.
richb

1

Ho appena risolto questo problema per un po 'e ho avuto difficoltà a individuare la fonte del problema. Alla fine ho trovato due cose che hanno avuto un impatto drammatico:

  • Disattivazione del servizio di ricerca di Windows. Ciò ha avuto un effetto drammatico sulle prestazioni.
  • Chiusura delle estensioni Git. Avere la finestra Sfoglia delle estensioni di Git aperta in background ha causato un aumento dei tempi di esecuzione del comando git di Cygwin di un fattore apparentemente casuale fino a circa 10.

0

Il problema qui potrebbe essere il completamento della bash se è abilitato, che è un po 'più lento su Windows rispetto a Linux.

Prova a impostare la variabile PS1 su qualcosa di semplice come "$" e vedi se questo accelera le cose. In tal caso, tieni presente che sono state apportate alcune ottimizzazioni al completamento di bash nelle versioni git recenti. Forse hai bisogno di aggiornare.


1
Sto eseguendo la versione più recente e all'avanguardia (vedi i miei commenti sulla risposta di VonC, sopra). Ma ci proverò.
Kevin L.

1.7.0.2 non è necessariamente l'avanguardia in questo contesto. Le ottimizzazioni di cui sto parlando sono avvenute in upstream-git. Non sono sicuro che fossero disponibili per la versione 1.7.0.2 di Git per Windows o meno.
kusma

0

Questo ha funzionato per me. Non aspettarti che sia una soluzione adatta a tutti.

Controlla la variabile d'ambiente $ HOME in bash e windows. Se punta a un account utente, controlla il profilo / le autorizzazioni di Windows dell'utente. Modificare di conseguenza l'account utente o $ HOME.


6
Potrebbe approfondire un po 'questi profili / permessi minacciosi, per favore?
Tobias Kienzler

0

Ho riscontrato lo stesso problema eseguendo git per Windows (msysgit) su Windows 7 x64 come account utente limitato per un po 'di tempo. Da quello che ho letto qui e in altri luoghi, il tema comune sembra essere la mancanza di privilegi amministrativi e / o UAC. Poiché l'UAC è disattivato sul mio sistema, la spiegazione che sta tentando di scrivere / eliminare qualcosa nella directory dei file di programma ha più senso per me.

In ogni caso, ho risolto il mio problema installando la versione portatile di git 1.8 con zipinstaller. Nota che ho dovuto decomprimere il file di distribuzione .7z e reimballarlo come zip per far funzionare zipinstaller. Ho anche dovuto aggiungere manualmente quella directory al mio percorso di sistema.

La performance adesso va bene. Anche se è installato nella directory Programmi (x86), per cui non ho i permessi come utente con limitazioni, non sembra soffrire dello stesso problema. Lo attribuisco o al fatto che la versione portatile è un po 'più conservativa in cui scrive / cancella i file, come probabilmente è il caso, o all'aggiornamento da 1.7 a 1.8. Non cercherò di definire quale sia il motivo, basti dire che funziona ora molto meglio.


0

Potresti provare a disinstallare msysgit, riavviare Windows, installare l'ultima versione di msysgit. Sembrava fare il trucco per me. Ho trovato questo suggerimento qui:

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

MODIFICARE

PS Ho già disabilitato l'UAC prima di incappare in problemi di Git lenti, quindi non so se è necessario disabilitare l'UAC o meno per far funzionare Git velocemente.


0

La soluzione migliore è eseguire come amministratore, come sottolineato. Tuttavia un'altra opzione per rendere git status veloce, almeno, è trustctime = false . Prima che lo stato di git impiegasse circa 30 secondi, dopodiché è la stessa quantità mostrata nell'output - Ci sono voluti X secondi per ...


0

Potresti anche ottenere un importante aumento delle prestazioni modificando la seguente configurazione git:

git config --global status.submoduleSummary false

Quando si esegue il semplice git status comando su Windows 7 x64, il mio computer ha impiegato più di 30 secondi per funzionare. Dopo che questa opzione è stata definita, il comando è immediato.

L'attivazione della traccia di Git come spiegato nella pagina seguente mi ha aiutato a trovare l'origine del problema, che potrebbe differire nella tua installazione: https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so- lento


-4

Probabilmente è una questione del prompt che analizza il tuo repository Git. Puoi testare facendo "clear" da qualche parte al di fuori di un repository Git. E puoi accelerarlo applicando una patch a git-completamento.bash o giocando trucchi con core.filemode.

Per quanto riguarda l'integrazione di Visual Studio: questa è Open Source. È ingiusto aspettarsi che gli altri lavorino per te gratuitamente.

Trovo anche piuttosto divertente non porre la domanda sulla mailing list msysGit, ma ora sto divagando.


5
Flaming su StackOverflow non dovrebbe essere tollerato. Per favore cerca di mantenere il discorso più civile
phord

1
È buffo. Il mio commento è stato l' unico commento con informazioni tecniche concrete. L'offerta per aiutare a risolvere il problema è ancora aperta, sai? E ovviamente sono abbastanza sconvolto dal fatto che il problema sia stato sollevato qui, su stackoverflow, che non controllo e che mi ha dovuto far notare da altri. Avrei preferito conoscere direttamente la questione. Non so voi, ma trovo ingiusto quando il progetto originale non viene nemmeno informato dei problemi.
Dscho

Due anni dopo, sono d'accordo. Sono stato troppo duro. Scusa, Dscho. Le mailing list degli sviluppatori git sono davvero utili.
phord

2
@Dscho, dovresti capire che le persone spesso pubblicano qui prima perché vogliono controllare che non ci siano problemi di configurazione o piattaforma, che non sono un bug in Git, che causano il loro problema.
jwg
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.