Я вынужден использовать Windows 10 для проекта. Да, я бы предпочел использовать GNU / Linux. Чтобы сохранить здравомыслие, я пытался рассматривать Windows как загрузчик для Emacs :)
К сожалению, Magit (одна из моих любимых частей Emacs, которая также компенсирует отсутствие хорошей командной строки в Windows) невыносимо медленна. У меня есть SSD, 16 ГБ оперативной памяти и четырехъядерный процессор i7 , но это занимает восемь секунд , чтобы выполнить magit-status
на небольшое хранилище. Затем, когда я хочу внести другое изменение, это занимает около 5 секунд на файл .
Вот что я попробовал:
$ git config --global core.preloadindex true
$ git config --global core.fscache true
$ git config --global gc.auto 256
- Добавление всего проекта в список исключений Защитника Windows (мой единственный AV)
- Установка
magit-git-executable
обычного msysgit, который я скачал ( https://git-for-windows.github.io/ ). Я проверил иgit status
здесь занимает <1 секунды. Я знаю, чтоmagit-status
это намного больше, но это слишком много.
Кто-нибудь может предложить способы сделать это быстрее? Я не могу представить, чтобы кто-нибудь использовал Magit на Windows, как это.
Было высказано предположение, что этот вопрос является дубликатом, но они спросили:
Я изо всех сил пытаюсь понять, почему Emacs заметно короче время запуска в Ubuntu, чем Windows. Кто-нибудь знает ответ?
Я знаю по крайней мере несколько причин, почему Emacs, Git и Magit работают медленнее в Windows. Я спрашиваю, как я могу оптимизировать Magit, чтобы делать меньше вещей, или кэшировать результаты, или что-то еще, даже если это в ущерб функциональности.
git-status
занимает <1 секунду? Это должно быть по существу мгновенно. Есть ли ощутимая задержка вообще?git
команд из командной строки?magit-git-executable
, вероятно, будет немного быстрее (те, которые находятсяcmd
иbin
являются фактически обертками, еслиexecutable-find
возвращает один из них, magit попытается установитьmagit-git-executable
«реальный» git). 8 секунд для небольшого репозитория звучат, как будто что-то еще не так, однако, для репозитория magit здесь требуется ~ 0.8с (Windows 8).magit-refresh-verbose
вt
.Ответы:
Я действительно провел довольно много исследований по этому вопросу, и в основном проблема в том, что GIT для Windows отстой
Это вышестоящая ошибка: https://github.com/git-for-windows/git/issues/596, и она требует, чтобы кто-то переписал сценарии оболочки на C, чтобы больше не было разветвления команд. Для меня это интерактивная перебазировка, которая является настоящим убийцей (я могу начать интерактивную перебазировку, пойти приготовить чай, вернуться, почитать новости, выпить чай, а потом, возможно, все закончится. Это гораздо хуже, чем у многих людей. думаю, что это так), но общих вызовов, подобных статусу, также достаточно, чтобы прервать работу.
Альтернативой может быть обновление jGit для поддержки команд, которые использует magit, а затем запуск его в nailgun для сокращения времени запуска JVM. Я начал обсуждение этого: http://dev.eclipse.org/mhonarc/lists/ jgit-DEV / msg03064.html
Возможно, вы захотите прочитать /programming/4485059 для некоторых потенциальных ускорений, но, честно говоря, вы едва заметите их.
Что вы можете сделать в magit, так это следовать совету автора по настройке минимума
magit-status
только для постановкиИтак, знаете ли вы опытных разработчиков на C или Java, которые могли бы помочь с любым из решений для исправления git или jGit?
источник
magit-status
занимает очень много времени, и я не думаю, что status использует многие из сценариев оболочки.magit-status
код, он мне немного помогает (он сокращает моеmagit-refresh
время до 2-3 секунд).magit-staging
у меня тоже пара секунд. Достаточно, чтобы прервать мое мышление, но недостаточно, чтобы разрушить мой день.magit-status
это происходит медленно, заключается в том, что онgit
может вызывать 10 или 20 раз. Запуск новых процессов в Windows происходит крайне медленно по сравнению с платформами GNU. Сценарии оболочки - крайний случай этого (потому что почти каждое утверждение - новый процесс)Недавно просмотрев список
call-process
вызововmagit-status
по другой причине, мне пришло в голову, что некоторые из них можно кэшировать. Со следующим советомmagit-status
по репо Magit идет от 1,9 до 1,3 секунд (мое предыдущее измерение 0,8 с, упомянутое в комментариях, было для другого (более быстрого) компьютера). Если вы уже используетеmagit-staging
другой ответ, это, вероятно, не сильно поможет: я видел снижение с 0,16 до 0,12 секунды (но это чуть больше, чем шум измерения).ВНИМАНИЕ: Это не заботится об обновлении кеша, поэтому что-то может пойти не так (особенно если вы возитесь с вашей конфигурацией git).
источник
nil
.