web-dev-qa-db-fra.com

Msysgit bash est horriblement lent dans Windows 7

J'adore Git et je l'utilise sur OS X presque constamment à la maison. Au travail, nous utilisons svn sur Windows, mais nous voulons migrer vers git dès que les outils sont arrivés à maturité (pas seulement TortoiseGit , mais aussi quelque chose qui ressemble à l'intégration vraiment agréable de Visual Studio fournie par VisualSVN ). Mais je m'égare ...

J'ai récemment installé msysgit sur ma machine Windows 7, et lorsque vous utilisez la version incluse de bash, c'est horriblement lent. Et pas seulement les opérations git; clear prend environ cinq secondes. AAAAH!

Quelqu'un a-t-il rencontré un problème similaire?


Edit : Il apparaît que msysgit ne joue pas bien avec UAC et pourrait simplement être une petite erreur de conception résultant du développement sur XP ou en exécutant Vista ou 7 avec UAC désactivé; démarrer Git Bash en utilisant Run as administrator entraîne la vitesse de l'éclair que je vois avec OS X (ou le 7 après avoir démarré Git Bash sans connexion réseau - voir la réponse @Gauthier).

Edit 2 : AH HA! Voir ma réponse.

82
Kevin L.

La solution pour la lenteur sur Vista ou 7 semble exécuter Git Bash en utilisant Run as administrator (ou désactivation de l'UAC pour Git Bash raccourci ... ou désactivation de l'UAC entièrement ). La différence est la nuit et le jour et utiliser git sur 7 est à nouveau génial.

Cela semble être lié à un problème conn et, comme je l'ai spéculé, XP comme environnement de développement pour msysgit est partiellement responsable.

37
Kevin L.

Vous pouvez accélérer considérablement Git sous Windows en exécutant trois commandes pour définir certaines options de configuration:

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

Remarques:

  • core.preloadindex effectue des opérations sur le système de fichiers en parallèle pour masquer la latence (mise à jour: activée par défaut dans git 2.1)

  • core.fscache corrige les problèmes UAC afin que vous n'ayez pas besoin d'exécuter Git en tant qu'administrateur (mise à jour: activée par défaut dans Git pour Windows 2.8)

  • gc.auto minimise le nombre de fichiers en .git /

53
shoelzer

Pour moi, le problème était l'utilisation de __git_ps1 dans l'invite du shell - je suppose en raison de l'accès lent au disque dans msysgit.

La solution consistait à supprimer $ (__ git_ps1) des lignes PS1 = ... dans/etc/profile

test rapide si cette solution s'applique: dans un shell git, tapez export PS1 = '$' et vérifiez la vitesse de vos opérations.

13
chrisxxyy

J'ai essayé à peu près tous les conseils ici (y compris celui de mon autre réponse) sur une nouvelle machine, mais ils n'ont pas fonctionné, Git est toujours aussi lent.

Ensuite, j'ai regardé le logiciel de virusscanning (qui était préinstallé): I désactivé l'analyse en temps réel de McAfee Security Center, et presto: git flamboie rapidement maintenant! Le temps nécessaire pour "git svn rebase" est passé de 30s à 5s (!).

J'espère que cela est utile pour d'autres personnes ayant encore des problèmes avec Git lent sur Windows, j'ai perdu des heures à comprendre cela.

12
Tom De Leu

Hélas, "Exécuter en tant qu'administrateur" n'a pas fonctionné pour moi - mais comme l'a découvert Kevin L, la déconnexion de la carte réseau, le lancement de git bash, puis la reconnexion ont bien fonctionné. J'ai donc enveloppé cela dans un script batch et y ai mis un raccourci dans mon menu Démarrer, marqué pour fonctionner en tant qu'administrateur:

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

Fonctionne comme un régal tant que je me souviens que mon réseau est momentanément coupé.

(Win 7 Professional SP1, Git version 1.7.8-preview20111206)

9
Daniel Hume

Un de mes collègues a eu ce comportement chaque fois qu'Outlook était en cours d'exécution. Essayez de tuer Outlook et testez à nouveau.

Vous pouvez également essayer de tester:

  • sans connexion à aucun réseau,
  • sans antivirus en cours d'exécution,
  • sans aucun autre programme en cours d'exécution.
5
Gauthier

J'ai McAfee et je lui dis d'exclure le répertoire .git et tous les sous-répertoires de l'analyse en temps réel résolu le problème de performances.

3
Alex Brown

Nous avons constaté que, lors de l'exécution sur certains comptes d'utilisateurs, des instances git.exe distinctes étaient bloquées lors d'un appel à WaitForSingleObject(), de sorte qu'une seule opération git.exe pouvait s'exécuter efficacement à la fois. La modification du compte d'utilisateur a permis de contourner ce problème.

Détails ici: https://stackoverflow.com/a/13054022

3
Matthew Skelton

Comme indiqué dans ce problème , l'exécution avec la virtualisation UAC désactivée (il n'est pas nécessaire de désactiver complètement UAC) fait une grande différence.

Ce message explique comment le désactiver (voir le bas du message, un seul paramètre de registre).

Sur un (grand) référentiel SVN auquel je me connecte, faire juste le changement ci-dessus a réduit le temps nécessaire pour "git svn rebase" de 15s à 5s, une amélioration de facteur 3.

1
Tom De Leu

