Sou forçado a usar o Windows 10 para um projeto. Sim, eu prefiro usar o GNU / Linux. Para manter minha sanidade mental, tentei considerar o Windows como um gerenciador de inicialização para o Emacs :)
Infelizmente, o Magit (uma das minhas partes favoritas do Emacs, que também compensa a falta de uma boa linha de comando no Windows) é insuportavelmente lento. Eu tenho um SSD, 16 GB de RAM e um i7 quad-core, mas leva oito segundos para executar magit-status
em um pequeno repositório. Então, quando eu quero realizar outra alteração, leva cerca de 5 segundos por arquivo .
Aqui está o que eu tentei:
$ git config --global core.preloadindex true
$ git config --global core.fscache true
$ git config --global gc.auto 256
- Adicionando o projeto inteiro à lista de exclusão do Windows Defender (meu único AV)
- Definindo
magit-git-executable
como o msysgit regular que baixei ( https://git-for-windows.github.io/ ). Eu verifiquei egit status
aqui leva <1 segundo. Eu sei quemagit-status
faz muito mais, mas isso é demais.
Alguém pode sugerir maneiras de tornar isso mais rápido? Não consigo imaginar alguém usando o Magit no Windows assim.
Foi sugerido que esta pergunta é uma duplicata, mas eles perguntaram:
Estou lutando para entender por que o Emacs tem um tempo de inicialização visivelmente menor no Ubuntu do que no Windows. Alguém sabe a resposta?
Sei pelo menos algumas razões pelas quais o Emacs, Git e Magit são mais lentos no Windows. Estou perguntando como otimizar o Magit para fazer menos coisas, ou armazenar em cache resultados, ou algo assim, mesmo que seja à custa da funcionalidade.
git-status
demora <1 segundo? Deve ser essencialmente instantâneo. Existe algum atraso perceptível?git
comandos equivalentes na linha de comando?magit-git-executable
provavelmente será um pouco mais rápida (as que estãocmd
ebin
são realmente wrappers, seexecutable-find
retorna um deles, o magit tentará definirmagit-git-executable
o git "real"). Porém, 8 segundos para um pequeno repositório parecem estar errados, demora ~ 0,8s para o repositório do magit aqui (Windows 8).magit-refresh-verbose
comot
.Respostas:
Na verdade, eu fiz bastante pesquisa sobre isso e, fundamentalmente, o problema é que o git for windows é uma merda
Este é o bug do upstream: https://github.com/git-for-windows/git/issues/596 e requer que alguém reescreva os scripts de shell em C para que não haja mais bifurcação de comandos. Para mim, é o rebote interativo que é o verdadeiro assassino (eu posso iniciar um rebote interativo, fazer chá, voltar, ler algumas notícias, beber o chá e, talvez , terminar. É muito pior do que muitas pessoas acho que sim), mas as chamadas gerais de status também são suficientes para interromper o andamento do trabalho.
Uma alternativa pode ser a atualização do jGit para suportar os comandos que o magit usa e, em seguida, executá-lo no nailgun para reduzir o tempo de inicialização da JVM. Iniciei um tópico para discutir isso: http://dev.eclipse.org/mhonarc/lists/ jgit-dev / msg03064.html
Você pode ler /programming/4485059 para obter algumas acelerações em potencial, mas, honestamente, quase não as notará.
Algo que você pode fazer no magit é seguir o conselho do autor na criação de um mínimo
magit-status
apenas para a preparaçãoEntão, você conhece algum desenvolvedor C ou Java experiente que possa ajudar com uma das soluções para corrigir o git ou o jGit?
fonte
magit-status
leva muito tempo, e não acho que o status use muitos dos scripts shell.magit-status
código "mínimo" , ele parece me ajudar um pouco (reduz meumagit-refresh
tempo para 2-3 segundos).magit-staging
leva alguns segundos para mim também. O suficiente para interromper meu pensamento, mas não o suficiente para destruir o meu dia.magit-status
é lento é porque chamagit
talvez 10 ou 20 vezes. Iniciar novos processos no Windows é extremamente lento em comparação com as plataformas GNU. Os scripts shell são um caso extremo deste (porque praticamente todos os declaração é um novo processo)Tendo analisado recentemente a lista de
call-process
chamadas demagit-status
outro motivo, ocorreu-me que algumas delas podem ser armazenadas em cache. Com o seguinte conselhomagit-status
sobre o repo do Magit, vai de 1,9 a 1,3 segundos (minha medida anterior de 0,8s mencionada nos comentários foi para um computador diferente (mais rápido)). Se você já está usandomagit-staging
a outra resposta, provavelmente não vai ajudar muito: vi uma redução de 0,16 a 0,12 segundos (mas isso é pouco maior que o ruído de medição).AVISO: Isso não se encarrega de atualizar o cache; portanto, as coisas podem dar errado (especialmente se você estiver mexendo na sua configuração do git).
fonte
nil
.