Msysgit bash é terrivelmente lento no Windows 7

Eu amo o git e o uso no OS X praticamente sempre em casa. No trabalho, usamos o svn no Windows, mas queremos migrar para o git logo que as ferramentas tenham amadurecido completamente (não apenas o TortoiseGit , mas também algo semelhante à integração do Visual Studio realmente interessante fornecida pelo VisualSVN ). Mas eu divago …

Instalei recentemente o msysgit na minha máquina com Windows 7 e, ao usar a versão incluída do bash, é terrivelmente lento. E não apenas as operações do git; clear leva cerca de cinco segundos . AAAAH!

Alguém já experimentou um problema semelhante?


Edit : Parece que msysgit não está jogando bem com o UAC e pode ser apenas uma pequena visão de projeto resultante do desenvolvimento no XP ou executando o Vista ou 7 com o UAC desativado; iniciar o Git Bash usando Run as administrator resulta na velocidade da luz que vejo no OS X (ou no 7 depois de iniciar o Git Bash sem uma conexão de rede – consulte a resposta do @Gauthier).

Edite 2 : AH HA! Veja minha resposta.

Você pode acelerar significativamente o git no Windows executando três comandos para definir algumas opções de configuração:

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

Notas:

  • core.preloadindex faz operações do sistema de arquivos em paralelo para ocultar a latência (atualização: ativada por padrão no git 2.1)

  • core.fscache corrige problemas do UAC para que você não precise executar o git como admin (atualização: ativada por padrão no Git para Windows 2.8)

  • gc.auto minimiza o número de arquivos em .git /

A solução para lentidão no Vista ou 7 parece estar executando o Git Bash usando Run as administrator (ou desabilitando o UAC para o atalho do Git Bash … ou desabilitando o UAC completamente ). A diferença é noite e dia e usar o git em 7 é incrível novamente.

Isso parece estar relacionado a um problema conhecido e, como especulei, o XP como um ambiente de desenvolvimento para msysgit é parcialmente responsável.

Para mim, o problema foi o uso __git_ps1 no prompt do shell – eu acho que devido ao access ao disco lento no msysgit.

A solução foi remover $ (__ git_ps1) das linhas PS1 = … no / etc / profile

teste rápido se esta solução se aplica: em um shell git, digite export PS1 = ‘$’ e verifique a velocidade de suas operações.

Tentei apenas sobre todas as dicas aqui (incluindo o da minha outra resposta) em uma nova máquina, mas eles não funcionaram, Git ainda lento como o inferno.

Depois, dei uma olhada no software virusscanning (que estava pré-instalado): desativei a verificação em tempo real do McAfee Security Center e pronto: git está acelerando agora! O tempo necessário para “git svn rebase” caiu de 30s para 5s (!).

Espero que isso seja útil para outras pessoas ainda tendo problemas com o lento Git no Windows, eu perdi horas imaginando isso.

Alas ‘Run as Administrator’ não funcionou para mim – mas, como Kevin L descobriu, desconectando o adaptador de rede, iniciando o git bash, a reconexão funcionou bem. Então eu coloquei isso em um script em lote e coloquei um atalho para ele no meu menu Iniciar, sinalizado para ser executado como admin:

 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 

Funciona um tratamento enquanto eu me lembro de que minha rede fica momentaneamente cortada.

(Win 7 Professional SP1, versão do Git 1.7.8-preview20111206)

Um colega meu teve esse comportamento sempre que o Outlook estava sendo executado. Tentando matar o Outlook e testar novamente.

Você também pode tentar testar:

  • sem conexão a qualquer rede,
  • sem antivírus em execução,
  • sem qualquer outro programa em execução.

Descobrimos que, quando executados em determinadas contas de usuário, instâncias separadas de git.exe bloqueadas em uma chamada para WaitForSingleObject() , portanto, apenas uma única operação git.exe poderia ser executada de uma só vez. Alterar a conta de usuário funcionou em torno desse problema.

Detalhes aqui: https://stackoverflow.com/a/13054022

Eu tenho MacAffee e dizendo-lhe para excluir o diretório .git e todos os subdiretórios de varredura em tempo real abordou o problema de desempenho.

Conforme encontrado nesta edição , a execução com a virtualização do UAC desativada (não é necessário desabilitar totalmente o UAC) faz uma grande diferença.

Esta postagem explica como desativá-la (veja a parte inferior da postagem, apenas uma configuração do Registro).

Em um repo SVN (grande) ao qual estou me conectando, fazendo apenas a alteração acima, diminuí o tempo necessário para “git svn rebase” de 15s para 5s, uma melhoria de fator 3.

Uma alternativa para mexer com o Windows 7 UAC pode ser instalar o mysysgit fora da sua pasta Arquivos de Programas. Por exemplo, em vez de “C: \ Arquivos de Programas (x86) \ Git”, tente instalar em “C: \ git”