Une alternative à jouer avec l'UAC de Windows 7 peut être d'installer mysysgit en dehors de votre dossier Program Files. Par exemple, au lieu de "C:\Program Files (x86)\Git", essayez d'installer dans "C:\git"

J'ai essayé de jouer avec "Exécuter en tant qu'administrateur" et les contrôles UAC en vain, mais j'ai abandonné et recommencé une nouvelle installation. J'obtenais environ 15 Ko/s max auparavant, mais je dépasse maintenant les 60 ko/s.

1
Frank Yin

Si la désactivation de l'UAC n'améliore pas les performances, essayez de désactiver le pilote luafv. Cela a fonctionné pour moi après avoir essayé presque tout sur cette page et quelques questions similaires. Git est passé d'une lenteur inhabituelle à une assez bonne décence.

Ouvrez "regedit" et recherchez la clé de registre

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/luafv

Modifiez la valeur de Start de 2 à 4.

J'ai trouvé les détails sur la façon de désactiver luafvici . Notez que je n'ai personnellement aucune idée de ce que luafv est ou fait. Cette page donne divers avertissements sur les mauvaises choses qui peuvent se produire si vous la désactivez, que vous devriez probablement prendre au sérieux.

EDIT: Le commentaire ci-dessous a souligné que je me suis trompé (le lien le fait dans le bon sens). C'est corrigé maintenant. Désolé pour les personnes dont j'ai enregistré les registres :)

1
jwg

Je viens de résoudre ce problème depuis un certain temps et j'ai eu du mal à identifier la source du problème. Au final, j'ai trouvé deux choses qui ont eu un impact dramatique:

  • Désactiver le service de recherche Windows. Cela a eu un effet dramatique sur les performances.
  • Fermeture des extensions Git. L'ouverture de la fenêtre Parcourir les extensions Git en arrière-plan a entraîné une augmentation des temps d'exécution de la commande Cygwin git d'un facteur apparemment aléatoire allant jusqu'à environ 10.
1
bjos

Le problème ici pourrait être l'achèvement de bash s'il est activé, ce qui est un peu plus lent sous Windows que Linux.

Essayez de définir la variable PS1 sur quelque chose de simple comme "$", et voyez si cela accélère les choses. Si c'est le cas, sachez qu'il y a eu quelques optimisations de l'achèvement de bash dans les versions récentes de git. Vous devez peut-être mettre à niveau.

0
kusma

Cela a fonctionné pour moi. Ne vous attendez pas à ce que ce soit une solution unique pour tous.

Vérifiez la variable d'environnement $ HOME dans bash et windows. S'il pointe vers un compte d'utilisateur, vérifiez le profil/les autorisations Windows de l'utilisateur. Modifiez le compte utilisateur ou $ HOME en conséquence.

0
Deepak

J'ai rencontré le même problème lors de l'exécution de git pour Windows (msysgit) sur Windows 7 x64 en tant que compte utilisateur limité depuis un certain temps. D'après ce que j'ai lu ici et ailleurs, le thème commun semble être le manque de privilèges administratifs et/ou UAC. Étant donné que l'UAC est désactivé sur mon système, l'explication selon laquelle il essaie d'écrire/supprimer quelque chose dans le répertoire des fichiers programme a le plus de sens pour moi.

Dans tous les cas, j'ai résolu mon problème en installant la version portable de git 1.8 avec zipinstaller. Notez que j'ai dû décompresser le fichier de distribution .7z et le reconditionner sous forme de Zip pour que zipinstaller fonctionne. J'ai également dû ajouter manuellement ce répertoire à mon chemin système.

La performance est maintenant bien. Même s'il est installé dans le répertoire Program Files (x86), pour lequel je n'ai pas d'autorisations en tant qu'utilisateur limité, il ne semble pas souffrir du même problème. J'attribue cela soit au fait que la version portable est un peu plus conservatrice dans les cas où elle écrit/supprime des fichiers, ce qui est probablement le cas, soit à la mise à niveau de 1.7 à 1.8. Je ne vais pas essayer de déterminer laquelle est la raison, il suffit de dire que cela fonctionne beaucoup mieux maintenant.

0
Binary Phile

La meilleure solution consiste à exécuter en tant qu'administrateur, comme indiqué. Cependant, une autre option pour rendre git status rapide, au moins, est trustctime = false. Avant cela git status a pris environ 30 secondes et après cela, c'est la même quantité qui est affichée dans la sortie - Il a fallu X secondes pour ...

0
TS'

Vous voudrez peut-être essayer de désinstaller msysgit, redémarrer Windows, installer la dernière version de msysgit. Cela semblait faire l'affaire pour moi. J'ai trouvé cette suggestion ici:

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

[~ # ~] modifier [~ # ~]

PS J'ai déjà désactivé l'UAC avant de rencontrer des problèmes lents avec Git, donc je ne sais pas si la désactivation de l'UAC est nécessaire ou non pour que Git fonctionne rapidement.

0
Herr Grumps

Vous pouvez également obtenir une amélioration importante des performances en modifiant la configuration git suivante:

git config --global status.submoduleSummary false

Lors de l'exécution du simple git status sur Windows 7 x64, il a fallu plus de 30 secondes à mon ordinateur pour fonctionner. Une fois cette option définie, la commande est immédiate.

L'activation du traçage de Git comme expliqué dans la page suivante m'a aidé à trouver l'origine du problème, qui peut différer dans votre installation: https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git- est si lent

0
Olivier