Magit impiega molto tempo a caricare un file. Assolutamente sproporzionato rispetto a qualsiasi altro compito - può richiedere diversi minuti, altrimenti mi arrendo e lo commetto dalla shell. C'è qualche ragione? Come posso eseguirne il debug? È interessante notare che se uccido il buffer *magit-process*
(quello che deve interagire con il processo git) e poi continua con l'attività, allora tutto funziona. Ma non ci sono messaggi di errore in quel buffer, solo il comando stesso.Magit è molto lento quando si esegue il commit su Windows
risposta
M-x personalizzare-var RET magit-git-eseguibile RET
Modificare il valore per il percorso completo dell'eseguibile git. Per esempio ho impostato il mio in c: /cygwin/bin/git.exe. Prima che lo facessi, magit era dolorosamente lento ... ora è solo un po 'lento.
Questo in realtà mi ha aiutato anche su OS X, stavo usando il plugin github di zsh e zsh nel pacchetto oh-my-zsh che avvolge git come un comando hub. – ustun
Il magit non ha accelerato molto, se solo si aggiungesse il percorso git.exe.
Il modo migliore è aggiungere tutti percorso dei comandi correlati git con seguente configurazione [1]
(if (eq system-type 'windows-nt)
(progn
(setq exec-path (add-to-list 'exec-path "C:/Program Files (x86)/Git/bin"))
(setenv "PATH" (concat "C:\\Program Files (x86)\\Git\\bin;" (getenv "PATH")))))
exec-percorso è importante per Magit, setenv è utilizzato da eshell.
Nel mio ambiente (Windows 7 x64), lo stato di magit costa solo 2 secondi anziché 1 ~ 2 minuti.
[1] https://lists.gnu.org/archive/html/emacs-devel/2012-05/msg00269.html
E 'lento a causa di una combinazione del modo in cui è scritto e Windows essendo leggermente più lento rispetto ai sistemi UNIX per avviare i processi.
Magit dipende in gran parte dai processi sincroni per visualizzare la pagina di stato. Ecco un output ho costruito da un singolo stage-item
corsa:
magit-cmd-output git.exe (--no-pager symbolic-ref -q HEAD) (0 1 153000 0) {refs/heads/master}
magit-cmd-output git.exe (--no-pager config branch.master.remote) (0 1 149000 0) {}
magit-cmd-output git.exe (--no-pager config --bool branch.master.rebase) (0 1 155000 0) {}
magit-cmd-output git.exe (--no-pager config branch.master.merge) (0 1 155000 0) {}
magit-cmd-output git.exe (--no-pager log --max-count=1 --abbrev-commit --abbrev=7 --pretty=oneline) (0 1 168000 0) {}
magit-cmd-output git.exe (--no-pager stash list) (0 2 831000 0) {}
magit-cmd-output git.exe (--no-pager config status.showUntrackedFiles) (0 1 177000 0) {}
magit-cmd-output git.exe (--no-pager ls-files --others -t --exclude-standard) (0 1 195000 0) {? thehangover.jpg? tugofwar.jpg? tugogwar.jpg? typists.jpg}
magit-cmd-output git.exe (--no-pager diff-files) (0 1 158000 0) {}
magit-cmd-output git.exe (--no-pager mktree) (0 1 157000 0) {4b825dc642cb6eb9a060e54bf8d69288fbee4904}
magit-cmd-output git.exe (--no-pager diff-index --cached 4b825dc642cb6eb9a060e54bf8d69288fbee4904) (0 1 156000 0) {:000000
(nota: questo è già ottimizzata, ho rimosso peggiori chiamate ridondanti).
Puoi vedere qui che Magit chiama git per ciascuno di questi set di argomenti e impiega 1 secondo e così tanti microsecondi. Nel peggiore dei casi (il stash list
) quasi 3 secondi. Tutto sommato e lo rende molto lento.
Molte di queste chiamate potrebbero essere memorizzate nella cache. Ma la cosa difficile sarebbe quando eliminarli. Ciò richiederebbe un sacco di cambiamenti in Magit per fare bene.
In alternativa ci sarebbe un modo per raggrupparli in modo che siano più veloci? Può essere. Non riesco a pensare in questo modo adesso. Forse un eseguibile git speciale potrebbe renderlo disponibile?
Come hai definito questa chiamata? Mi ci vogliono 30 secondi per fare quasi tutto con Magit su Windows e mi piacerebbe vedere cosa è così lento. –
- 1. Perché il rubino è molto più lento su Windows?
- 2. Perché Python è molto più lento su Windows?
- 3. DbContext è molto lento quando si aggiunge e si elimina
- 4. Vim è lento quando si modificano i file su samba
- 5. Quando si esegue il debug su Windows dove va stderr?
- 6. Git è molto lento su Mac/OSX
- 7. Perché MinGW è molto lento?
- 8. BASH è molto lento?
- 9. django è molto lento
- 10. Test di rastrellamento molto lento in Windows
- 11. PHP file_get_contents molto lento quando si utilizza l'url completo
- 12. Perché Ruby è molto più lento su Windows Server che su Windows DEV?
- 13. UIImage setImage è molto, molto lento
- 14. EF6 SQLQuery molto lento ma il database è molto veloce
- 15. Jenkins (Windows) molto lento git fetch
- 16. Il pacchetto `Friday` è molto lento
- 17. Lancio AMI molto lento
- 18. matplotlib molto lento. È normale?
- 19. Android TextureView.getBitmap() è molto lento
- 20. di CRUDRepository è molto lento?
- 21. git stash è lento su Windows
- 22. Phantomjs funziona ma è molto lento
- 23. MFMessageComposeViewController molto più lento su iOS 7
- 24. Egit molto lento nel gestire grandi progetti
- 25. Nginx + PHP-FPM è molto lento su Mountain Lion
- 26. Ciclo foreach molto lento
- 27. jQuery Mobile molto lento su iPad
- 28. Accesso a '/ svn/ctm /! Svn/me' vietato Quando si esegue il commit al server svn?
- 29. Query MongoDB su campo indicizzato molto lento
- 30. L'uso di drawImage con Canvas è molto lento su Chrome
Suppongo che qualcosa stia scadendo, ma * potrebbe * potenzialmente moltiplicato anche per il numero di buffer che hai aperto, poiché in momenti diversi (incluso quando si esegue il commit) Magit eseguirà qualche elaborazione su tutti i buffer aperti (c'è un problema aperto su questo), che può essere molto evidente anche quando il magit è altrimenti veloce. Potrebbe valere la pena ripetere il test in una nuova istanza di Emacs con i buffer minimi aperti e vedere se ciò migliora le prestazioni? – phils
Non conosco i minuti ma sicuramente qualcosa non va con Magit su Windows. Sembra che abbia a che fare con l'asincronia. L'ho profilato e sto ottenendo risultati molto strani. Continuerò a cercare finché non riesco a risolverlo. –
Ho appena profilato un po '... sembra che Magit stia chiamando un file di processo (che è sincrono) su git * molto *. Questo lo rende piuttosto lento. In particolare chiama rev-parse 5 volte per una singola sequenza di un file. Sembra eccessivo. –