Eu tentei mexer com controles ‘Executar como administrador’ e UAC sem sucesso, mas desisti e comecei uma nova instalação. Eu estava recebendo cerca de 15KiB / s no máximo antes, mas agora está acima de 60kB / s.

Se desligar o UAC não melhorar o desempenho, tente desligar o driver luafv. Isso funcionou para mim depois de tentar quase tudo nesta página e o par de perguntas semelhantes. O Git passou de inutilmente lento para bastante decente.

Abra ‘regedit’ e encontre a chave do registro

 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/luafv 

Altere o valor de Start de 2 para 4.

Eu encontrei os detalhes sobre como desabilitar o luafv aqui . Note que eu pessoalmente não tenho idéia do que o luafv é ou faz. Essa página fornece vários avisos sobre coisas ruins que podem acontecer se você desativá-la, o que provavelmente deve ser levado a sério.

EDIT: O comentário abaixo apontou que eu tenho esse o caminho errado (o link tem o caminho certo). Está consertado agora. Desculpe as pessoas cujos registros eu destruí 🙂

Acabei de solucionar isso por um tempo e tive dificuldade em identificar a origem do problema. No final, encontrei duas coisas que tiveram um impacto dramático:

  • Desativando o serviço de pesquisa do Windows. Isso teve um efeito dramático no desempenho.
  • Fechando extensões do Git. Ter a janela Git Extensions Browse aberta em segundo plano fez com que os tempos de execução do comando Cygwin git aumentassem por um fator aparentemente random de até cerca de 10.

O problema aqui pode ser o bash-completion, se estiver habilitado, o que é um pouco mais lento no Windows do que no Linux.

Tente configurar a variável PS1 para algo simples como “$” e veja se isso acelera as coisas. Em caso afirmativo, esteja ciente de que houve algumas otimizações na conclusão do bash em versões recentes do ish. Talvez você precise atualizar.

Isso funcionou para mim. Não espere que seja uma solução única para todos os tamanhos.

Verifique a variável de ambiente $ HOME no bash e no windows. Se ele apontar para uma conta de usuário, verifique o perfil / permissions do Windows. Altere a conta do usuário ou o $ HOME de acordo.

Eu encontrei o mesmo problema executando o git para Windows (msysgit) no Windows 7 x64 como uma conta de usuário limitada por algum tempo. Pelo que li aqui e em outros lugares, o tema comum parece ser a falta de privilégios administrativos e / ou UAC. Como o UAC está desativado em meu sistema, a explicação de que ele está tentando gravar / excluir algo no diretório de arquivos do programa faz mais sentido para mim.

De qualquer forma, resolvi meu problema instalando a versão portátil do git 1.8 com o zipinstaller. Observe que eu tive que descompactar o arquivo de distribuição .7z e empacotá-lo como um zip para que o zipinstaller funcionasse. Eu também tive que adicionar manualmente esse diretório para o caminho do meu sistema.

O desempenho está bem agora. Embora esteja instalado no diretório Program Files (x86), para o qual não tenho permissions como usuário limitado, ele não parece sofrer do mesmo problema. Atribuo isso ao fato de que a versão portátil é um pouco mais conservadora no local em que escreve / exclui arquivos, o que provavelmente é o caso, ou na atualização de 1.7 para 1.8. Eu não vou tentar definir qual é o motivo, basta dizer que funciona muito melhor agora.

Você pode querer tentar desinstalar o msysgit, reiniciar o windows, instalar a versão mais recente do msysgit. Pareceu fazer o truque para mim. Eu encontrei esta sugestão aqui:

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

EDITAR

PS Eu já tinha desativado o UAC antes de me deparar com problemas de Git lentos, por isso não sei se a desativação do UAC é necessária ou se o Git não está indo rápido.

A melhor solução é executar como administrador, conforme indicado. No entanto, outra opção para tornar o status do git rápido, pelo menos, é trustctime = false . Antes que o status do git demorasse cerca de 30 segundos e depois disso é a mesma quantidade que é mostrada na saída – Demorou X segundos para …

Você também pode obter um importante aumento de desempenho alterando a seguinte configuração do git:

 git config --global status.submoduleSummary false 

Ao executar o comando simple git status no Window 7 x64, meu computador levou mais de 30 segundos para ser executado. Após esta opção ter sido definida, o comando é imediato.

Ativar o próprio rastreamento do Git como explicado na página a seguir me ajudou a encontrar a origem do problema, que pode ser diferente em sua instalação: https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so- lento

Provavelmente é uma questão do prompt que analisa seu repository Git. Você pode testar fazendo “clear” em algum lugar fora de um repository Git. E você pode acelerá-lo tanto corrigindo git-completion.bash quanto jogando truques com core.filemode.

Quanto à integração do Visual Studio: Este é o Open Source. É injusto esperar que os outros trabalhem para você de graça.

Eu também acho bastante engraçado não fazer a pergunta na lista de discussão msysGit, mas agora eu discordo.