Jestem zmuszony używać Windows 10 do projektu. Tak, wolę używać GNU / Linux. Aby zachować zdrowie psychiczne, starałem się traktować Windows jako program ładujący Emacsa :)
Niestety, Magit (jedna z moich ulubionych części Emacsa, która również rekompensuje brak dobrego wiersza poleceń w systemie Windows) jest nieznośnie powolny. Mam dysk SSD, 16 GB pamięci RAM i czterordzeniowy i7, ale wykonanie go w małym repozytorium zajmuje osiem sekundmagit-status
. Następnie, gdy chcę wprowadzić kolejną zmianę, zajmuje to około 5 sekund na plik .
Oto, co próbowałem:
$ git config --global core.preloadindex true
$ git config --global core.fscache true
$ git config --global gc.auto 256
- Dodanie całego projektu do listy wykluczeń Windows Defender (mój jedyny AV)
- Ustawienie
magit-git-executable
zwykłego msysgit, który pobrałem ( https://git-for-windows.github.io/ ). Sprawdziłem igit status
tutaj zajmuje <1 sekundę. Wiem, żemagit-status
to znacznie więcej, ale to za dużo.
Czy ktoś może zasugerować, jak to zrobić szybciej? Nie mogę sobie wyobrazić nikogo używającego Magit w systemie Windows w ten sposób.
Zasugerowano, że to pytanie jest duplikatem, ale zadali:
Próbuję zrozumieć, dlaczego Emacs ma zauważalnie krótszy czas uruchamiania na Ubuntu niż Windows. Czy ktoś zna odpowiedź?
Znam przynajmniej kilka powodów, dla których Emacs, Git i Magit działają wolniej w systemie Windows. Pytam, w jaki sposób zoptymalizować Magit, aby wykonać mniej czynności, buforować wyniki lub coś podobnego, nawet jeśli odbywa się to kosztem funkcjonalności.
źródło
git-status
zajmuje <1 sekundę? Powinno to być zasadniczo natychmiastowe. Czy w ogóle jest jakieś zauważalne opóźnienie?git
poleceń z wiersza poleceń?magit-git-executable
będzie prawdopodobnie nieco szybszy (te wewnątrzcmd
ibin
faktycznie są opakowaniami, jeśliexecutable-find
zwróci jeden z nich magit spróbuje ustawićmagit-git-executable
się na „prawdziwego” gita). 8 sekund na małe repozytorium wydaje się, że coś innego jest nie tak, zajmuje ~ 0,8 s dla repozytorium magit tutaj (Windows 8).magit-refresh-verbose
nat
.Odpowiedzi:
Właściwie przeprowadziłem dość dużo badań na ten temat i zasadniczo problemem jest to, że git dla Windows jest do bani
To jest błąd nadrzędny: https://github.com/git-for-windows/git/issues/596 i wymaga to od kogoś przepisania skryptów powłoki w C, aby nie było więcej rozwidlania poleceń. Dla mnie to interaktywny rebase, który jest prawdziwym zabójcą (mogę uruchomić interaktywny rebase, zrobić herbatę, wrócić, poczytać jakieś wiadomości, wypić herbatę, a potem może to się skończy. Jest znacznie gorsze niż wiele osób myślę, że tak), ale ogólne wywołania przypominające status są wystarczające, aby przerwać pracę.
Alternatywą może być aktualizacja jGit do obsługi poleceń używanych przez magit, a następnie uruchomienie go w nailgun w celu skrócenia czasu uruchamiania JVM. Zacząłem wątek na ten temat: http://dev.eclipse.org/mhonarc/lists/ jgit-dev / msg03064.html
Możesz przeczytać /programming/4485059 dla niektórych potencjalnych przyspieszeń, ale szczerze mówiąc, prawie ich nie zauważysz.
W Magit można postępować zgodnie ze wskazówkami autora, aby ustawić minimalny
magit-status
scenariuszczy znasz jakichś doświadczonych programistów C lub Java, którzy byliby w stanie pomóc w rozwiązaniu jednego z problemów związanych z naprawą git lub jGit?
źródło
magit-status
zajmuje to również naprawdę dużo czasu i nie sądzę, że status używa wielu skryptów powłoki.magit-status
kod, wydaje mi się, że trochę mi pomaga (skraca mójmagit-refresh
czas do 2-3 sekund).magit-staging
zajmuje mi to również kilka sekund. Wystarczająco, by przerwać moje myślenie, ale nie wystarczy, by zniszczyć mój dzień.magit-status
jest powolny, jest to, że woła dogit
10 lub 20 razy. Uruchamianie nowych procesów w systemie Windows jest wyjątkowo wolne w porównaniu do platform GNU. Skrypty powłoki są tego ekstremalnym przypadkiem (ponieważ prawie każda instrukcja jest nowym procesem)Po niedawnym przejrzeniu listy
call-process
połączeń zmagit-status
innego powodu przyszło mi do głowy, że niektóre z nich można buforować. Z następującą radąmagit-status
na temat repozytorium Magita wydłuża się z 1,9 do 1,3 sekundy (mój poprzedni pomiar 0,8 s wspomniany w komentarzach dotyczył innego (szybszego) komputera). Jeśli używasz jużmagit-staging
drugiej odpowiedzi, prawdopodobnie nie pomoże to zbytnio: zauważyłem redukcję z 0,16 do 0,12 sekundy (ale to niewiele więcej niż szum pomiaru).OSTRZEŻENIE: To nie zajmuje się aktualizacją pamięci podręcznej, więc może się nie udać (szczególnie jeśli masz problemy z konfiguracją git).
źródło
nil
.